VBA - Condition et Do Loop

Bonjour,

Je cherche à faire un programme pour mon association,

J'ai un onglet "TdB" dans lequel je recense tous les enfants de l'association. J'ai une ligne par enfant, et une colonne par activité.
Si l'enfant participe à l'activité je met un "X" sinon je ne mets rien.

Je souhaiterais pouvoir copier dans un autre onglet uniquement les enfants qui ont une croix dans l'activité définie, et ainsi avoir un onglet par activité avec la liste des enfant inscrit.

J'ai réussi a faire une macro pour une seule ligne

Sheets("TdB").Select
Range("I4").Select
If Range("I4") = "x" Then
Range("A4").Select
Selection.Copy
Sheets("PrésenceAS").Select
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If

Là je copie uniquement le nom de l'enfant, je souhaiterais pouvoir copier A4:C4 sur A3:C3 et faire tourner la macro pour chaque ligne.

Je vous remercie d'avance
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. Il y avait peut-être une solution plus "Excel" , mais celle ci devrait fonctionner:

    i = 4
    k = 3
    While Worksheets("TdB").Cells(i, 1).Value <> ""
    If Worksheets("TdB").Cells(i, 9).Value = "X" Then
    For j = 1 To 3
    Worksheets("PrésenceAS").Cells(k, j).Value = Worksheets("TdB").Cells(i, j).Value
    k = k + 1
    Next j
    End If
    i = i + 1
    wend

    Bon courage!
    1. Merci pour cette proposition, mais cela ne fonctionne pas,
      Dans l'onglet "PrésenceAS", le nom est copié, puis la ligne en dessous le prénom, puis la ligne en dessous la classe, au lieu d'être copié sur la meme ligne.
  2. je souhaiterais pouvoir copier A4:C4 sur A3:C3

    J'avais lu un peu vite, j'y retourne!
    1. CA merchera mieux comme ça:
      i = 4
      k = 3
      While Worksheets("feuil2").Cells(i, 1).Value <> ""
          If Worksheets("feuil2").Cells(i, 9).Value = "X" Then
              For j = 1 To 3
                  Worksheets("feuil3").Cells(k, 1).Value = Worksheets("feuil2").Cells(j + i - 1, 1).Value
                  k = k + 1
              Next j
          End If
          i = i + 3
      Wend


      As-tu une autre solution ?
      1. J'ai rajouté deux petites lignes, car avec le programme, seule la colonne A était copiée,
        Finalement ca donne ca :

        Sub PAS()
        i = 4
        k = 3
        While Worksheets("TdB").Cells(i, 1).Value <> ""
        If Worksheets("TdB").Cells(i, 9).Value = "x" Then
        For j = 1 To 3
        Worksheets("PrésenceAS").Cells(k, 1).Value = Worksheets("TdB").Cells(j + i - 1, 1).Value
        Worksheets("PrésenceAS").Cells(k, 2).Value = Worksheets("TdB").Cells(j + i - 1, 2).Value
        Worksheets("PrésenceAS").Cells(k, 3).Value = Worksheets("TdB").Cells(j + i - 1, 3).Value
        k = k + 1
        Next j
        End If
        i = i + 3
        Wend

        End Sub

        En fait le programme ne prend pas en compte la condition, il copie tout le monde, meme ceux pour lesquels la colonne I n'est pas cochée.

    2. Initialement :
      je souhaiterais pouvoir copier A4:C4 sur A3:C3

      C'est ce que faisait la première proposition, mais réponse:
      le nom est copié, puis la ligne en dessous le prénom, puis la ligne en dessous la classe, au lieu d'être copié sur la meme ligne.

      correction dans ce sens, mais réponse:
      seule la colonne A était copiée

      Ben oui c'est le besoin exprimé

      La prochaine fois précise bien le besoin au départ.

      Bonne poursuite
      1. Je pensais que c'était clair,
        Copier A4:C4 de la feuille 1 dans A3:C3 de la feuille 2 , si I4="x" dans la feuille 1 , et cela pour toutes les lignes de la feuille 1