Condition si plusieurs cases à cocher sont cochées

Résolu
bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -  
bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous!

J'ai créer un Userform avec une liste déroulante pour les noms et plusieurs cases à cocher qui représente les différentes feuilles de mon classeur. Le but de ce Userform est d'envoyer le nom de la personne qui à modifié le document ainsi que la date, sur la feuille qu'il à modifié en cochant la bonne case.

J'ai utilisé en partant la fonction "If" et "ElseIf", ça fonctionne, si je sélectionne une seule case. Mais ça ne fonctionne plus si je sélectionne plusieurs case! J'ai essayé par la suite la fonction "Case", alors là, il me copie le nom sur toutes les feuilles même si j'en sélectionne juste une.

Voici mes deux essais:
Private Sub CommandButton1_Click()

If CheckBox1.Value = True Then
wns = "Coordonnées"
zone = "ZoneCoord"
ZoneDate = "ZoneDateCoord"

    ElseIf CheckBox2.Value = True Then
    wns = "CPTU"
    zone = "ZoneCPTU"
    ZoneDate = "ZoneDateCPTU"

    ElseIf CheckBox3.Value = True Then
    wns = "Piézomètres"
    zone = "ZonePiézo"
    ZoneDate = "ZoneDatePiézo"

    ElseIf CheckBox4.Value = True Then
    wns = "Inclinomètres"
    zone = "ZoneInclino"
    ZoneDate = "ZoneDateInclino"

    ElseIf CheckBox5.Value = True Then
    wns = "Suivi Implantation"
    zone = "ZoneImplant"
    ZoneDate = "ZoneDateImplant"

    ElseIf CheckBox6.Value = True Then
    wns = "FORAGE"
    zone = "ZoneForage"
    ZoneDate = "ZoneDateForage"
End If

    If ComboBox1 = "" Then
        MsgBox "Vous devez inscrire votre nom!", vbCritical, "NOM"
        Exit Sub
    End If
        If wns = "" Then
            MsgBox "Vous-n'avez pas sélectionnez de feuilles!", vbCritical, "Feuilles"
            Exit Sub
        End If

Sheets(wns).Shapes(zone).TextFrame.Characters.Text = ComboBox1.Value
Sheets(wns).Shapes(ZoneDate).TextFrame.Characters.Text = Label3
   
UserForm5.Hide
End Sub
et l'autre:
Private Sub CommandButton1_Click()

Dim i As Variant

For i = 1 To 6
            On Error Resume Next
            Erase critères
            On Error GoTo 0
            Select Case i

Case 1
    critères = CheckBox1.Value = True
    wns = "Coordonnées"
    zone = "ZoneCoord"
    ZoneDate = "ZoneDateCoord"

Case 2
    critères = CheckBox2.Value = True
    wns = "CPTU"
    zone = "ZoneCPTU"
    ZoneDate = "ZoneDateCPTU"
    
Case 3
    critères = CheckBox3.Value = True
    wns = "Piézomètres"
    zone = "ZonePiézo"
    ZoneDate = "ZoneDatePiézo"
    
Case 4
    critères = CheckBox4.Value = True
    wns = "Inclinomètres"
    zone = "ZoneInclino"
    ZoneDate = "ZoneDateInclino"
    
Case 5
    critères = CheckBox5.Value = True
    wns = "Suivi Implantation"
    zone = "ZoneImplant"
    ZoneDate = "ZoneDateImplant"
    
Case 6
    critères = CheckBox6.Value = True
    wns = "FORAGE"
    zone = "ZoneForage"
    ZoneDate = "ZoneDateForage"
End Select

    If ComboBox1 = "" Then
        MsgBox "Vous devez inscrire votre nom!", vbCritical, "NOM"
        Exit Sub
    End If
        If crtières = "" Then
            MsgBox "Vous-n'avez pas sélectionnez de feuilles!", vbCritical, "Feuilles"
            Exit Sub
        End If
        

Sheets(wns).Shapes(zone).TextFrame.Characters.Text = ComboBox1.Value
Sheets(wns).Shapes(ZoneDate).TextFrame.Characters.Text = Label3
Next
UserForm5.Hide
End Sub


Merci de votre aide!

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Pour faire simple, en reprenant votre code, il suffit d'utiliser des If/End If en lieu et place des If/ElseIf/EndIf :
    Private Sub CommandButton1_Click()
    
    If CheckBox1.Value = True Then
    wns = "Coordonnées"
    zone = "ZoneCoord"
    ZoneDate = "ZoneDateCoord"
    End If
    If CheckBox2.Value = True Then
        wns = "CPTU"
        zone = "ZoneCPTU"
        ZoneDate = "ZoneDateCPTU"
    End If
    If CheckBox3.Value = True Then
        wns = "Piézomètres"
        zone = "ZonePiézo"
        ZoneDate = "ZoneDatePiézo"
    End If
    If CheckBox4.Value = True Then
        wns = "Inclinomètres"
        zone = "ZoneInclino"
        ZoneDate = "ZoneDateInclino"
    End If
    If CheckBox5.Value = True Then
        wns = "Suivi Implantation"
        zone = "ZoneImplant"
        ZoneDate = "ZoneDateImplant"
    End If
    If CheckBox6.Value = True Then
        wns = "FORAGE"
        zone = "ZoneForage"
        ZoneDate = "ZoneDateForage"
    End If
    
        If ComboBox1 = "" Then
            MsgBox "Vous devez inscrire votre nom!", vbCritical, "NOM"
            Exit Sub
        End If
            If wns = "" Then
                MsgBox "Vous-n'avez pas sélectionnez de feuilles!", vbCritical, "Feuilles"
                Exit Sub
            End If
    
    Sheets(wns).Shapes(zone).TextFrame.Characters.Text = ComboBox1.Value
    Sheets(wns).Shapes(ZoneDate).TextFrame.Characters.Text = Label3
       
    UserForm5.Hide
    End Sub


    Mais on peut également faire beaucoup plus court comme code...

    A voir si intéressé.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Exemple :
      Option Explicit
      
      Const FEUILLES As String = "Coordonnées;CPTU;Piézomètres;Inclinomètres;Suivi Implantation;FORAGE"
      Const ZONES As String = "ZoneCoord;ZoneCPTU;ZonePiézo;ZoneInclino;ZoneImplant;ZoneForage"
      Const ZONESDATES As String = "ZoneDateCoord;ZoneDateCPTU;ZoneDatePiézo;ZoneDateInclino;ZoneDateImplant;ZoneDateForage"
      
      Private Sub CommandButton1_Click()
      Dim i As Integer
         'vérification
         If ComboBox1 = "" Then
            MsgBox "Vous devez inscrire votre nom!", vbCritical, "NOM"
            Exit Sub
         End If
         'insertion données
         For i = 1 To 6
            If Me.Controls("CheckBox" & i).Value = True Then
               With Sheets(Split(FEUILLES, ";")(i - 1))
                  .Shapes(Split(ZONES, ";")(i - 1)).TextFrame.Characters.Text = ComboBox1.Value
                  .Shapes(Split(ZONESDATES, ";")(i - 1)).TextFrame.Characters.Text = Label3.Caption
               End With
            End If
         Next i
         Me.Hide
      End Sub
      0
      1. bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   1 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci beaucoup pijaku!

        J'ai utilisé ton code simplifié et ça fonctionne très bien!
        0