VBA - Condition et Do Loop

questionVBA Messages postés 4 Statut Membre -  
questionVBA Messages postés 4 Statut Membre -
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. Utilisateur anonyme
     
    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!
    0
    1. questionVBA Messages postés 4 Statut Membre
       
      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.
      0
  2. Utilisateur anonyme
     
    je souhaiterais pouvoir copier A4:C4 sur A3:C3

    J'avais lu un peu vite, j'y retourne!
    0
  3. Utilisateur anonyme
     
    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 ?
    0
    1. questionVBA Messages postés 4 Statut Membre
       
      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.

      0
  4. Utilisateur anonyme
     
    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
    0
    1. questionVBA Messages postés 4 Statut Membre
       
      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
      0