Macro pour copier/insérer des lignes

Résolu/Fermé
lienlien34 Messages postés 5 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 22 avril 2013 - 18 avril 2013 à 15:43
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 avril 2013 à 17:01
Bonjour tout le monde,

j'essaye d'automatiser dans une macro une démarche assez simple.

J'ai une feuille de calcul avec x lignes et je voudrais que ma macro me prenne chaque ligne , dont la cellule à la colonne 3 est non vide, pour me l'insérer dans la ligne suivante. J'en appelle à votre indulgence, je suis nouveau en programmation sous vba^^.

Alors voilà ma macro :

Sub Duplicate()
Dim r As Integer

Sheets("Feuil1").Select

For r = 17 To ActiveSheet.UsedRange.Rows.Count
If Cells(r, 3) <> "" Then


Rows("r:r").Select
Selection.Copy
Rows("r+1:r+1").Select
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False


End If

Next r


End Sub


Si vous avez une petite idée pour me débloquer, c'est avec grand plaisir que je vous invite à la partager :)
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 18/04/2013 à 16:17
Bonjour,

1- r étant une variable, on ne l'entoure pas de guillemets
2- Rows("r:r") n'existe pas, il convient d'utiliser Rows(r)
3- Eviter les .Select et les copy paste.
La syntaxe pour un copié-collé dans une même feuille est :
Range(machin).Copy Range(truc)
Donc :
remplacer :
Rows("r:r").Select  
Selection.Copy  
Rows("r+1:r+1").Select etc...
par :
Rows(r).Copy Rows(r+1)



Cordialement,
Franck P
0
lienlien34 Messages postés 5 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 22 avril 2013
18 avril 2013 à 16:26
Merci pour ta réponse, j'essaye ça :

Sub Duplicate()
Dim r As Integer
Dim c As Integer


Sheets("Feuil1").Select


For r = 17 To ActiveSheet.UsedRange.Rows.Count


If Cells(r, 3) <> "" Then

Rows(r).Copy Rows(r + 1)
Selection.Insert Shift:=xlDown
Application.CutCopyMode = False


End If


Next r


End Sub

Mais le pb est que quand je la lance, rien ne se passe :/
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 avril 2013 à 16:34
Je n'ai fait que te donner des pistes.
Tu dis :
Si j'ai quelque chose en colonne C, je copies la ligne et l'insères en dessous. Donc la ligne suivante contient quelque chose en colonne C et donc on réinserre.....
C'est pas bon tout ça.
Si tu veux réaliser ce que tu souhaites, il convient de boucler de la dernière à la première ligne.
Essaye quelque chose comme ceci :
Sub Duplicate()
Dim r As Integer
Dim c As Integer

Sheets("Feuil1").Select
For r = ActiveSheet.UsedRange.Rows.Count To 17 Step -1
    If Cells(r, 3) <> "" Then
        Rows(r).Copy
        Rows(r + 1).Insert Shift:=xlDown
    End If
Next r
End Sub

ps : à quoi te sert c As Integer???
0
lienlien34 Messages postés 5 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 22 avril 2013
18 avril 2013 à 16:42
j'avais fait une double boucle pour essayer de réaliser la manip, puis je l'avais enlever mais j'ai oublié de virer le c as integer (variable de ma deuxieme boucle)
0
lienlien34 Messages postés 5 Date d'inscription jeudi 18 avril 2013 Statut Membre Dernière intervention 22 avril 2013
18 avril 2013 à 16:56
bon je l'ai adapté et ça marche niquel !! merci beaucoup pour ta réactivité !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 avril 2013 à 17:01
de rien.
A+
0