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)!
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager