VBA

Résolu
Bonjour,

Je cherche à créer une macro qui permette sur un pannel de case de contrôler que toutes sont bien remplies.

Je veux donc, que si l'une (ou plusieurs) des cases est vide, un msgbox s'affiche et mette fin à la macro.
Si toutes les cases sont pleines, effectuer une autre action (dont la macro est déjà prête)

Pouvez vous m'aider?
--
Thor tue

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Ou se trouve le "panel" (feuille Excel, UserForm)?

    Quel type de controle est-ce (textbox, combobox, checkbox) ?

    ;o)
    1. Alors c'est tout simple, l'ensemble des "ok" s'affichent dans différentes cases sur une feuille excel (disons par exemple, A1, A2 et A3)
      1. Test ça :

        Sub testCellule()
        Dim plage As Range
        Dim cl
        
           Set plage = Worksheets(1).Range("A1:A3")
        
           For Each cl In plage
              If cl.Value = "" Then
                 MsgBox "Toutes les cases ne sont pas renseignées !!!"
                 Exit Sub
              End If
           Next cl
        
        End Sub
        

        ;o)
        1. voilà ce sur quoi j'étais parti, ca marche mais je n'arrive pas à ne pas réaliser l'action lorsque la msgbox s'affiche

          Sub Valider()

          Sheets("accueil").Select
          If Range("d16").Value <> "OK" Then If Range("d18").Value <> "OK" Then If Range("d20").Value <> "OK" Then If Range("d22").Value <> "OK" Then If Range("H16").Value <> "OK" Then If Range("H18").Value <> "OK" Then If Range("H20").Value <> "OK" Then If Range("H22").Value <> "OK" Then MsgBox ("Veuillez répondre aux questions de l'ensemble des questionnaires") Else
          Sheets("Comparatif").Select
          ActiveSheet.Unprotect
          Range("b65536").End(xlUp).Offset(1, 0) = Range("i2")
          Range("b65536").End(xlUp).Locked = True
          Range("c65536").End(xlUp).Offset(1, 0) = Range("j2")
          Range("c65536").End(xlUp).Locked = True
          Range("d65536").End(xlUp).Offset(1, 0) = Range("k2")
          Range("d65536").End(xlUp).Locked = True
          End Sub


          Le problème vient de mon Else je pense mais je ne vois pas comment faire pour ne pas réaliser la partie en gras si la Msgbox s'affiche
          1. Tu ajoutes Exit Sub juste après MsgBox ...

            Tu as trop de If imbriqués, utilise plutôt Or :

            If Range("d16").Value <> "OK" Or Range("d18").Value <> "OK" Or Range("d20").Value <> "OK" ... Then
            MsgBox ("Veuillez répondre aux questions de l'ensemble des questionnaires")
            Exit Sub
            Else
            .....
            End If

            ;o)

            --
            «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
            Nicolas Boileau
            1. Ok merci.

              Dernier petit bug de mon outil, j'ai créé une macro qui copie la valeur d'une textbox dans une case excel mais le souci est qu'elle la prends en compte en tant que texte et non en tant que nombre. Du coup tous mes calculs sont faussés. Comment faire pour qu'il détecte automatiquement cette case en tant que nombre?
              1. Bonjour,

                Essaie en faisant :

                Sheets(1).Range("A1").Value = CInt(TextBox1.Text)

                Sinon, il faut changer le format de la cellule dans Excel:
                Format -> Cellule -> onglet Nombre

                ;o)