MultiPage - checkBox- Boucle : Vba

Résolu
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -  
lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      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
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
    3. lanetmel Messages postés 200 Date d'inscription   Statut Membre Dernière intervention   4
       
      merci beaucoup! ça fonctionne parfaitement, c'est génial!!!
      0