Détecter des fins de séries
Bonjour à tous,
Après avoir consacré un certain nombre de minutes, d'heures et de jours (bon j'exagère un tout ptit peu), je me vois réduit à vous appeler "au secours !!"
Je dois au sein d'une feuille Excel modifier la structure des données enregistrées :
sur chacune des X lignes (ici des lignes 8 à 73), je dois vérifier à chaque fois à quel moment la série de données s'arrête : j'ai des données systématiquement jusqu'à la colonne DG, et après des séries de données toutes les 11 colonnes (ou pas !) : soit la ligne s'arrête à la colonne DG (111ème col), soit la colonne DG+11, soit DG+22, .... etc jusqu'à IT au max.
Si la série s'arrête en DG+11, je dois insérer une nouvelle ligne où A:CV est identique et CW: DG comporte les données de DG+1: DG+11
Si la série s'arrête en DG+22, je dois insérer deux nouvelles lignes où A:CV est identique et CW: DG comporte les données de DG+1: DG+11 pour la première ligne et CW: DG comporte les données de DG+12: DG+22 pour la deuxième colonne.
etc... (si la série s'arrête en DG+33, on crée 3 lignes...) au max, on aura 13 créations de lignes pour une ligne donnée.
Au final on aura un gros tableau, où toutes les lignes s'arrêteront bien en DG.
Voilà !
Ci-dessous, le programme que j'ai créé (mais n'étant pas très doué..), et qui concrètement ne fait rien du tout quand je le fais tourner (aucune modif)!
Code:
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 ligne_salarie()
Dim i As Integer
Dim z As Integer
Dim x As Integer
Dim compteur As Integer
compteur = 0
z = 0
For i = 8 To 73
i = i + compteur
'''ici, je regarde combien de lignes, je devrai créer (z-1) pour la ligne "i" étudiée
If Range("CW" & i).Value = "" Then Exit Sub
z = 0
If Range("IJ" & i).Value <> "" Then z = 14 Else
If Range("HY" & i).Value <> "" Then z = 13 Else
If Range("HN" & i).Value <> "" Then z = 12 Else
If Range("HC" & i).Value <> "" Then z = 11 Else
If Range("GR" & i).Value <> "" Then z = 10 Else
If Range("GG" & i).Value <> "" Then z = 9 Else
If Range("FV" & i).Value <> "" Then z = 8 Else
If Range("FK" & i).Value <> "" Then z = 7 Else
If Range("EZ" & i).Value <> "" Then z = 6 Else
If Range("EO" & i).Value <> "" Then z = 5 Else
If Range("ED" & i).Value <> "" Then z = 4 Else
If Range("DS" & i).Value <> "" Then z = 3 Else
If Range("DH" & i).Value <> "" Then z = 2 Else z = 1
'''ici, je copie/colle les plages de cellules dans les CV premières colonnes des nouvelles lignes
Select Case z
Case z <> 1
Rows("i+1:i+z-1").Insert Shift:=xlDown
Range("E" & i, "CV" & i).Select
Selection.Copy
Range("E" & i + 1, "CV" & i + z - 1).Select
ActiveSheet.Paste
'''ici, je copie/colle les plages de cellules dans les colonnes CW:FG des nouvelles lignes
x = 1
Do
x = x + 1
Range(Cells(i, 112 + 11 * (x - 2)), Cells(i, 122 + 11 * (x - 2))).Select
Selection.Copy
Range("CW" & i + x - 1, "DG" & i + x - 1).Select
ActiveSheet.Paste
Loop While x = z
Case z = 1
End Select
'''ici, je prépare le "i" à correspondre à une nouvelle ligne à étudier (je décale bien la future itération des Z-1 nouvelles lignes introduites)
compteur = z - 1 + compteur
Next
End Sub |
Merci !