J'essaie de constituer une macro VBA me permettant de dire : si la cellule en colonne C n'est pas vide, alors les informations contenues dans cette ligne sont copiée dans la première ligne dont la cellule C est vide.
De plus, je souhaiterais qu'il s'agisse d'un copier/coller (pas de suppression de lignes).
J'ai commencé à constituer une macro. Mais, uniquement la dernière donnée remonte et elle efface les précédentes.
De plus, les cellules en colonnes E, H et J contiennent des formules pour lesquelles je ne souhaiterais pas que le copier/coller s'applique.
Sub Copiercoller2()
For i = 22 To 7 Step -1
If Range("C" & i) <> "" And Range("C" & i - 1) = "" Then
Range("A" & i).Resize(1, 3).Copy Destination:=Range("A" & i - 1)
Range("F" & i).Resize(1, 2).Copy Destination:=Range("F" & i - 1)
Range("H" & i).AutoFill Destination:=Range("H" & i - 1 & ":H" & i)
End If
Next i
End Sub
Sub Copiercoller2()
For i = 22 To 7 Step -1
If Range("C" & i) <> "" And Range("C" & i - 1) = "" Then
Range("A" & i).Resize(1, 3).Copy Destination:=Range("A" & i - 1)
Range("F" & i).Resize(1, 2).Copy Destination:=Range("F" & i - 1)
Range("H" & i).AutoFill Destination:=Range("H" & i - 1 & ":H" & i)
End If
Next i
End Sub
Sachant que je souhaiterais que les cellules copier se déplacent vers la première cellule vide. Auriez-vous un élément de réponse me permettant d'effacer les données des cellules copiées s'il-vous-plait ?
suffit de rajouter les clear contents qui vont bien,
VB:
Sub Copiercoller2()
For i = 22 To 7 Step -1
If Range("C" & i) <> "" And Range("C" & i - 1) = "" Then
Range("A" & i).Resize(1, 3).Copy Destination:=Range("A" & i - 1)
Range("F" & i).Resize(1, 2).Copy Destination:=Range("F" & i - 1)
Range("H" & i).AutoFill Destination:=Range("H" & i - 1 & ":H" & i)
Range("A" & i).Resize(1, 3).ClearContents
Range("F" & i).Resize(1, 2).ClearContents
End If
Next i
End Sub
J'ai repris votre macro et constitué la VBA suivante :
Sub Copiercoller2()
For i = 22 To 7 Step -1
If Range("C" & i) <> "" And Range("C" & i - 1) = "" Then
Range("A" & i).Resize(1, 3).Copy Destination:=Range("A" & i - 1)
Range("A" & i).Resize(1, 3).ClearContents
Range("F" & i).Resize(1, 2).Copy Destination:=Range("F" & i - 1)
Range("F" & i).Resize(1, 2).ClearContents
Range("H" & i).AutoFill Destination:=Range("H" & i - 1 & ":H" & i)
End If
Next i
End Sub
suffit de rajouter les clear contents qui vont bien,
VB:
Sub Copiercoller2()
For i = 22 To 7 Step -1
If Range("C" & i) <> "" And Range("C" & i - 1) = "" Then
Range("A" & i).Resize(1, 3).Copy Destination:=Range("A" & i - 1)
Range("F" & i).Resize(1, 2).Copy Destination:=Range("F" & i - 1)
Range("H" & i).AutoFill Destination:=Range("H" & i - 1 & ":H" & i)
Range("A" & i).Resize(1, 3).ClearContents
Range("F" & i).Resize(1, 2).ClearContents
End If
Next i
End Sub
Pour faire remonter les données de la colonne I, j'ai également rajouté deux données :
Sub Copiercoller2()
For i = 22 To 7 Step -1
If Range("C" & i) <> "" And Range("C" & i - 1) = "" Then
Range("A" & i).Resize(1, 3).Copy Destination:=Range("A" & i - 1)
Range("F" & i).Resize(1, 2).Copy Destination:=Range("F" & i - 1)
Range("I" & i).Resize(1, 1).Copy Destination:=Range("I" & i - 1)
Range("H" & i).AutoFill Destination:=Range("H" & i - 1 & ":H" & i)
Range("A" & i).Resize(1, 3).ClearContents
Range("F" & i).Resize(1, 2).ClearContents
Range("I" & i).Resize(1, 1).ClearContents
End If
Next i
End Sub
Cependant, lorsque je lance la macro, sur mon fichier Des cellules restent vides (lignes 7 et 10) => cf. pièce jointe (après macro lancée...).
Auriez-vous une explication à m'apporter s'il-vous-plait ? Je ne comprends pas d'où peut venir le probleme.
Je m'explique, je suis obligée de lancer plusieurs fois la macro pour faire remonter toutes les données en haut de la sélection. Or, je souhaiterais que toutes mes données se mettent en haut automatiquement, sans avoir besoin de lancer plusieurs fois la macro pour tout faire remonter.
En d'autres termes, je ne souhaite pas qu'il y ait des lignes vides entre chaque données...