OVH Cloud OVH Cloud

Utiliser une boite de dialogue standard en VBA

15 réponses
Avatar
dOUdOU
Bonjour à tous,

J'utilise Excel 2003 et je commence à apprendre les macros, comment puis-je
en VBA, appeler une boite de dialogue standard existante dans l'application
dans un code VBA.

Exemple : dans ma macro je voudrais utiliser "la boite
Outils\Protection\Protéger la feuille.

Merci d'avance,
dOUdOU

5 réponses

1 2
Avatar
dOUdOU
Bonsoir lSteph,

Et merci pour le code ci-dessous, je débute et il me parait assez compliqué
pour moi, je crois que je le décortiquerais le Week-end prochain.

dOUdOU


Bonsoir,
un userform irait mieux qu'un inputbox mais bon...

Sub protAll()
Dim myPass As String, sh As Worksheet, tst As Boolean
Do
myPass = InputBox("Veuillez saisir un mot de passe")
If Len(myPass) = 0 Then _
MsgBox "Annulation ou saisie vide": Exit Sub
tst = Len(myPass) < 4
If tst Then MsgBox "minimum 4 chr"
Loop While tst
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass
Next
End Sub

'lSteph
(ce qui est un peu déconcertant lorsqu'on lance deux fois la macro
mais qu'on met un mot de passe différent) Ah ces protections!

Cela ne m'avance pas beaucoup!
De toute façon il y a un bugg dans les 2 codes publiés dans InputBox()
lorsque je choisis le bouton "Annuler" cela renvoi la valeur "" et la boucle
s'exécute quand même en protégeant toutes les feuilles mais sans MDP, idem
pour le code que déprotèqe.

Cdlt
dOUdOU


vont pas comprendre ces anglophones si tu leur parles butalement dans la
langue de Cambronne, doudou
jps

"dOUdOU" a écrit dans le message de news:

MsgBox "The password different, recommencer."











Avatar
LSteph
Bonjour,

Et merci pour le code ci-dessous, je débute


Commentaire:

Sub protAll()
'on définit les variables internes à la sub avec dim
Dim myPass As String, sh As Worksheet, tst As Boolean
'mypass stockera le mdp c'est une chaine donc as string
'l'objet feuille de calcul sera utilisé donc sh as Worksheet
'enfin un test booléen (vrai ou faux) sera effectué.. as boolean

Do 'début de boucle
'on invite à saisir dans la variable
myPass = InputBox("Veuillez saisir un mot de passe")

'au cas où la chaine soit vide
If Len(myPass) = 0 Then _
'c'est qu'on a, rien saisi ou annulé
'on l'indique par un message et sort directement de la sub
MsgBox "Annulation ou saisie vide": Exit Sub

'on doit tester la présence d' une longueur
'minimum de 4 caractères dans la variable
tst = Len(myPass) < 4
If tst Then MsgBox "minimum 4 chr"
'tant que tst est vrai, c'est inférieur , donc on boucle
Loop While tst
'fin de boucle do ..loop
'si on arrive jusqu'ici c'est qu'on a bien saisi un mdp

'on lance donc le for each ...next pour protéger les feuilles
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass 'ici tu peux ajouter des options
'voir aide de protect
Next
'fin
End Sub

Avatar
dOUdOU
Bonsoir LSteph,

Merci beaucoup pour les explications, j'avais trouvé ceci dans la semaine :
Sub protAll()
Dim myPass As String, sh As Worksheet, tst As Boolean

Do
myPass = InputBox("Veuillez saisir un mot de passe")
If Len(myPass) = 0 Then MsgBox "Annulation ou saisie vide": Exit Sub
'Fonction Len() compte nbre de caractère
tst = Len(myPass) < 4 ' Attribue la valeur "Vrai" si
nb carctère est inférieur à 4
If tst Then MsgBox "minimum 4 chr" 'si tst = vrai alors MsgBox
Loop While tst 'si tst = Vrai revient à
l'instruction "Do"
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass
Next
End Sub

Mais pourqoui déclarer objet Worksheet en variable, car dans un exemple
d'aide VBA ci-dessous on ne le fait pas :
Sub Affiche_feuille()

'Cet exemple montre comment afficher toutes les feuilles du classeur actif.

For Each sh In Sheets
sh.Visible = True
Next sh

End Sub


Bonjour,

Et merci pour le code ci-dessous, je débute


Commentaire:

Sub protAll()
'on définit les variables internes à la sub avec dim
Dim myPass As String, sh As Worksheet, tst As Boolean
'mypass stockera le mdp c'est une chaine donc as string
'l'objet feuille de calcul sera utilisé donc sh as Worksheet
'enfin un test booléen (vrai ou faux) sera effectué.. as boolean

Do 'début de boucle
'on invite à saisir dans la variable
myPass = InputBox("Veuillez saisir un mot de passe")

'au cas où la chaine soit vide
If Len(myPass) = 0 Then _
'c'est qu'on a, rien saisi ou annulé
'on l'indique par un message et sort directement de la sub
MsgBox "Annulation ou saisie vide": Exit Sub

'on doit tester la présence d' une longueur
'minimum de 4 caractères dans la variable
tst = Len(myPass) < 4
If tst Then MsgBox "minimum 4 chr"
'tant que tst est vrai, c'est inférieur , donc on boucle
Loop While tst
'fin de boucle do ..loop
'si on arrive jusqu'ici c'est qu'on a bien saisi un mdp

'on lance donc le for each ...next pour protéger les feuilles
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass 'ici tu peux ajouter des options
'voir aide de protect
Next
'fin
End Sub




Avatar
LSteph
Bonsoir dOUdOU,

Quand on propose un code on ne sait pas si la personne à l'habitude ou
non de déclarer et comme qui peut le + peut le - , si mon code passe
avec Option explicit il passera aussi sans celle-ci.

L'aide fournit des exemples et shemas standards

Si tu ne mets pas l'Option explicit en haut de ton module, tu n'es pas
obligé de déclarer, mais tu perds certains avantages:

-cela améliore l'execution du code,
car rend plus facile l'interpretation des variables par VB,
- Pour les mêmes raisons le fait de définir et typer les variables
ou de respecter certaines conventions (exemple Call Mamacro) cela
rend plus lisible le code pour quand tu t'y recolles ou pour quelqu'un
d'autre qui ne sait pas ce que tu as utilisé.
- accessoirement permet une gestion optimale du poids des variables:
Lorsqu'on ne définiit ni ne type, toute variable devient un Variant (par
défaut) C'est le type le plus lourd.
Lorsque ton code doit tourner et qu'il est important, il est bon de
connaître cet ordre décroissant de poids en mémoire.Quoiqu'aujourdhui,
la performance des micros permette de passer outre, cela peut parfois
être utile et est bon à connaître multiples raisons.
Tu peux voir tout cela dans l'Aide, entre autres pourquoi prendre le
type Long pour les lignes... (jusqu'à excel2003 inclus)

4-Mais surtout cela oblige à réfléchir à ce qu'on utilise dans le code
et à force rend tout cela beaucoup plus facile.

Cordialement.

--
lSteph


Bonsoir LSteph,

Merci beaucoup pour les explications, j'avais trouvé ceci dans la semaine :
Sub protAll()
Dim myPass As String, sh As Worksheet, tst As Boolean

Do
myPass = InputBox("Veuillez saisir un mot de passe")
If Len(myPass) = 0 Then MsgBox "Annulation ou saisie vide": Exit Sub
'Fonction Len() compte nbre de caractère
tst = Len(myPass) < 4 ' Attribue la valeur "Vrai" si
nb carctère est inférieur à 4
If tst Then MsgBox "minimum 4 chr" 'si tst = vrai alors MsgBox
Loop While tst 'si tst = Vrai revient à
l'instruction "Do"
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass
Next
End Sub

Mais pourqoui déclarer objet Worksheet en variable, car dans un exemple
d'aide VBA ci-dessous on ne le fait pas :
Sub Affiche_feuille()

'Cet exemple montre comment afficher toutes les feuilles du classeur actif.

For Each sh In Sheets
sh.Visible = True
Next sh

End Sub


Bonjour,

Et merci pour le code ci-dessous, je débute


Commentaire:

Sub protAll()
'on définit les variables internes à la sub avec dim
Dim myPass As String, sh As Worksheet, tst As Boolean
'mypass stockera le mdp c'est une chaine donc as string
'l'objet feuille de calcul sera utilisé donc sh as Worksheet
'enfin un test booléen (vrai ou faux) sera effectué.. as boolean

Do 'début de boucle
'on invite à saisir dans la variable
myPass = InputBox("Veuillez saisir un mot de passe")

'au cas où la chaine soit vide
If Len(myPass) = 0 Then _
'c'est qu'on a, rien saisi ou annulé
'on l'indique par un message et sort directement de la sub
MsgBox "Annulation ou saisie vide": Exit Sub

'on doit tester la présence d' une longueur
'minimum de 4 caractères dans la variable
tst = Len(myPass) < 4
If tst Then MsgBox "minimum 4 chr"
'tant que tst est vrai, c'est inférieur , donc on boucle
Loop While tst
'fin de boucle do ..loop
'si on arrive jusqu'ici c'est qu'on a bien saisi un mdp

'on lance donc le for each ...next pour protéger les feuilles
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass 'ici tu peux ajouter des options
'voir aide de protect
Next
'fin
End Sub






Avatar
dOUdOU
Bonsoir LSteph,

Merci, j'essairai de travailler en déclarant mes variables, ce que j'avais
fait sur des macros Excel 4, ou le code était en français, il y a quelques
années.....

Cordialement


Bonsoir dOUdOU,

Quand on propose un code on ne sait pas si la personne à l'habitude ou
non de déclarer et comme qui peut le + peut le - , si mon code passe
avec Option explicit il passera aussi sans celle-ci.

L'aide fournit des exemples et shemas standards

Si tu ne mets pas l'Option explicit en haut de ton module, tu n'es pas
obligé de déclarer, mais tu perds certains avantages:

-cela améliore l'execution du code,
car rend plus facile l'interpretation des variables par VB,
- Pour les mêmes raisons le fait de définir et typer les variables
ou de respecter certaines conventions (exemple Call Mamacro) cela
rend plus lisible le code pour quand tu t'y recolles ou pour quelqu'un
d'autre qui ne sait pas ce que tu as utilisé.
- accessoirement permet une gestion optimale du poids des variables:
Lorsqu'on ne définiit ni ne type, toute variable devient un Variant (par
défaut) C'est le type le plus lourd.
Lorsque ton code doit tourner et qu'il est important, il est bon de
connaître cet ordre décroissant de poids en mémoire.Quoiqu'aujourdhui,
la performance des micros permette de passer outre, cela peut parfois
être utile et est bon à connaître multiples raisons.
Tu peux voir tout cela dans l'Aide, entre autres pourquoi prendre le
type Long pour les lignes... (jusqu'à excel2003 inclus)

4-Mais surtout cela oblige à réfléchir à ce qu'on utilise dans le code
et à force rend tout cela beaucoup plus facile.

Cordialement.

--
lSteph


Bonsoir LSteph,

Merci beaucoup pour les explications, j'avais trouvé ceci dans la semaine :
Sub protAll()
Dim myPass As String, sh As Worksheet, tst As Boolean

Do
myPass = InputBox("Veuillez saisir un mot de passe")
If Len(myPass) = 0 Then MsgBox "Annulation ou saisie vide": Exit Sub
'Fonction Len() compte nbre de caractère
tst = Len(myPass) < 4 ' Attribue la valeur "Vrai" si
nb carctère est inférieur à 4
If tst Then MsgBox "minimum 4 chr" 'si tst = vrai alors MsgBox
Loop While tst 'si tst = Vrai revient à
l'instruction "Do"
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass
Next
End Sub

Mais pourqoui déclarer objet Worksheet en variable, car dans un exemple
d'aide VBA ci-dessous on ne le fait pas :
Sub Affiche_feuille()

'Cet exemple montre comment afficher toutes les feuilles du classeur actif.

For Each sh In Sheets
sh.Visible = True
Next sh

End Sub


Bonjour,

Et merci pour le code ci-dessous, je débute


Commentaire:

Sub protAll()
'on définit les variables internes à la sub avec dim
Dim myPass As String, sh As Worksheet, tst As Boolean
'mypass stockera le mdp c'est une chaine donc as string
'l'objet feuille de calcul sera utilisé donc sh as Worksheet
'enfin un test booléen (vrai ou faux) sera effectué.. as boolean

Do 'début de boucle
'on invite à saisir dans la variable
myPass = InputBox("Veuillez saisir un mot de passe")

'au cas où la chaine soit vide
If Len(myPass) = 0 Then _
'c'est qu'on a, rien saisi ou annulé
'on l'indique par un message et sort directement de la sub
MsgBox "Annulation ou saisie vide": Exit Sub

'on doit tester la présence d' une longueur
'minimum de 4 caractères dans la variable
tst = Len(myPass) < 4
If tst Then MsgBox "minimum 4 chr"
'tant que tst est vrai, c'est inférieur , donc on boucle
Loop While tst
'fin de boucle do ..loop
'si on arrive jusqu'ici c'est qu'on a bien saisi un mdp

'on lance donc le for each ...next pour protéger les feuilles
For Each sh In ActiveWorkbook.Sheets
sh.Protect myPass 'ici tu peux ajouter des options
'voir aide de protect
Next
'fin
End Sub









1 2