1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| Sub test()
'Déclarations ---------------------------
Dim F1 As Worksheet, F2 As Worksheet
Dim Cel As Range, Celr As Range
Dim X As Long, Y As Long
Dim Tab_v()
'MEI ------------------------------------
Set F1 = Sheets("Feuil1") 'Feuille source
Set F2 = Sheets("Feuil2") 'Feuille destination
'Initialisation du traitement -----------
Set Celr = F1.Range("A:A").Find("Nom", after:=Cells(Rows.Count, "A"))
'recherche de la première cellule "Nom" en commençant de la ligne 1
If Celr Is Nothing Then Exit Sub Else Set Cel = Celr
'si Cel réf est vide on sort, sinon Celr=Cel
ReDim Tab_v(6, 0)
'Initialisation du tableau de variables
Do 'début de boucle
If Cel.Offset(0, 1) <> "" Then
'si cellule à droite de "nom" n'est pas vide, alors
For X = 3 To 6
'Pour x de 3 à 6
If Cel.Offset(X, 1) <> "oui" Then
'si la cellule de la colonne B à x ligne de Non n'est pas "Oui", alors
ReDim Preserve Tab_v(6, UBound(Tab_v, 2) + 1)
'redimmensionner le tableau avec 6 colonne et 1 ligne de plus
Tab_v(1, UBound(Tab_v, 2)) = Cel.Offset(0, 0)
'Tableau colonne1, dernière ligne = nom
Tab_v(2, UBound(Tab_v, 2)) = Cel.Offset(0, 1)
Tab_v(3, UBound(Tab_v, 2)) = Cel.Offset(1, 0)
Tab_v(4, UBound(Tab_v, 2)) = Cel.Offset(1, 1)
Tab_v(5, UBound(Tab_v, 2)) = Cel.Offset(X, 0)
Tab_v(6, UBound(Tab_v, 2)) = Cel.Offset(X, 1)
End If
Next X
'X suivant
End If
Set Cel = F1.Range("A:A").FindNext(Cel)
'Cel = Prochaine cellule contenant "Nom" à partir de Cel
Loop Until Cel.Row = Celr.Row Or Cel Is Nothing
'Bouclage jusqu'à cel vide, ou retour à la première trouvée
If UBound(Tab_v, 2) = 0 Then Exit Sub
'si on est resté à 0 (on n'a rien trouvé), alors sortir de la macro
Y = F2.Range("A" & Rows.Count).End(xlUp).Row
'Y= première ligne de A non vide en partant de la dernière et en remontant
If F2.Range("A" & Y) <> "" Then Y = Y + 1
'si Ay = vide on est sur la ligne 1, sinon, y=y+1
For X = 1 To UBound(Tab_v, 2)
'pour x=1 à dernier indice de ligne de Tab_V
F2.Range("A" & Y + 0) = Tab_v(1, X)
'on recopie Tab_V dans F2
F2.Range("A" & Y + 1) = Tab_v(2, X)
F2.Range("B" & Y + 0) = Tab_v(3, X)
F2.Range("B" & Y + 1) = Tab_v(4, X)
F2.Range("C" & Y + 0) = Tab_v(5, X)
F2.Range("C" & Y + 1) = Tab_v(6, X)
Y = Y + 2
'on saute les 2 lignes (Y et Y+1) qu'on vient de remplir
Next X
'X suivant
End Sub |
Partager