MultiPage - checkBox- Boucle : Vba

Résolu/Fermé
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 3 mars 2018 à 04:49
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 4 mars 2018 à 18:28
Bonjour à tous
merci à l'avance de prendre le temps de me lire. J'ai beau lire des forums et faire des recherches, j'ai énormément de difficulté à comprendre les boucles.. Je commence à y arriver pour des choses simples mais là, je dois faire une boucle dans un multi page avec checkBox et je ne sais vraiment pas comment m'y prendre.

J'ai un userform servant à creer une feuille excel. (création fiche client) j'ai fait un multi page (4 pages) avec plusieurs checkBox, mon but est que si la checkBox est cochée (exemple dans la page 1 du multipage), dans ma feuille qui sera créer, qu'à partir de la ligne 13, ça mette le caption de ma checkbox dans la colonne G et en même temps si c'est la page 1 du multipage ça écrive "F" dans la colonne E de la même ligne et que ça fasse le tour des 4 pages et de toutes les checkBox

Je joint un fichier si je ne suis pas clair (ce qui est fort possible :) )
merci beaucoup

https://www.cjoint.com/c/HCddWACFuHm

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 3 mars 2018 à 08:37
Bonjour,

voir ici pour la boucle sur checkbox:

https://forums.commentcamarche.net/forum/affich-35018919-vba-imprimer-sauf-si-les-lignes-sont-masquees#7

Ce qui donne pour ton cas:

Dim Ctrl As Control
Dim Ctrl_2 As Control
'Boucle sur la collection de contrôles
For Each Ctrl_2 In Me.Controls
  If TypeOf Ctrl_2 Is MSForms.MultiPage Then
  MsgBox Ctrl_2.Name
For Each Ctrl In Me.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
  If Ctrl.Object.Value = True Then
  MsgBox Ctrl.Caption
  End If
  End If
Next Ctrl
End If
Next Ctrl_2


je te laisse faire le reste, il suffit de mettre ton action à la place de:

MsgBox Ctrl.Caption


voilà

1
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
3 mars 2018 à 20:10
Bonjour Pivert
merci beaucoup pour ton aide, j'ai vraiment de la difficulté avec les boucles, voici ce que j'essaie qui ne fonctionne pas. Svp sois indulgent, j'essaie ;)



Sub produits()
Dim x, J As Integer
x = 13
Dim Ctrl As Control
Dim Ctrl_2 As Control
'Boucle sur la collection de contrôles
For Each Ctrl_2 In Me.Controls
If TypeOf Ctrl_2 Is MSForms.MultiPage Then
If Ctrl_2.Name = "FRAIS" Then
Cells(x, 1) = "F"

If Ctrl_2.Name = "CONGELÉ" Then
Cells(x, 5).Value = "S"
If Ctrl_2.Name = "TRANSFORMÉ_FRAIS" Then
Cells(x, 5).Value = "T/F"
If Ctrl_2.Name = "TRANSFORMÉ_CONGELÉ" Then
Cells(x, 5).Value = "T/S"
Sheets("transport DSTJ").Cells(J + 1, 1) = Sheets(i).Cells(x, 2)
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then
If Ctrl.Object.Value = True Then
MsgBox Ctrl.Caption
End If
End If
Next Ctrl
End If
End If
End If
End If
End If
Next Ctrl_2
End Sub

il semble pas déceler les mutlipages :(
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
3 mars 2018 à 20:52
il semble pas déceler les mutlipages :(

d'accord avec toi, j'ai essayé cela:

Dim Ctrl As Control
Dim Ctrl_2 As Control
Dim i As Integer
 i = 13
'Boucle sur la collection de contrôles
For Each Ctrl_2 In Me.Controls
  If TypeOf Ctrl_2 Is MSForms.MultiPage Then
For Each Ctrl In Me.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
  If Ctrl.Object.Value = True Then
  If MultiPage1.Pages(0).Name = "Page1" Then
Sheets(TBOX_NOMCLIENT.Value).Range("E" & i) = "F"
End If
 Sheets(TBOX_NOMCLIENT.Value).Range("G" & i) = Ctrl.Caption
  i = i + 1
  End If
  End If
Next Ctrl
End If
Next Ctrl_2


et cela met des F partout, par contre le reste est conforme, la colonne G se remplie correctement!


1
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
3 mars 2018 à 21:41
Bonjour
merci encore pour ton aide, je suis désolé mais j'ai encore un problème
la boucle ne s'arrête pas et ma colonne E donne toujours le dernier choix soit : T/S
même si ça me donne la bonne donnée dans la colonne G..J'essaie vraiment de trouver mais je ne comprends pas. Cela peut-il être à cause de ou sont placer les next Ctrl?

merci à l'avance




Sub produits()

Dim Ctrl As Control
Dim Ctrl_2 As Control
Dim i As Integer
i = 13
'Boucle sur la collection de contrôles
For Each Ctrl_2 In Me.Controls
If TypeOf Ctrl_2 Is MSForms.MultiPage Then
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then
If Ctrl.Object.Value = True Then

If MultiPage1.Pages(0).Name = "Page1" Then
Sheets(TBOX_NOMCLIENT.Value).Range("E" & i) = "F"
End If
If MultiPage1.Pages(1).Name = "Page2" Then
Sheets(TBOX_NOMCLIENT.Value).Range("E" & i) = "S"
End If
If MultiPage1.Pages(2).Name = "Page3" Then
Sheets(TBOX_NOMCLIENT.Value).Range("E" & i) = "T/F"
End If
If MultiPage1.Pages(3).Name = "Page4" Then
Sheets(TBOX_NOMCLIENT.Value).Range("E" & i) = "T/S"
End If

End If
End If
Sheets(TBOX_NOMCLIENT.Value).Range("G" & i) = Ctrl.Caption
i = i + 1
End If
End If
Next Ctrl
End If
Next Ctrl_2


End Sub
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
4 mars 2018 à 07:25
La boucle sur le multipage ne fonctionne pas. j'ai donc procédé autrement par le numéro des checkbox. Je viens juste de répondre à ce post. Je m'en suis donc servi:

https://forums.commentcamarche.net/forum/affich-35232189-test-fonction-si#5

ce qui donne:

'http://www.commentcamarche.net/forum/affich-35232189-test-fonction-si#p35237257
Dim Ctrl As Control
Dim i As Integer
Dim numero As Integer
 i = 13
If TBOX_NOMCLIENT.Text = "" Then Exit Sub
'Boucle sur la collection de contrôles
For Each Ctrl In Me.Controls
    If TypeOf Ctrl Is MSForms.CheckBox Then
  If Ctrl.Object.Value = True Then
   numero = Replace(Ctrl.Name, "CheckBox", "") 'numero checkBox seul
  Select Case numero
              Case Is < 32
               Sheets(TBOX_NOMCLIENT.Text).Range("E" & i) = "F"
              Case Is < 63
               Sheets(TBOX_NOMCLIENT.Text).Range("E" & i) = "C"
               Case Is < 72
               Sheets(TBOX_NOMCLIENT.Text).Range("E" & i) = "TF"
                 Case Is < 85
                 Sheets(TBOX_NOMCLIENT.Text).Range("E" & i) = "TC"
                  End Select
           Sheets(TBOX_NOMCLIENT.Text).Range("G" & i) = Ctrl.Caption
  i = i + 1
  End If
  End If
Next Ctrl


Voilà c'est simple,

Bon Dimanche

@+ Le Pivert
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
4 mars 2018 à 18:28
merci beaucoup! ça fonctionne parfaitement, c'est génial!!!
0