Conditions IF + checkbox

sadness78

XLDnaute Junior
Bonjour tout le monde,

J’ai un petit problème d’écriture sur les checkbox que je n’ai jamais utilisé.

Voici mon exemple j’ai 6 checkbox qui me permette de lancer différent publipostage

Regarde la pièce jointe 1212.bmp

Concernant la macro de publipostage, je l’utilise déjà depuis longtemps la voici :

Code:
Sub Nom de la macro()

'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    Dim docWord As Word.Document
    Dim appWord As Word.Application
    Dim NomBase As String
    
    NomBase = "chemin du fichier"
    
    Application.ScreenUpdating = False
    Set appWord = New Word.Application
    appWord.Visible = True
    
    Set docWord = appWord.Documents.Open("chemin du fichier")
    
    With docWord.mailMerge
    
    .OpenDataSource Name:=NomBase, _
            Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
            "DBQ=" & NomBase & "; ReadOnly=True;", _
            SQLStatement:="SELECT * FROM [AFAPS_BDD$]"
        
    .Execute Pause:=False
    
    End With
    
    Application.ScreenUpdating = True
    End Sub
J’aimerais qu’une vérification se fasse au niveau des checkbox :

- Si checkbox 1+2+3 n’est pas coché lancé la macro publipostage (Fichier 1)
- Si checkbox 1 est coché lancé la macro publipostage (Fichier 2)
- Si checkbox 1+2 est coché lancé la macro publipostage (Fichier 3)
- Si checkbox 1+4 est coché lancé la macro publipostage (Fichier 2+4)
 2 publipostages différents
- Si checkbox 1+4+5+6 est coché lancé la macro publipostage (Fichier 2+4+5+6)
 4 publipostages différents

J’ai réfléchis à la façon de procéder et je pense que le mieux serait de faire la vérification dans un premier temps ce qui permettrait de déterminer qu’elle macro de publipostage doit être lancé.

N’hésitez pas à me dire si ma réflexion est erronée.

Voici ce que j’ai pu trouver concernant les checkbox mais vu les nombreux cas je ne vois pas comment les structurer.
Code:
1.	Private Sub CheckBox1_Change() 
2.	    If CheckBox1.Value = True Then 
3.	        Range("E1").Value = "1" 
4.	    Else 
5.	        Range("E1").Value = "" 
6.	    End If 
7.	End Sub

Un peu plus de précision concernant mon exemple, les checkbox 1, 2 et 3 lance un fichier de publipostage différent même si les 3 sont cochées, alors que les checkbox 4, 5 et 6 lance 1 fichier de publipostage chacune.

Exemple : Si toute les checkbox sont cochées (1+2+3+4+5+6). Elles ne lanceront que 4 publipostages différents.
1+2+3 = 1
4 = 1
5 = 1
6 = 1

Merci d’avance de m’éclairer de vos lumières.

Cordialement,
 
Dernière édition:

sadness78

XLDnaute Junior
Re : Conditions IF + checkbox

Voici le code modifié.

Par contre comment puis-je déclarer les différentes macro, exemple si je coche la checkbox 1+3+4 a quel CBSum cela correspond t'il ?

Code:
Private Sub CommandButton1_Click()
 
If CheckBox1 = True Then CBSum = CBSum + 1
If CheckBox2 = True Then CBSum = CBSum + 2
If CheckBox3 = True Then CBSum = CBSum + 4
If CheckBox4 = True Then CBSum = CBSum + 8
If CheckBox5 = True Then CBSum = CBSum + 9
If CheckBox6 = True Then CBSum = CBSum + 10
If CheckBox7 = True Then CBSum = CBSum + 11
 
Dim CBSum As Integer

Select Case CBSum
    Case 1
        Call EASLS_Police
    Case 2 To 3
        Call EASLS_Police_LC
    Case 4 To 7
        Call EASLS_Police_RG
    Case 9
        Call EASLS_Attesta
    Case 10
        Call EASLS_Quittance
    Case 11
        Call EASLS_lettre_accompagnement
    Case Else
        MsgBox "Vous devez cochez au moins 1 case"
End Select
End If

End Sub
 

Dormeur74

XLDnaute Occasionnel
Re : Conditions IF + checkbox

Je vois que tu n'as pas compris grand-chose au système binaire proposé.

Si tu respectes scrupuleusement la base du code que je t'ai donnée :
Code:
If CheckBox1 = True Then CBSum = CBSum + 1
If CheckBox2 = True Then CBSum = CBSum + 2
If CheckBox3 = True Then CBSum = CBSum + 4
If CheckBox4 = True Then CBSum = CBSum + 8
If CheckBox5 = True Then CBSum = CBSum + 16
If CheckBox6 = True Then CBSum = CBSum + 32

...tu constateras que tu dérailles en écrivant :
Code:
If CheckBox1 = True Then CBSum = CBSum + 1
If CheckBox2 = True Then CBSum = CBSum + 2
If CheckBox3 = True Then CBSum = CBSum + 4
If CheckBox4 = True Then CBSum = CBSum + 8
If CheckBox5 = True Then CBSum = CBSum + 9
If CheckBox6 = True Then CBSum = CBSum + 10
If CheckBox7 = True Then CBSum = CBSum + 11

Par contre comment puis-je déclarer les différentes macro, exemple si je coche la checkbox 1+3+4 a quel CBSum cela correspond t'il ?

La case à cocher 1 vaut 1 point
La case à cocher 3 vaut 4 points
La case à cocher 4 vaut 8 points
Le total vaut donc 1 + 4 + 8 = 13 points. C'est une valeur unique : aucune autre combinaison de cases cochées ne peut donner 13.

Ce qui va donner par exemple :

Code:
Select Case CBSum
    Case 0 : Msgbox "Aucune case cochée."
    Case 13 : Msgbox "Cases 1-3-4 cochées"
    Case 63 : Msgbox "Cases 1-2-3-4-5-6 cochées"
End Select
 

sadness78

XLDnaute Junior
Re : Conditions IF + checkbox

Ah oui je n'avais pas du tout compris mais je vais surement te décevoir car je ne suis pas sur d'avoir compris car dans cette logique je dois bien lister chaque combinaison possible car chaque combinaison est différente.

Voici peut être un début plus explicite (toutes les possibilités ne sont pas listés j'aimerais juste savoir si je fais de nouveau fausse route):

Code:
If CheckBox1 = True Then CBSum = CBSum + 1
If CheckBox2 = True Then CBSum = CBSum + 2
If CheckBox3 = True Then CBSum = CBSum + 4
If CheckBox4 = True Then CBSum = CBSum + 8
If CheckBox5 = True Then CBSum = CBSum + 16
If CheckBox6 = True Then CBSum = CBSum + 32
If CheckBox7 = True Then CBSum = CBSum + 64

Select Case CBSum
    Case 0: MsgBox " Merci de cocher au moins une case"
    Case 1
    Case 3
    Case 5
    Case 7
    Case 9
    Case 13
    Case 15
    Case 16
    Case 17
    Case 19
    Case 23
    Case 25
    Case 27
    Case 29
    Case 31
    Case 32
    Case 33
    Case 48
    Case 49
    Case 51
    Case 63
    Case 64
    Case 65
    Case 96
    Case 112
    
    
End Select
 

Fo_rum

XLDnaute Accro
Re : Conditions IF + checkbox

Bonjour,

une toute autre façon de lancer les macros en fonction des cases cochées.
Code:
Private Sub CommandButton1_Click()
  Dim num As String, s As Byte, n As Byte, x As Byte
  num = ""
  For n = 1 To 7  'nombre de cases cochées
    s = s - Me("CheckBox" & n)
  Next
  For n = 1 To 7  'numéros des cases cochées
    If s = n Then
      For x = 1 To 7
        If Me("Checkbox" & x) Then num = x & " " & num
      Next
    End If
  Next
  Select Case RTrim(num) 'affectation macros
    Case "1": MacroA
    Case "3 1": MacroB
    Case "2": MacroC
    Case "7 5 3 2 1": MacroD
  End Select
End Sub
 

Pièces jointes

  • CheckBox(UsF).xls
    63 KB · Affichages: 50

Dormeur74

XLDnaute Occasionnel
Re : Conditions IF + checkbox

Je reprends strictement ton énoncé :
A- Si checkbox 1+2+3 n’est pas coché lancé la macro publipostage (Fichier 1)
B- Si checkbox 1 est coché lancé la macro publipostage (Fichier 2)
C- Si checkbox 1+2 est coché lancé la macro publipostage (Fichier 3)
D- Si checkbox 1+4 est coché lancé la macro publipostage (Fichier 2+4)
E- Si checkbox 1+4+5+6 est coché lancé la macro publipostage (Fichier 2+4+5+6)

Proposition A : on a 6 solutions : CBSum = 8,16,24,32,40,48 ou 56
Proposition B : on a 1 solution : CBSum = 1
Proposition C : on a 1 solution : CBSum = 3
Proposition D : on a 1 solution : CBSum = 9
Proposition E : on a 1 solution : CBSum = 57

Ce qui donne :

Code:
    Dim CBSum As Integer ' N'oublie pas de toujours déclarer tes variables de façon explicite
    
    If CheckBox1.Value = True Then CBSum = CBSum + 1
    If CheckBox2.Value = True Then CBSum = CBSum + 2
    If CheckBox3.Value = True Then CBSum = CBSum + 4
    If CheckBox4.Value = True Then CBSum = CBSum + 8
    If CheckBox5.Value = True Then CBSum = CBSum + 16
    If CheckBox6.Value = True Then CBSum = CBSum + 32
    
    Select Case CBSum
        Case 0: MsgBox "Au moins une case doit être cochée"
        Case 8, 16, 24, 32, 40, 48, 56: MsgBox "F1"
        Case 1: MsgBox "F2"
        Case 3: MsgBox "F3"
        Case 9: MsgBox "F2+F4"
        Case 57: MsgBox "F2+F4+F5+F6"
        Case Else: MsgBox "non prévu"
    End Select
 

sadness78

XLDnaute Junior
Re : Conditions IF + checkbox

Re bonjour fo_rum, Dormeur74


Mon 1er test concerne la macro de fo_rum je vais tout de suite après essayer celle de dormeur74.

J'ai une erreur à ce niveau là : ==> s = s - Me("CheckBox" & n)

Code:
Private Sub Publipostage_Click()
 
  Dim num As String, s As Byte, n As Byte, x As Byte
  num = ""
  For n = 1 To 7  'nombre de cases cochées
  s = s - Me("CheckBox" & n)
  Next
  For n = 1 To 7  'numéros des cases cochées
    If s = n Then
      For x = 1 To 7
        If Me("Checkbox" & x) Then num = x & " " & num
      Next
    End If
  Next
  Select Case RTrim(num) 'affectation macros
    Case "1": Call AFAPS_Police.AFAPS_Police
    Case "2": Call AFAPS_Lettre_accompagnement.AFAPS_Lettre_accompagnement
    Case "3": Call AFAPS_Attestation.AFAPS_Attestation
    Case "4": Call AFAPS_Quittance.AFAPS_Quittance
    
  End Select
 
 End Sub

error.gif

Merci de votre temps.

Cdlt,
 

Pièces jointes

  • error.gif
    error.gif
    5.2 KB · Affichages: 23
  • error.gif
    error.gif
    5.2 KB · Affichages: 26
Dernière édition:

sadness78

XLDnaute Junior
Re : Conditions IF + checkbox

Cela marche bien pour les 2 macros proposées, j'aurais juste une dernière question qui s'applique pour les 2 macros c'est que le nombre de cas est exponentielle :

Pour 4 checkbox j'ai 13 cas différents :

Case 1 ==> macro A
Case 2 ==> macro B
Case 3 ==> macro C
Case 4 ==> macro D

mais aussi :

Case 1 2 ==> macro A+B
Case 1 3 ==> macro A+C
Case 1 4 ==> macro A+D

Case 1 3 4 ==> macro A+C+D
Case 1 2 3 ==> macro A+B+C

Case 1 2 3 4 ==> macro A+B+C+D


Car comme je l'ai mis ici :
Regarde la pièce jointe 6666.bmp

Je me doute bien qu'en listant toutes les possibilités cela marchera mais n'y a t'il pas moyen de lister les possibilités que pour les 4 premières checkbox et après de les lier avec les autres qui sont indépendantes ?
 

sadness78

XLDnaute Junior
Re : Conditions IF + checkbox

Bonjour,

Merci à fo_rum et dormeur74 pour ces solutions à mon problème.

Si un jour quelqu'un tombe sur ce fil ne pas faire la même erreur que moi surtout ne jamais nommer son module et sa sub de la même manière sinon cela ne marchera pas.
 

Discussions similaires

Statistiques des forums

Discussions
315 260
Messages
2 117 856
Membres
113 354
dernier inscrit
caillet