VBA - Condition et Do Loop

Fermé
questionVBA Messages postés 4 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 24 avril 2009 - 22 avril 2009 à 18:03
questionVBA Messages postés 4 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 24 avril 2009 - 24 avril 2009 à 13:34
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

4 réponses

Utilisateur anonyme
22 avril 2009 à 19:07
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
questionVBA Messages postés 4 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 24 avril 2009
23 avril 2009 à 11:47
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
Utilisateur anonyme
23 avril 2009 à 12:26
je souhaiterais pouvoir copier A4:C4 sur A3:C3

J'avais lu un peu vite, j'y retourne!
0
Utilisateur anonyme
23 avril 2009 à 18:06
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
questionVBA Messages postés 4 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 24 avril 2009
24 avril 2009 à 09:21
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
Utilisateur anonyme
24 avril 2009 à 12:10
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
questionVBA Messages postés 4 Date d'inscription mercredi 22 avril 2009 Statut Membre Dernière intervention 24 avril 2009
24 avril 2009 à 13:34
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