VBA - Coller une ligne si colonne vide

Bonjour,

Après une journée de recherche, je m'en remets à vous. Je précise que je suis très débutant en macro et que j'ai enregistré ce code via l'enregistreur de macro.

Ce code me permet de copier des lignes d'un onglet selon condition (Colonne T contient "x") et de coller ces lignes dans un autre onglet.

Le code fonctionne. Seulement je souhaiterais conserver le contenu déjà présent dans l'onglet de destination, sachant qu'il contient des formules sur toutes les colonnes sauf colonne C.

Je souhaiterais donc une adaptation de ce code qui dirait qui permettrait de "coller les lignes sur la 1ère ligne dont la colonne C est vide".

Je pense que mon erreur se situe à ce niveau du code mais je n'arrive pas à trouver la solution:

Range("10:10000").Select
    ActiveSheet.Paste

Voici le code entier:

Sub Transfert_vers_BACKUP()
'
' Transfert_vers_BACKUP Macro
'

'
    ActiveSheet.Range("$A$9:$CM$10000").SpecialCells(xlCellTypeVisible).AutoFilter Field:=46, Criteria1:="x"
    ActiveWindow.SmallScroll Down:=-18

'
    Rows("10:10000").SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Sheets("Carnet de commande  BACKUP").Select
    ActiveWindow.SmallScroll Down:=-54
    Range("10:10000").Select
    ActiveSheet.Paste
    Sheets("Carnet de commande ").Select
    Range("A10").Select

'
    Rows("10:10000").SpecialCells(xlCellTypeVisible).Select
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("AT10:AT10000").SpecialCells(xlCellTypeVisible).Select
    Selection.ClearContents

'
    ActiveSheet.ShowAllData
    Range("A10").Select
End Sub

Merci d'avance à tous les "master" de ce forum.

Bonjour

Essayez ceci

Sub Transfert_vers_BACKUP()

With ActiveSheet
    .Range("$A$9:$CM$10000").SpecialCells(xlCellTypeVisible).AutoFilter Field:=46, Criteria1:="x"

    With .Rows("10:10000").SpecialCells(xlCellTypeVisible)
        .Copy Sheets("Carnet de commande  BACKUP").Cells(Range("C" & Rows.Count).End(xlUp).Row + 1, 3)
        .Copy Sheets("Carnet de commande ").Cells(Range("C" & Rows.Count).End(xlUp).Row + 1, 3)

        With .Font
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
        End With
        With .Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End With
    .Range("AT10:AT10000").SpecialCells(xlCellTypeVisible).ClearContents
    .ShowAllData
End With
End Sub

Le code fonctionne. Seulement je souhaiterais conserver le contenu déjà présent dans l'onglet de destination, sachant qu'il contient des formules sur toutes les colonnes sauf colonne C.

C'est dans les deux feuilles Carnet de commande ?

Ok je vais essayer merci !

En fait c'est à copier du "Carnet de commande" vers le "Carnet de commande BACKUP" uniquement.

Et conserver les données déjà présentes dans le second (destination). En gros, coller le texte à la suite dans la 1ere ligne donc la colonne C est vide.

En fait c'est à copier du "Carnet de commande" vers le "Carnet de commande BACKUP" uniquement.

Alors ce n'est pas bon ce que je vous ai donné

Donc ceci .Range("$A$9:$CM$10000") est sur la feuille Carnet de commande et à copier sur la feuille BAckup ?

Oui il faut qu'il copie uniquement les lignes actives filtrées dans le carnet de commande ver le backup d'où le "SpecialCells(xlCellTypeVisible)"

Re

essayez comme ceci alors

Sub Transfert_vers_BACKUP()

With Sheets("Carnet de commande ")
    .Range("$A$9:$CM$10000").SpecialCells(xlCellTypeVisible).AutoFilter Field:=46, Criteria1:="x"

    With .Rows("10:10000").SpecialCells(xlCellTypeVisible)
        .Copy Sheets("Carnet de commande  BACKUP").Cells(Sheets("Carnet de commande  BACKUP").Range("C" & Rows.Count).End(xlUp).Row + 1, 3)

        With .Font
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
        End With
        With .Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End With
    .Range("AT10:AT10000").SpecialCells(xlCellTypeVisible).ClearContents
    .ShowAllData
End With
End Sub

Rem : vous devriez éviter les espaces dans le nom des feuilles. Il n'y a rien de plus mauvais et avec VBA c'est un peu la porte ouverte au bug...

Nommez comme ceci par exemple --> "Carnet-de-commande" plutot que ceci "Carnet de commande "
et comme ceci --> "Carnet-de-commande_Backup"

Si ok, pensez à

Cordialement

Ok c'est noté pour les espaces.

Et un grand merci pour ton aide.

Parcontre après avoir coller le code j'ai ce message:

image image

Bon ça fonctionne en modifiant:

.Copy Sheets("Carnet de commande BACKUP").Cells(Sheets("Carnet de commande BACKUP").Range("C" & Rows.Count).End(xlUp).Row + 1, 3)

Par

.Copy Sheets("Carnet de commande BACKUP").Cells(Sheets("Carnet de commande BACKUP").Range("C" & Rows.Count).End(xlUp).Row + 1, 1)

Par contre en destination ça ne me colle pas les formule, ça colle les valeurs. Possible de coller en conservant les formules ?

OK. Bon sans un fichier ce n'est jamais simple

Quelle est la plage à copier vers l'onglet Backup ? --> Est-ce ceci Range("$A$9:$CM$10000") ?


Edit : avec la modification que vous donnez cela ne tient pas compte de la colonne C dont vous parlez mais de la colonne A

Par contre en destination ça ne me colle pas les formule,

L'instruction COPY comme je vous ai donné colle tout y compris les formules. Pour ne copier que les valeurs il faut utilise la commande paste special

Maintenant les formules dont vous parlez sont bien dans la feuille copiée ?

Les formules sont dans la feuille copiée et dans celle de destination. Avec le code actuel une fois que la macro a tournée il n'y a plus les formules dans la feuille de destination, hors je voudrais les conserver.

Feuille copiée:

image

Feuille de destination:

image

Avec le code actuel une fois que la macro a tournée il n'y a plus les formules dans la feuille de destination, hors je voudrais les conserver.

Le code copie les formules. je vous l'ai déjà écrit. Sans formule la ligne de code serait différent.
Votre problème se situe ailleurs

Dans vos deux vues, je vois pourtant deux formules... une avec K1343 l'autre avec K10

Ok alors je ne comprends pas.

Oui car pour le screenshot je n'ai pas sélectionner la même celulle

Oui car pour le screenshot je n'ai pas sélectionner la même celulle

Oui alors ce n'est pas facile

A vous de voir mais peut-être que le plus simple de me donner le fichier ou tout au moins un fichier qui représente ce que vous avez.

Si données confidentielles, vous pouvez toujours anonymiser --> https://www.excel-pratique.com/fr/utilitaires/anonymisation-donnees ou flouter --> https://www.excel-pratique.com/fr/utilitaires/flouter-image ou alors en MP

re

Essayez le code comme ceci :

Sub Transfert_vers_BACKUP()

With Sheets("Carnet de commande")
    .Range("$A$9:$CM$10000").SpecialCells(xlCellTypeVisible).AutoFilter Field:=46, Criteria1:="x"

    With .Range("$A$10:$CM$10000").SpecialCells(xlCellTypeVisible)
        .Copy
        With Sheets("Carnet de commande  BACKUP").Cells(Sheets("Carnet de commande  BACKUP").Range("C" & Rows.Count).End(xlUp).Row + 1, 1)
            .PasteSpecial Paste:=xlPasteValues
            .PasteSpecial Paste:=xlPasteFormulas
        End With
        With .Font
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
        End With
        With .Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End With
    .Range("AT10:AT10000").SpecialCells(xlCellTypeVisible).ClearContents
    .ShowAllData
End With
End Sub

Crdlt

Parfait, ça fonctionne ! Merci pour le temps passé et pour les conseils.

Mince non un petit détail, ça m'enlève la couleur dans l'onglet BACKUP alors que je voudrais la conserver ^^

Merci

re,

Mince non un petit détail, ça m'enlève la couleur dans l'onglet BACKUP alors que je voudrais la conserver ^^

Remplacez les deux pastespecial par ceci

.PasteSpecial Paste:=xlPasteAll

Cordialement

Rechercher des sujets similaires à "vba coller ligne colonne vide"