Comment insérer toutes les 4 lignes des cellules copiés?

speslurp

Nouveau membre
Bonjour à tous!

Je sais que c'est surement facile a faire est je ne trouve que des bouts de code..
Je n'arrive pas a trouver la soluce a mon problème de macro sur excel ! je m'explique :
au départ sur 2 cellules j'ai par exemple :
rep1\rep2\
repA\repB\

Je voudrais insérer 2 lignes tout en collant une 3 ème partie a la fin du texte
rep1\rep2\rep10
rep1\rep2\rep11
rep1\rep2\rep12
repA\repB\repAA
repA\repB\repBB
repA\repB\repCC

J'ai fais une macro pour pouvoir insérer plusieurs lignes apres chaque ligne mais j'arrive pas a lui faire insérer directement les lignes + la 3 eme parti.. (rep10,rep11,rep12....)

je met quand meme a disposition mon code : pour pouvoir insérer 2 lignes :

[cpp]
Sub Inserer_lignes()
Dim x As Integer
derniereLigne = ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False
For x = derniereLigne To 1 Step -1

Rows(x).Insert Shift:=xlDown
Rows(x).Insert Shift:=xlDown

Next
End Sub
[/cpp]

Avez vous une idée ou des infos pour mieux me diriger ?
Merci
 

zeb

Modérateur
Quelques commentaires :

A la fin, pense à faire un [fixed]Application.ScreenUpdating = True[/fixed]
Par principe, déclare toutes tes variables et pour ne pas oublier, utilise :[fixed]Option Explicit[/fixed]

Ton code est astucieux ;) : le classique Step -1 quand on ajoute ou qu'on supprime des lignes.

Maintenant je n'ai pas bien compris comment tu construis ta "3ème partie".

A toi de voir. En attendant regarde ça :
[fixed]Application.ScreenUpdating = False
For x = derniereLigne To 1 Step -1
Rows(x).Insert Shift:=xlDown
Rows(x).Insert Shift:=xlDown
Cells(x + 0, Ta_Colonne) = Cells(x, Ta_Colonne) + Troisième_partie_10_ou_AA
Cells(x + 1, Ta_Colonne) = Cells(x, Ta_Colonne) + Troisième_partie_11_ou_BB
Cells(x + 2, Ta_Colonne) = Cells(x, Ta_Colonne) + Troisième_partie_12_ou_CC
Next
Application.ScreenUpdating = True[/fixed]
 

speslurp

Nouveau membre
Merci pour ta réponse! ;)

Depuit ce matin je m'acharne avec ce code.. :pt1cable:
En fait le plus dur c'est de l'expliquer.. et de conaitre le language moi je suis plus Vbs et VB

je vais recommencer pour que tout le monde comprend bien (meme moi j'ai du mal parfois! lol)

donc pour info : les lignes que je veux créer font réference a des chemins de répertoires ce qui donne pour le fichier de départ :
nomrep1\nomrep2
autrerep1\autrerep2

dans un premier temps je cherche a faire une copie de la 1ere ligne et l'inserer sur 2 ligne en dessous, ce qui donne :
(ca c'est facile.. :) )
nomrep1\nomrep2
nomrep1\nomrep2
nomrep1\nomrep2
autrerep1\autrerep2

voila le code :
[cpp]Sub test2()
Range("A1").Select
Selection.Copy
Range("A2:A3").Select
ActiveSheet.Paste
End Sub
[/cpp]

donc apres faut que j'arrive a faire de meme avec le reste (avec une boucle) :
nomrep1\nomrep2
nomrep1\nomrep2
nomrep1\nomrep2
autrerep1\autrerep2
autrerep1\autrerep2
autrerep1\autrerep2

Genre ce code...
[cpp]Sub Macro1()
Application.Goto Reference:="R1C1"
Selection.Copy
k = ActiveSheet.UsedRange.SpecialCells(xlLastCell).End(xlToLeft).Row + 3
Cells(k, 1).Select
ActiveSheet.Paste
End Sub[/cpp]


pour la 3 eme partie comme expliqué plus haut, je dois ajouter aux lignes déjà présente une "3 eme partie" :

nomrep1\nomrep2\1
nomrep1\nomrep2\2
nomrep1\nomrep2\3
autrerep1\autrerep2\1
autrerep1\autrerep2\2
autrerep1\autrerep2\3

Mom gros probleme actuellement c'est que quand je met la 3eme partie il supprime la ligne selectionné..
Je ne sais pas si c'est plus clair mais c'est vraiment chaud d'expliquer..
En tout cas merci a ceux qui peuvent m'aider!
 

zeb

Modérateur
Code:
Range("A1" ).Select
Selection.Copy
Range("A2:A3" ).Select
ActiveSheet.Paste
Beurk !

M'enfin. As-tu lu ce que je t'ai proposé ?
Code:
Range("A2") = Range("A1")
Range("A3") = Range("A1")
C'est quand même mieux.

En plus comme ça tu peux faire des variations :
Code:
Range("A2") = Range("A1") & "quelque chose en plus, une troisiè-me partie par exemple"
 

speslurp

Nouveau membre
OKi encore merci mais j'avais pas bien compris ton code :

[cpp]
Cells(x + 0, Ta_Colonne) = Cells(x, Ta_Colonne) + Troisième_partie_10_ou_AA
Cells(x + 1, Ta_Colonne) = Cells(x, Ta_Colonne) + Troisième_partie_11_ou_BB
Cells(x + 2, Ta_Colonne) = Cells(x, Ta_Colonne) + Troisième_partie_12_ou_CC
[/cpp]

Quand tu mets "Ta_Colonne", en fait toutes mes données sont sur une colonne la A..
Excuse moi mais je suis novice en macro...

Mais je vais bien bosser dessus!
merci
 

zeb

Modérateur
Eh, eh. Je ne fais jamais que des réponses sur lesquels il faut réfléchir ;)

Ce n'est pas très propre, ce que je te propose :[fixed]Cells( .. ) = Cells( .. ) + Autrechose[/fixed]

Je te propose de mieux faire, au choix :
[fixed]Cells( .. ).Text = Cells( .. ).Text & Autrechose
Cells( .. ).Formula = Cells( .. ).Formula & Autrechose
[/fixed]

Sers-toi de l'aide pour en découvrir d'autres
 

speslurp

Nouveau membre
Tout marche comme je voulais sauf un truc! et oui ca aurai était trop beau! ;)

C'est pour la suite que ca plante, il insère bien les 3 lignes avec le bon chemin la ou on a fait 3 "Rows(x).Insert Shift:=xlDown" ca c'est cool
le prob c'est la suite, quand x = 2 il réecrit sur la ligne 3 alors qu'il faudrait qu'il aille a la 6eme ligne en sautant la 5eme.

[cpp]
Cells(x + 1, 1) = Cells(x, 1) & "\rep1"
Cells(x + 2, 1) = Cells(x, 1) & "\rep2"
Cells(x + 3, 1) = Cells(x, 1) & "\rep3"
[/cpp]

Pour le bien il faut qu'a chaque fois que x = 5, 9, 13, 17...... il saute la ligne en question pour continuer
Je sais pas si je me suis fait bien comprendre?
Merci beaucoup pour les réponses, ca m'aide enormement!
 

zeb

Modérateur
Réfléchis !

Et sinon, regarde mieux ma proposition : j'ai écris x + 0, x + 1 et x + 2. Pourquoi ?
Pour faire joli, bien sûr. Il faut que tu remplace la ligne courante (x + 0 = x), et les deux suivantes (x + 1, x + 2)
 

speslurp

Nouveau membre
excuse mais j'ai mis Cells(x + 1, 1) parce que que je ne veux pas que la 1er ligne soit modifier
j'ai simplifié au maximum mon expliquation de mon prob...
donc au depart j'ai :

REP1
REP2
REP3

apres execution de la macro :

REP1
REP1\partie1
REP1\partie2
REP1\partie3

REP2\partie3
REP3\partie3

en rouge c'est nikel mais la boucle ne continue pas comme je voudrais.

[cpp]Sub Insérer_lignes()
Application.ScreenUpdating = False
Dim x As Integer
derniereLigne = ActiveSheet.UsedRange.Rows.Count
For x = derniereLigne To 1 Step -1

Cells(x + 1, 1) = Cells(x, 1) & "\partie1"
Cells(x + 2, 1) = Cells(x, 1) & "\partie2"
Cells(x + 3, 1) = Cells(x, 1) & "\partie3"

Next
Application.ScreenUpdating = True
End Sub[/cpp]

j'aimerai avoir ca :

REP1
REP1\partie1
REP1\partie2
REP1\partie3
REP2
REP2\partie1
REP2\partie2
REP2\partie3
REP3
REP3\partie1
REP3\partie2
REP3\partie3

Je sais j'ai peu etre embrouillé les esprits...
Si tu trouve que c'est trop facile et que je peu trouver tout seul je le fais, si je pose ce genre de question sur un forum c'est pour gagner du temps mais je sais tres bien qu'il faut pas en demander de trop, j'ai 10 doigts, j'espere ne pas abuser..
 

zeb

Modérateur
Trouve par toi-même !

Et sinon, j'espère que tu as mis 3 fois la ligne suivante dans la boucle For pour ajouter les lignes, sinon tu risque fort d'écraser en remontant, les lignes du bas par les lignes du haut au fur et à mesure : [fixed]Rows(x).Insert Shift:=xlDown[/fixed]

;) Comme je trouves que c'est trop facile, je te donne les explications sans te donner le code (quel *%¤# ce zeb quand même)
 

speslurp

Nouveau membre
Voila apres réflexion et en me traitant un peu j'ai obtenu ce que je voulais! :D
Un grand merci zeb pour ton aide!

[cpp]Sub Insérer_lignes()
Application.ScreenUpdating = False
Dim x As Integer
derniereLigne = ActiveSheet.UsedRange.Rows.Count
For x = derniereLigne To 1 Step -1

Rows(x).Insert Shift:=xlDown
Rows(x).Insert Shift:=xlDown
Rows(x).Insert Shift:=xlDown
Rows(x).Insert Shift:=xlDown

Cells(x + 0, 1) = Cells(x + 4, 1)
Cells(x + 1, 1) = Cells(x + 4, 1) & "\partie1"
Cells(x + 2, 1) = Cells(x + 4, 1) & "\partie2"
Cells(x + 3, 1) = Cells(x + 4, 1) & "\partie3"
Cells(x + 4, 1) = Cells(x + 4, 1) & "\partie4"

Next
Application.ScreenUpdating = True
End Sub[/cpp]
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 987
Membres
1 586 385
Dernier membre
beep84
Partager cette page
Haut