Microsoft 365 Copier/Coller VBA dans cellules vides

  • Initiateur de la discussion Initiateur de la discussion gaelle31
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gaelle31

XLDnaute Nouveau
Bonjour,

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.

Merci beaucoup pour votre aide.
 

Pièces jointes

Hello
un début de réponse ici
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)
    End If
Next i
End Sub
 
Hello
un début de réponse ici
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)
    End If
Next i
End Sub
Merci beaucoup !

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


En revanche,
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
Merci beaucoup !

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.

Merci d'avance.
 

Pièces jointes

elles ne restent pas vide.. elles sont EFFACEES par la macro..
ce sont les lignes qui ont été copiées collées..
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...
 
sinon.. je sens que le besoin ca va etre ca en fait:
VB:
Sub trier()

    Range("B6:J41").Select

    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Add Key:=Range("C6:C41"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("RECAP").Sort
        .SetRange Range("B6:J41")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub
 
sinon.. je sens que le besoin ca va etre ca en fait:
VB:
Sub trier()

    Range("B6:J41").Select

    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("RECAP").Sort.SortFields.Add Key:=Range("C6:C41"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("RECAP").Sort
        .SetRange Range("B6:J41")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub
Ca marche ! Merci beaucoup 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
20
Affichages
872
Retour