Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

selection d'un fichier a traiter dans une userform...

3 réponses
Avatar
Hervé Frank-Dangel
Bonjour tt le monde !!!!

Voilà, mon prog est à présent terminé, il me reste plus qu'a compiler la
macro pour en faire un executable, car cette macro va etre utiliser sur
plusieur poste.

Le but est que au lancement de l'executable, une boite de dialogue
s'affiche, demandant le chemin à parcourir jusqu'au fichier à traiter, et
que une fois ce fichier selectionné, ma macro s'execute normalement.

Est-ce que le fichier doit s'ouvrir pour que la macro s'execute? (sachant
qu'il faut que le fichier excel traiter s'affiche de toute façon après
traitement...)
Quel est la procédure à suivre pour cette Userform de selection ?

Me suis-je bien fais comprendre ??? ;-)

Merci d'avance @ tous, c'est un plaisir de progresser parmis vous ! ;-)

3 réponses

Avatar
Hervé
Salut Hervé,
Si tu veux faire un exécutable (.exe) en VBA, oublie ce n'est pas possible,
il te faut le faire avec VB, mais c'est peut être le cas, non ? sinon en
.vbs ?

Un exemple avec le chemin du classeur à ouvrir stocké dans la base de
registre à cette adresse :
HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Il te faut donner des noms plus explicites pour le dossier, la clé et la
valeur (la donnée de la valeur étant le chemin du classeur)

Sub SavoirQuelClasseur()
Dim Ouvrir As Boolean
Dim Chemin As String
Chemin = GetSetting("Dossier", "NomClé", "NomValeur", "")
If Chemin = "" Then
Ouvrir = Application.Dialogs(xlDialogOpen).Show
If Ouvrir = True Then
Chemin = ActiveWorkbook.FullName
SaveSetting "Dossier", "NomClé", "NomValeur", Chemin
Else
MsgBox "Vous devez indiquer le classeur à ouvrir !"
End If
Else
Workbooks.Open Chemin
End If
End Sub

Si tu veux autre chose reviens avec un peu plus d'explications.
Hervé.

"Hervé Frank-Dangel" a écrit dans le
message news:
Bonjour tt le monde !!!!

Voilà, mon prog est à présent terminé, il me reste plus qu'a compiler la
macro pour en faire un executable, car cette macro va etre utiliser sur
plusieur poste.

Le but est que au lancement de l'executable, une boite de dialogue
s'affiche, demandant le chemin à parcourir jusqu'au fichier à traiter, et
que une fois ce fichier selectionné, ma macro s'execute normalement.

Est-ce que le fichier doit s'ouvrir pour que la macro s'execute? (sachant
qu'il faut que le fichier excel traiter s'affiche de toute façon après
traitement...)
Quel est la procédure à suivre pour cette Userform de selection ?

Me suis-je bien fais comprendre ??? ;-)

Merci d'avance @ tous, c'est un plaisir de progresser parmis vous ! ;-)




Avatar
Hervé Frank-Dangel
Slt' Hervé !!!!!

Ben j'ai rien compris à ton code !!!! ;-) ;-)

Je te réexplique ce que je veux, car c'est assez simple, mais dur à
expliquer....

Ma macro à été créée sous VBA, la passer en VB n'est pas un souci.....

Ce que je veux, c'est en faire un executable, pour que ma macro soit
independante à part entière, qu'elle puisse etre installer sur n'importe
quel poste, sans VB, et quelle puisse traiter n'importe quel fichier....

Pour l'instant, c'est un CommandButton qui lance la macro dans le classeur
ou à été créée la Macro, et dans celui ci seulement....

Ce que je veux, c'est que au lancement de l' *.exe, une boite de dialogue
s'affiche me demandant de selectionner le fichier excel à traiter..., puis
une fois celui selectionner puis valider, que ma macro de depart s'execute
normalement, comme si je l'avait installer dans ce fichier Excel....

M'as tu compris ???

Ps: je n'ai pas compris l'histoire de la BDR, car l'exe va etre mis sur
plusieur poste, donc pour moi le chemin des fichiers à traiter ne sera
jamais fixe
Ce que je veux en fait, c'est créer une application à part entiere.... ;-)

je te joins le code de la macro au cas ou... :


API servant au calcul du temps (à supprimer après test avec ce qui va avec)
Private Declare Function GetTickCount Lib "Kernel32" () As Long
'en mettant :
'1 TextBox nommé TxtMaxi pour le nombre de lignes
'1 TextBox nommé TxtPas pour le pas
'1 Label nommé LblMaxi pour indiquer le champ Maxi
'1 Label nommé LblPas pour indiquer le champ Pas
'1 Label nommé LblAffiche pour le pourcentage
'dont les propriétés :
'"BackStyle" = 0 (transparent)
'"ForeColor" = &H00FFFFFF& (Blanc)
'"Left" comme LblProgress
'"Width" de façon à pouvoir afficher 100%
'"Caption" = "100%" puis après avoir réglé Width supprimer
'1 CommadButton nommé CmdOK pour lancer la proc
'1 CommadButton nommé CmdAnnuler
'et la barre de progression nommée LblProgress
'avec False à la propriété "Visible" car elle sera
'affichée en temps voulue

'Sub demarre()
'progbar1.Show
'End Sub

Private Sub CmdAnnuler_Click()
Unload Me
End Sub

Private Sub CmdOK_Click()
Dim ProgressLargeur
Dim I As Long, J As Long
Dim Debut As Long
Debut = GetTickCount()
With progbar1
.TxtMaxi.Visible = False
.TxtPas.Visible = False
.LblMaxi.Visible = False
.LblPas.Visible = False
.Label1.Visible = True
.Label2.Visible = True
.Label3.Visible = True
.Label4.Visible = False
.CmdAnnuler.Visible = False
.CmdOK.Visible = False
.LblProgress.Visible = True
End With
ProgressLargeur = progbar1.LblProgress.Width
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual ' si applicable

LblProgress.Width = 0
' si une valeur non numérique dans les textbox
On Error GoTo Fin
ParTableau TxtMaxi, TxtPas, ProgressLargeur
Fin:
If Err.Number <> 0 Then
MsgBox "Valeurs non numériques !"
End If
Unload progbar1
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic ' si applicable
MsgBox Format((GetTickCount() - Debut) / 1000, "0" & " Mise en forme 00
secondes")
End Sub
Sub ParTableau(Maxi As Long, _
Pas As Integer, _
ByVal ProgressLargeur As Integer)
Dim Tbl
Dim I As Long
Dim J As Integer
Dim K As Long
Dim Colonne As Long
With Worksheets("Feuil1")
'recherche la dernière colonne
Colonne = .Cells.Find("*", .[A1], xlFormulas, , _
xlByColumns, xlPrevious).Column
'rempli le tableau
Tbl = .Range(.Cells(1, 1), .Cells(Maxi, Colonne))
End With
'déplace les valeurs dans le tableau
For I = 1 To Maxi Step Pas
K = K + 1
For J = 1 To Colonne
Tbl(K, J) = Tbl(I, J)
Next J
LblProgress.Width = (I / Maxi) * ProgressLargeur
progbar1.Caption = CInt((I / Maxi) * 100) & "% effectués"
With LblAffiche
.Caption = CInt((I / Maxi) * 100) & "%"
If LblProgress.Width < .Width Then
.Left = LblProgress.Left
Else
.Left = LblProgress.Width / 2
End If
End With
DoEvents
Next I
'colle le résultat dans la feuille
With Worksheets("Feuil2")
.Range(.Cells(1, 1), .Cells(K, Colonne)) = Tbl
Worksheets("Feuil2").Select
Cells.Select
Selection.Columns.AutoFit
Selection.Rows.AutoFit
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("A1").Select
End With
Erase Tbl
End Sub


Merci d'avance pour ton aide précieuse !!!!







"Hervé" a écrit dans le message de
news:Oe$
Salut Hervé,
Si tu veux faire un exécutable (.exe) en VBA, oublie ce n'est pas
possible,

il te faut le faire avec VB, mais c'est peut être le cas, non ? sinon en
.vbs ?

Un exemple avec le chemin du classeur à ouvrir stocké dans la base de
registre à cette adresse :
HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Il te faut donner des noms plus explicites pour le dossier, la clé et la
valeur (la donnée de la valeur étant le chemin du classeur)

Sub SavoirQuelClasseur()
Dim Ouvrir As Boolean
Dim Chemin As String
Chemin = GetSetting("Dossier", "NomClé", "NomValeur", "")
If Chemin = "" Then
Ouvrir = Application.Dialogs(xlDialogOpen).Show
If Ouvrir = True Then
Chemin = ActiveWorkbook.FullName
SaveSetting "Dossier", "NomClé", "NomValeur", Chemin
Else
MsgBox "Vous devez indiquer le classeur à ouvrir !"
End If
Else
Workbooks.Open Chemin
End If
End Sub

Si tu veux autre chose reviens avec un peu plus d'explications.
Hervé.

"Hervé Frank-Dangel" a écrit dans le
message news:
Bonjour tt le monde !!!!

Voilà, mon prog est à présent terminé, il me reste plus qu'a compiler la
macro pour en faire un executable, car cette macro va etre utiliser sur
plusieur poste.

Le but est que au lancement de l'executable, une boite de dialogue
s'affiche, demandant le chemin à parcourir jusqu'au fichier à traiter,
et


que une fois ce fichier selectionné, ma macro s'execute normalement.

Est-ce que le fichier doit s'ouvrir pour que la macro s'execute?
(sachant


qu'il faut que le fichier excel traiter s'affiche de toute façon après
traitement...)
Quel est la procédure à suivre pour cette Userform de selection ?

Me suis-je bien fais comprendre ??? ;-)

Merci d'avance @ tous, c'est un plaisir de progresser parmis vous !
;-)










Avatar
Frédéric Sigonneau
Bonsoir,

D'après ce que tu décris, une macro complémentaire devrait convenir. Ce n'est
pas un exécutable, mais c'est un fichier distribuable qu'il suffit d'installer
par OutilsMacros complémentaires pour que ses procédures soient utilisables
dans n'importe quel classeur.

Pour faciliter l'utilisation de ta macro, tu pourrais ajouter la création d'un
bouton de barre d'outils au lancement de la macro complémentaire, bouton auquel
serait affecté la procédure adéquate (la procédure 'demarre' apparemment).

Ensuite, tu enregistres le classeur qui contient ton code, le code de création
du bouton, ton userform en macro complémentaire (par FichierEnregistrer sous et
tu choisis Macros complémentaire (*.xla) comme type de fichier).

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Slt' Hervé !!!!!

Ben j'ai rien compris à ton code !!!! ;-) ;-)

Je te réexplique ce que je veux, car c'est assez simple, mais dur à
expliquer....

Ma macro à été créée sous VBA, la passer en VB n'est pas un souci.....

Ce que je veux, c'est en faire un executable, pour que ma macro soit
independante à part entière, qu'elle puisse etre installer sur n'importe
quel poste, sans VB, et quelle puisse traiter n'importe quel fichier....

Pour l'instant, c'est un CommandButton qui lance la macro dans le classeur
ou à été créée la Macro, et dans celui ci seulement....

Ce que je veux, c'est que au lancement de l' *.exe, une boite de dialogue
s'affiche me demandant de selectionner le fichier excel à traiter..., puis
une fois celui selectionner puis valider, que ma macro de depart s'execute
normalement, comme si je l'avait installer dans ce fichier Excel....

M'as tu compris ???

Ps: je n'ai pas compris l'histoire de la BDR, car l'exe va etre mis sur
plusieur poste, donc pour moi le chemin des fichiers à traiter ne sera
jamais fixe
Ce que je veux en fait, c'est créer une application à part entiere.... ;-)

je te joins le code de la macro au cas ou... :


API servant au calcul du temps (à supprimer après test avec ce qui va avec)
Private Declare Function GetTickCount Lib "Kernel32" () As Long
'en mettant :
'1 TextBox nommé TxtMaxi pour le nombre de lignes
'1 TextBox nommé TxtPas pour le pas
'1 Label nommé LblMaxi pour indiquer le champ Maxi
'1 Label nommé LblPas pour indiquer le champ Pas
'1 Label nommé LblAffiche pour le pourcentage
'dont les propriétés :
'"BackStyle" = 0 (transparent)
'"ForeColor" = &H00FFFFFF& (Blanc)
'"Left" comme LblProgress
'"Width" de façon à pouvoir afficher 100%
'"Caption" = "100%" puis après avoir réglé Width supprimer
'1 CommadButton nommé CmdOK pour lancer la proc
'1 CommadButton nommé CmdAnnuler
'et la barre de progression nommée LblProgress
'avec False à la propriété "Visible" car elle sera
'affichée en temps voulue

'Sub demarre()
'progbar1.Show
'End Sub

Private Sub CmdAnnuler_Click()
Unload Me
End Sub

Private Sub CmdOK_Click()
Dim ProgressLargeur
Dim I As Long, J As Long
Dim Debut As Long
Debut = GetTickCount()
With progbar1
.TxtMaxi.Visible = False
.TxtPas.Visible = False
.LblMaxi.Visible = False
.LblPas.Visible = False
.Label1.Visible = True
.Label2.Visible = True
.Label3.Visible = True
.Label4.Visible = False
.CmdAnnuler.Visible = False
.CmdOK.Visible = False
.LblProgress.Visible = True
End With
ProgressLargeur = progbar1.LblProgress.Width
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual ' si applicable

LblProgress.Width = 0
' si une valeur non numérique dans les textbox
On Error GoTo Fin
ParTableau TxtMaxi, TxtPas, ProgressLargeur
Fin:
If Err.Number <> 0 Then
MsgBox "Valeurs non numériques !"
End If
Unload progbar1
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic ' si applicable
MsgBox Format((GetTickCount() - Debut) / 1000, "0" & " Mise en forme 00
secondes")
End Sub
Sub ParTableau(Maxi As Long, _
Pas As Integer, _
ByVal ProgressLargeur As Integer)
Dim Tbl
Dim I As Long
Dim J As Integer
Dim K As Long
Dim Colonne As Long
With Worksheets("Feuil1")
'recherche la dernière colonne
Colonne = .Cells.Find("*", .[A1], xlFormulas, , _
xlByColumns, xlPrevious).Column
'rempli le tableau
Tbl = .Range(.Cells(1, 1), .Cells(Maxi, Colonne))
End With
'déplace les valeurs dans le tableau
For I = 1 To Maxi Step Pas
K = K + 1
For J = 1 To Colonne
Tbl(K, J) = Tbl(I, J)
Next J
LblProgress.Width = (I / Maxi) * ProgressLargeur
progbar1.Caption = CInt((I / Maxi) * 100) & "% effectués"
With LblAffiche
.Caption = CInt((I / Maxi) * 100) & "%"
If LblProgress.Width < .Width Then
.Left = LblProgress.Left
Else
.Left = LblProgress.Width / 2
End If
End With
DoEvents
Next I
'colle le résultat dans la feuille
With Worksheets("Feuil2")
.Range(.Cells(1, 1), .Cells(K, Colonne)) = Tbl
Worksheets("Feuil2").Select
Cells.Select
Selection.Columns.AutoFit
Selection.Rows.AutoFit
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("A1").Select
End With
Erase Tbl
End Sub


Merci d'avance pour ton aide précieuse !!!!







"Hervé" a écrit dans le message de
news:Oe$

Salut Hervé,
Si tu veux faire un exécutable (.exe) en VBA, oublie ce n'est pas


possible,

il te faut le faire avec VB, mais c'est peut être le cas, non ? sinon en
.vbs ?

Un exemple avec le chemin du classeur à ouvrir stocké dans la base de
registre à cette adresse :
HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Il te faut donner des noms plus explicites pour le dossier, la clé et la
valeur (la donnée de la valeur étant le chemin du classeur)

Sub SavoirQuelClasseur()
Dim Ouvrir As Boolean
Dim Chemin As String
Chemin = GetSetting("Dossier", "NomClé", "NomValeur", "")
If Chemin = "" Then
Ouvrir = Application.Dialogs(xlDialogOpen).Show
If Ouvrir = True Then
Chemin = ActiveWorkbook.FullName
SaveSetting "Dossier", "NomClé", "NomValeur", Chemin
Else
MsgBox "Vous devez indiquer le classeur à ouvrir !"
End If
Else
Workbooks.Open Chemin
End If
End Sub

Si tu veux autre chose reviens avec un peu plus d'explications.
Hervé.

"Hervé Frank-Dangel" a écrit dans le
message news:

Bonjour tt le monde !!!!

Voilà, mon prog est à présent terminé, il me reste plus qu'a compiler la
macro pour en faire un executable, car cette macro va etre utiliser sur
plusieur poste.

Le but est que au lancement de l'executable, une boite de dialogue
s'affiche, demandant le chemin à parcourir jusqu'au fichier à traiter,



et

que une fois ce fichier selectionné, ma macro s'execute normalement.

Est-ce que le fichier doit s'ouvrir pour que la macro s'execute?



(sachant

qu'il faut que le fichier excel traiter s'affiche de toute façon après
traitement...)
Quel est la procédure à suivre pour cette Userform de selection ?

Me suis-je bien fais comprendre ??? ;-)

Merci d'avance @ tous, c'est un plaisir de progresser parmis vous !



;-)