Macro pour copier/insérer des lignes
Résolu
lienlien34
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
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 :)
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:
- Macro pour copier/insérer des lignes
- Insérer video powerpoint - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Insérer signature word - Guide
- Comment insérer des points de suite sur word - Guide
- Insérer liste déroulante excel - Guide
2 réponses
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 :
Cordialement,
Franck P
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
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 :/
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 :/
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 :
ps : à quoi te sert c As Integer???
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???