VBA Excel Boite de dialogue

mimi -  
 jul -
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

  1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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
  2. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. Eric-40
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mimi
     
    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
  7. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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
    1. mimi
       
      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
  8. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    Remplace : If Target = "EFFACER" Then
    par : If Target.Address = "$L$15" Then
    ou bien : If Target.Address = Range("EFFACER").Address Then
    0
  9. mimi
     
    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
  10. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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
  11. mimi
     
    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
  12. mimi
     
    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
  13. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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
    1. mimi
       
      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
  14. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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
      1. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        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
    2. jul
       
      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