VBA Excel Boite de dialogue

Fermé
mimi - 20 août 2006 à 20:28
 jul - 30 nov. 2011 à 21:56
Bonjour à tous
1) comment faire pour interrompre la macro pour saisir des infos, après la boite de dialogue ci-dessous et comment reprendre la macro?
MsgBox "Placez vos informations dans la feuille", vbOKOnly + vbInformation, "
Actuellement, qund je clique sur OK, la macro reprend son exécution.

2) La boite de dialogue apparait au milieu de l'écran et cache le tableau de saisie. comment la positionner à droite de l'écran ?

Merci d'avance pour votre aide précieuse à un débutant

cordialement

Mimi

13 réponses

Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
21 août 2006 à 09:33
Bonjour mimi,

Pour le moment je sèche...
Mais si le besoin est de s'assurer qu'une saisie a bien été faite correctement, je peux proposer quelque chose qui répondra peut-être (???) à ton problème.
On peut facilement interdire la fermeture d'un classeur.
Donc quand quelqu'un fait une saisie, on peut, à la fermeture, déclencher une série de contrôles, et si la saisie comporte des erreurs, envoyer un message et interdire la fermeture.
Voisi un code tout simple, à adapter, à mettre dans le code de ThisWorkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If (la saisie n'est pas correcte) Then
    MsgBox "Vérifiez votre saisie ...blablabla... svp."
    Cancel = True   ' cancel = True : la procédure de fermeture aborte
    Exit Sub
  End If
  'Et sinon si tout baigne on continue...
  MsgBox "Suite... ou rien de plus..."
End Sub
Peut-être que ça peut convenir...
4
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
24 août 2006 à 23:29
Je ne pense pas qu'on puisse positionner une Msgbox, qui s'affiche au centre de l'écran (mais on peut la déplacer).
Quant à InputBox, je ne sais pas si c'est la Méthode ou la Fonction que tu utilises. La syntaxe est différente :

- Méthode InputBox :
Toto = Application.InputBox(Prompt:="X", Title:="Y", Left:=50, Top:=50)
Left et Top s'expriment en points, respectivement par rapport aux bords gauche et supérieur de l'écran.

- Fonction InputBox :
Toto = InputBox(Prompt:="X", Title:="Y", xpos:=3000, ypos:=3000)
xpos et ypos s'expriment en twips, respectivement par rapport aux bords gauche et supérieur de l'écran (1 twip = 1/1440 de pouce !!!!).
1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
26 août 2006 à 23:51
Re,

Thank you for the piece of cake !!!!!!!

You're welcome ;)

D'ailleurs, perso, selon le besoin, je me fais un p'tit form.

Je fais pareil.

Bonne soirée.

lami20j
1
Quand une boite MsgBox est affichée (dans une boucle par exemple) et qu'on souhaite interrompre l'exécution afin de sortir de la boucle,
pressez simultanément <Ctrl> et <Pause>
Cela redonnera la main au débugger
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Armojax

Merci pour ta réponse mais j'ai un souci : errreur de compilation end sub attendu
ta macro que j'ai adaptée (mal !)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
saisie = InputBox("Veuillez entrer votre saisie : exemple c4 ")
If saisie <> 4 Then
MsgBox "Vérifiez votre saisie ...blablabla... svp."
Cancel = True ' cancel = True : la procédure de fermeture aborte
Exit Sub
End If
'Et sinon si tout baigne on continue...
MsgBox "Suite... ou rien de plus..."
End Sub
qu'est ce qui cloche ?

En fait, je voulait que la macro s'exécute en explicant deux ou trois trucs à l'utilisateur par des msgbox, puis rende la main à l'utilisateur pour qu'il fasse sa saisie puis qu'il relance la macro quand la saisie est terminée. J'ai essayé avec End et Stop mais ces commandes arrêtent la macro

Pour mettre la boite de dialogue à droite de l'écran, on m'a parlé de userform !? cela permet-il d'ouvrir la boite à l'endroit que l'on veut ?

Merci beaucoup pour ton aide

Mimi
0
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
22 août 2006 à 10:53
Bonjour mimi,

...j'ai un souci : errreur de compilation end sub attendu
...peut-être que tu l'avais oublié en fin de macro, non ?

En tout cas, je vois un peu mieux ce que tu veux faire, et ma solution ne peut pas convenir.

Autre piste : si les "deux ou trois trucs" que tu veux expliquer à l'utilisateur concernent la saisie, regarde peut-être du côté de la validation des données :
Faire : Données/Validation...
Avec ça tu peux, sur une cellule donnée, contrôles la validité des données, envoyer un message si ce n'est pas correct, afficher un conseil de saisie, etc.

Je n'ai pas d'autre idée.
0
Merci Armojax pour ton idée Données/Validation.

Je vais l'essayer.
Depuis ton premier message, j'ai découvert que ta macro proposée était une macro évènementielle.
Quand je la tape, elle ne se met pas dans un module. Pour la voir, il faut que j'appelle VBA et la macro apparait tout en haut
j'ai voulu en créer une simple mais elle ne se déclenche pas : j'ai dû oublier quelque chose.
Je veux que les 2 cellules s'affacent lorsque je double clique sur la cellule Target
J'ai nommé un champ appelé "effacer" par insertion/nom/definir en L15 mais quand je clique sur L15, il ne sepasse rien

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean)
If Target = "EFFACER" Then
Cells(22, 1) = ""
Cells(22, 12) = ""
End If
End Sub

Si tu peux me dire pourquoi, cela résoudrait tous mes soucis

Mimi
0
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
23 août 2006 à 18:11
Remplace : If Target = "EFFACER" Then
par : If Target.Address = "$L$15" Then
ou bien : If Target.Address = Range("EFFACER").Address Then
0
Merci Armojax
Grâce à tes réponses j'ai creusé et j'ai réussi à faire des macros évènementielles (je ne les mettais pas dans la feuille voulue dans l'explorateur de projet mais en faisant "nouvelle macro")

Elle marche maintenant :
J'ai nommé le champ EFFACER en $L$15 et l'instruction "in intersect" fait que la macro ne se déclenche que sur la cellule L15
Je n'ai même plus besoin du test "if Target= "EFFACER"

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Range("EFFACER"), Target) Is Nothing Then Exit Sub
Cells(22, 1) = ""
Cells(22, 12) = ""

Par contre, je n'ai pas réussi à créer pour la même feuille, une deuxième macro d'évènement Worksheet_BeforeDoubleClick

Du coup, j'ai créé ma 2ème macro sous :
Worksheet_BeforeRightClick

est-ce possible de créer pour une même feuille 2 macros d'évènement identique faire ??

Merci d'avance de ta réponse

Mimi
0
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
23 août 2006 à 22:42
Une petite suggestion... Teste en A1, A2, A3...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Select Case Target.Address
    Case "$A$1": MsgBox "Cas 1"
    Case "$A$2": MsgBox "Cas 2"
    Case "$A$3": MsgBox "Cas 3"
  End Select
End Sub
0
GENIALE TA SUGGESTION !

J'ai remplacé msg par Application.Run "macro 1
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Select Case Target.Address
Case "$A$1": Application.Run "macro 1"
Case "$A$2": Application.Run "macro 2"
Case "$A$3": Application.Run "macro 3"
End Select
End Sub

Et hop, tout ce lance d'un simple double click en A1 ou A2 ou A3

Il ne me reste plus cas résoudre l'affichage de la boite de dialogue qui est pleine page et que voudrait voir apparaitre en bas de l'écran.

Existe-t-il des commandes permettant de positionner la boite de dialogue (msgbox ou inputbox) ?

Merci beaucoup Armojax pour cette dernière question

Mimi
0
Merci Armojax pour ton astuce

suite à ta réponse, j'ai écris ma commande :
saisie = InputBox("Entrez votre saisie ", " A VOUS DE SAISIR", , 5000, 8000)

Et j'ai maintenant la boite tout en bas de l'écran ou je la voulait !

Je pense que j'utilise la fonction et non la méthode (je ne suis pas assez calé pour faire la différence)

Mais encore un souci !
Je voudrait tester de manière simple 8 cellules (les 8 cellules qui entourent la cellule de saisie)
chacune de ces 8 cellules doit être = "" ou = "valeur1" ou = "valeur2"

Est-il possible d'écrire simplement ces tests en évitant d'écrire 3 "if then" X 8 = 21 "if then" ?

Je ne suis pas parvenu à mettre en facteur lesOr ou les And
exemple :
if cellule1 Or("","valeur1","valeur2") And cellule2 = Or("","valeur1","valeur2") etc.

Merci beaucoup de bien vouloir me renseigner s'il existe une possibilité

Mimi
0
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
26 août 2006 à 13:56
Hello mimi,

Tu peux essayer ça. Ma cellule est en D11, adapte chez toi...
Sub VérifCells()
  Dim Plage   As Range
  Dim Cellule As Range
  Set Plage = Range("D11").Offset(-1, -1).Resize(3, 3)
  For Each Cellule In Plage
    Select Case Cellule.Value
      Case "", "valeur1", "valeur2", Range("D11").Value  ' cas où on ne fait rien
      Case Else: MsgBox "Valeur erronée en " & Cellule.Address
    End Select
  Next
End Sub
Quelques explications :
- Range("D11").Offset(-1, -1) : désigne la cellule une ligne et une colonne au-dessus de D11.
- Resize : définit une plage de 3 lignes et 3 colonnes à partir de D11 qui est dans l'angle supérieur gauche de cette plage
- Ensuite un Select Case classique.
J'ai inclus dans la liste de valeurs celle de la cellule D11... ce qui n'est pas forcément judicieux. Sinon, il faut tester le cas de cette cellule...

Une façon parmi beaucoup d'autres...
0
HELLO ARMOJAX MON SAUVEUR :o)

Super ton code : cela résoud mon problème. Encore merci

Par contre je me suis réjouit trop vite pour le positionnement de la boite de dialogue.

Les wips marchent très bien avec :
saisie = InputBox("Entrez votre saisie", " A VOUS DE saisir", , 5000, 7000)

Par contre je n'arrive pas à faire la même chose avec msgbox qui s'ouvre plein écran et que je voudrais en 5000 et 7000)

J'ai écris :
reponse1 = MsgBox("VOULEZ VOUS vérifier votre saisie", vbYesNo, 5000, 7000)
Mais cela ne marche pas : message d'erreur Argument ou Appel de la procédure incorrect

Comment dois-je écrire la commande msgbox STP ?

Merci d'avance de ta réponse

Mimi
0
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
26 août 2006 à 21:41
La plupart des réponses se trouvent dans l'aide de VBA. Le tout est de savoir où les chercher.
Tu disposes de :
* l'aide accessible par le ? dans la barre de menu de VBA (Fichier ... Outils Compléments Fenêtre ?)
* et surtout l'Explorateur d'Objets qui contient une foule de renseignements.
Pour y accéder :
- F2, ou bien...
- une petite icône en forme de boite d'où sortent des objets, ou bien...
- Affichage/Explorateur d'objets.

Donc, appelle l'Explorateur d'objets.
Tu vois deux petites listes déroulantes superposées. L'une contient sans doute <Toutes bibliothèques>.
Dans celle d'en-dessous, tape msgbox et fais Entrée (ou clique sur les jumelles). Tu obtiens la liste de tous les endroits ou la chaîne MsgBox apparaît dans les objets de toutes les bibliothèques. C'est fou, non ?
Trouve la ligne : VBA Interaction MsgBox, et fais un clic droit sur Msgbox. Et dans le menu contextuel choisis Aide. Tu vas trouver la syntaxe de MsgBox, les conditions d'utilisation, etc.
Pour chaque objet qui pose problème, commence à fouiller de ce côté. Manipule l'Explorateur, qui contient encore bien d'autres informations précieuses que tu découvriras.

En général on s'en tire avec :
- l'enregistreur de macro, pour vérifier des détails,
- l'aide de VBA,
- l'Explorateur d'objets,
- le déroulement au pas à pas...
... et ce Forum, où on apprend des foules de choses, rien qu'en suivant les questions et réponses sur les sujets divers.

Et en conclusion, si tu trouves dans la doc qu'on peut placer où on veut une MsgBox, tu me fais signe...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
26 août 2006 à 22:44
Salut Armojax,

si tu trouves dans la doc qu'on peut placer où on veut une MsgBox, tu me fais signe...

Je ne pense pas que mimi va trouver. En revanche regarde ici
http://www.h3.dion.ne.jp/~sakatsu/ktMsgBox_Series_English.htm

lami20j
0
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
26 août 2006 à 23:15
Hello lami20j,

Thank you for the piece of cake !!!!!!!

D'ailleurs, perso, selon le besoin, je me fais un p'tit form.

P.S. Ça confirme : on apprend toujours sur ce forum... :-)
0
salut tout le monde

aidez moi s'il vous plait

en voulant saisir mon code VBA à chaque fois que je touche mon clavier , je suis redirigé vers l'explorateur objet , ca m'empêche énormément de travailler
qu'est ce que je peux bien faire faire pour arrêter tout ca
merci.
0