VBa-macro qui tourne pas !

kamkam333 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
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à !

[B]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)! /B

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 !

1 réponse

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Bonjour,

regarde si cette maquette te convient (lignes 8 à 10 au lieu de 73)

http://www.cijoint.fr/cjlink.php?file=cj201009/cijxsq1v5N.xls

:-x
0