Coller des données sur la dernière cellule vide d'une autre feuille

Bonjour,

Sur le code ci-dessous, au niveau de la dernière cellule vide de la colonne (A) de la feuille ("Type 1 & 3") je n'arrive pas à coller les données de la feuille ("A") du classeur ("Type 3.xls") et je dois exécuter le code deux fois pour avoir le bon résultat.

Même à mon avis le code est bon!!!

'.....

'Copier Type 1 sur fichier Type 1 et Type 3
    Workbooks("Type 1.xls").Sheets("A").Activate

    Columns("A:D").Select
    Selection.Copy _
            Destination:=Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Columns("A:D")

'Copier Type 3 sur fichier Type 1 et Type 3
    Workbooks("Type 3.xls").Sheets("A").Activate

    Range("A2:D" & LastRow).Select
    Selection.Copy _
            Destination:=Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

'.....

Merci par avance pour votre réponse

Bonjour

Essayez comme ceci :

'Copier Type 1 sur fichier Type 1 et Type 3
Workbooks("Type 1.xls").Sheets("A").Columns("A:D").Copy Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Columns("A:A")

'Copier Type 3 sur fichier Type 1 et Type 3
Workbooks("Type 3.xls").Sheets("A").Range("A2:D" & LastRow).Copy Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

NB : vous devriez supprimer tous ces espaces dans le nom de fichier et feuille. Remplacez les par un souligné ou un trait. Cela évite des erreurs.

Cordialement

Bonjour,

Merci pour votre réponse, mails il colle toujours sur la feuille ("Type 1 & 3") les données de la feuille ("Type 1.xls") et ne colle pas ceux de ("Type 3.xls") et exécute le reste du code sans aucun blocage.

La variable Lastrow est définie dans votre code ?

Oui bien sur

LastRow = Range("A" & Rows.Count).End(xlUp).Row

Ok mais dans cette instruction on ne sait pas sur quelle feuille vous cherchez cette ligne

Sans voir tout le code peut être faire ceci à la place de la partie qui ne fonctionne pas

With Workbooks("Type 3.xls").Sheets("A")
   lastrow = .Range("A" & .Rows.Count).End(xlUp).Row
   .Range("A2:D" & lastrow).Copy _
   Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With

Je reçois ce message en exécutant le code à partir de " ThisWorkbook ", par contre il fonctionne bien à partir du " Module ".

image
12type-1.xls (35.50 Ko)
10type-3.xls (36.00 Ko)

Ci-dessous le code presque entier

Sub Identifier_les_clients_suspendu()
'
' Identifier_les_clients_suspendu Macro
'

' Préparation des clients Type 1 et Type 3 sur un fichier "Type 1 et Type 3"

    LastRow = Range("A" & Rows.Count).End(xlUp).Row

    'Ouverture du fichier Type 1
    Workbooks.Open ("C:\Users\dev\Desktop\Type 1.xls")
    Workbooks("Type 1.xls").Sheets("A").Activate

    'Adaptation d'afficahge
    ActiveWindow.Zoom = 80

    'Insértion champs Type
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    'Ajouter le "Type 1" dans la colonne "B"
    Workbooks("Type 1.xls").Sheets("A").Activate
    Range("B1") = "Type"
    Range("B2:" & "B" & LastRow).Select

    Dim s As Long

        For s = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

            If Range("B" & s) = "" Then
            Range("B" & s) = "Type 1"
            End If

        Next s

    'Ajustement des colonnes
    Columns("A:D").Select
    Selection.AutoFilter
    Columns("A:D").EntireColumn.AutoFit

    'Ouverture du fichier Type 3
    Workbooks.Open ("C:\Users\dev\Desktop\Type 3.xls")
    Workbooks("Type 3.xls").Sheets("A").Activate

    'Adaptation d'afficahge
    ActiveWindow.Zoom = 80

    'Convertir en nombre
    Range("B2:" & "B" & LastRow).Select

    Dim n As Long

        For n = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

            Cells(n, 2).NumberFormat = "0"

        Next n

    'Ajouter le "Type 3" dans la colonne "B"
    Workbooks("Type 3.xls").Sheets("A").Activate
    Range("B2:" & "B" & LastRow).Select

    Dim d As Long

        For d = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

            If Range("B" & d) = 3 Then
            Range("B" & d) = "Type 3"
            End If

        Next d

    'Ajustement des colonnes
    Columns("A:D").Select
    Selection.AutoFilter
    Columns("A:D").EntireColumn.AutoFit

    'Sauvegarder les deux fichier Type1 et Type3
    Workbooks("Type 1.xls").Save
    Workbooks("Type 3.xls").Save

    'Ouverture et réinitialisation du fichier Type 1 et Type 3
    Workbooks.Open ("C:\Users\dev\Desktop\Type 1 et Type 3.xlsx")
    Sheets("Type 1 & 3").Select

    Range("A:D").Select
    Selection.Delete

    Columns("Z:Z").Select
    Selection.Copy
    Columns("A:D").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A:D").Select
    Selection.ClearContents

    'Copier Type 1 sur fichier Type 1 et Type 3
    Workbooks("Type 1.xls").Sheets("A").Columns("A:D").Copy Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Columns("A:A")

    'Copier Type 3 sur fichier Type 1 et Type 3

    With Workbooks("Type 3.xls").Sheets("A")

    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
   .Range("A2:D" & LastRow).Copy _
    Workbooks("Type 1 et Type 3.xlsx").Sheets("Type 1 & 3").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

    End With

End Sub

Quelques questions :

1. Dans quel fichier doit se placer votre macro ? type1 et type 3 ?
2. Sinon déjà la première ligne du code, Lastrow --> on ne sait pas sur quelle feuille on se trouve. Je vous ai parlé dans un post précédent
3. dans cette partie de code,

3.1 pourquoi copiez-vous la colonne Z vers A
3.2 pourquoi supprimez-vous deux fois les données des colonnes A à D

Sheets("Type 1 & 3").Select

    Range("A:D").Select
    Selection.Delete
    Columns("Z:Z").Select
    Selection.Copy
    Columns("A:D").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A:D").Select
    Selection.ClearContents

4. Dans cette ligne --> pourquoi mettez-vous un format sur la colonne B qui plus loin dans le code va contenir Type 3 ?

Cells(n, 2).NumberFormat = "0"

1. Dans quel fichier doit se placer votre macro ? type1 et type 3 ?

  • Ce sont deux fichiers à mettre leur contenu dans la feuille("Type 1 & 3") du fichier ("Type 1 et Type 3.xlsx").

2. Sinon déjà la première ligne du code, Lastrow --> on ne sait pas sur quelle feuille on se trouve. Je vous ai parlé dans un post précédent

  • LastRow je la déclare au début du SUB et je l'appel dans le sous code voulu de la même SUB, es faux?

3. dans cette partie de code,

3.1 pourquoi copiez-vous la colonne Z vers A

  • Pour mise en forme des colonnes A-D comme celle de Z vide.

3.2 pourquoi supprimez-vous deux fois les données des colonnes A à D

  • Delete pour données et ClearContents pour mise en forme comme sorte de réinitialisation des colonnes A-D.
Sheets("Type 1 & 3").<b>Select</b>

    Range("A:D").<b>Select</b>
    Selection.Delete
    Columns("Z:Z").<b>Select</b>
    Selection.Copy
    Columns("A:D").<b>Select</b>
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A:D").<b>Select</b>
    Selection.ClearContents

4. Dans cette ligne --> pourquoi mettez-vous un format sur la colonne B qui plus loin dans le code va contenir Type 3 ?

  • Au début y avait "03" pour la convertir en nombre "3" pour par la suite lui demander de changer chaque "03" par "Type3".
Cells(n, 2).NumberFormat = "0"

Bonjour

Pt 1 : J'avais compris cela mais cela ne répond pas à la question de savoir où la macro que vous avez postée doit se trouver. Dans quel fichier ? Aucun des fichiers ne contenaient le code que vous avez posté. Dès lors, quand vous dites que cela fonctionne, je dois savoir depuis quel fichier vous exécutez le code.
Désolé de cette question mais dans votre code, vous ouvrez le fichier Type 1 & Type 3, cela peut laisser à penser que votre macro est dans un 4ieme fichier.

Pt 2 : Oui ce n'est pas juste. Mais je vais adapter le code

Pt 3 : Ce n'est pas nécessaire puisque le fait de supprimer les colonnes de A à D. La mise en forme est remise par défaut.

Pt4 : Donc le fichier Type 3.xls contient toujours la colonne B avec 03 ??

Autre question, au départ :
- le fichier Type 1 contient toujours uniquement des données dans les colonnes A à C
- le fichier Type 3 contient des données dans les 4 colonnes (A à D) avec le chiffre 3 dans la colonne B ?
Désolé de cette question mais les deux fichiers postés contiennent déjà 4 colonnes.

Bonjour,

Tout d'abord, merci pour vos réponses et suivis.

Pt 1 : J'avais compris cela mais cela ne répond pas à la question de savoir où la macro que vous avez postée doit se trouver. Dans quel fichier ? Aucun des fichiers ne contenaient le code que vous avez posté. Dès lors, quand vous dites que cela fonctionne, je dois savoir depuis quel fichier vous exécutez le code.
Désolé de cette question mais dans votre code, vous ouvrez le fichier Type 1 & Type 3, cela peut laisser à penser que votre macro est dans un 4ieme fichier.

  • Oui y a un 4ème fichier depuis lequel j'exécute la macro pour avoir tout le résultat voulu de ce bizarre code .

Pt 2 : Oui ce n'est pas juste. Mais je vais adapter le code

  • Ok, je m'en doutais aussi.

Pt 3 : Ce n'est pas nécessaire puisque le fait de supprimer les colonnes de A à D. La mise en forme est remise par défaut.

  • Ok, c'est noté.

Pt4 : Donc le fichier Type 3.xls contient toujours la colonne B avec 03 ??

  • Non, c'est déjà modifié en "Type 3" avec le code correspondant, au total 4 colonnes.
'Ajouter le "Type 3" dans la colonne "B"
    Workbooks("Type 3.xls").Sheets("A").Activate
    Range("B2:" & "B" & LastRow).Select

    Dim d As Long

        For d = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

            If Range("B" & d) = 3 Then
            Range("B" & d) = "Type 3"
            End If

        Next d

Autre question, au départ :
- le fichier Type 1 contient toujours uniquement des données dans les colonnes A à C

  • Non, j'ai déjà inséré la colonne B avec "Type 1", au total 4 colonnes.
'Insértion champs Type
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

    'Ajouter le "Type 1" dans la colonne "B"
    Workbooks("Type 1.xls").Sheets("A").Activate
    Range("B1") = "Type"
    Range("B2:" & "B" & LastRow).Select

    Dim s As Long

        For s = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1

            If Range("B" & s) = "" Then
            Range("B" & s) = "Type 1"
            End If

        Next s

- le fichier Type 3 contient des données dans les 4 colonnes (A à D) avec le chiffre 3 dans la colonne B ?

  • Oui, c'est déjà modifié en "Type 3" comme indiqué ci-dessus.

Désolé de cette question mais les deux fichiers postés contiennent déjà 4 colonnes.

Si vous avez un 4ieme fichier cela change tout. Je pensais que vous mettiez le code dans le fichier Type 1 & 3. Mais bon c'est noté

Pt 4 : vous n'avez pas compris la question. je ne vous parle pas du code mais de votre fichier à l'état initial. Je sais que votre code le fait mais je veux savoir comment votre fichier est avant son exécution. Votre fichier Type 1 posté comporte déjà 4 colonnes. Si j'exécute votre code il y en aura 5 (deux fois la colonne B).

Pt Autre question : idem ce que je vous ai dit ci-dessus au point 4.

Bref il me faut savoir comment sont les fichiers Type 1 et type 3 avant l'exécution du code.

Ci-joint les deux fichiers Type 1 et Type 3 .xls à l'état initial.

7type-1.xls (34.50 Ko)
11type-3.xls (44.50 Ko)

Bonjour,

Merci de deux fichiers.
Votre code en retour à placer dans votre 4ieme fichier -> Celui depuis lequel vous l'exécutez

Sub Identifier_les_clients_suspendu() 'Identifier_les_clients_suspendu Macro

Dim chemin As String

' Préparation des clients Type 1 et Type 3 sur un fichier "Type 1 et Type 3"

    'Definir le repertoire
    chemin = "C:\Users\dev\Desktop\"
    Workbooks.Open chemin & "type-1.xls"

    'Ouverture et traitement du fichier Type 1
    With Workbooks("Type-1.xls").Sheets("A")
        'Insertion champ Type
        .Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("B1") = "Type"

        Dim s As Integer
        'Ajouter le "Type 1" dans la colonne "B"
        For s = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
            .Range("B" & s) = "Type 1"
        Next s

        'Ajustement des colonnes
        .Columns("A:D").AutoFilter
        .Columns("A:D").EntireColumn.AutoFit
    End With

    'Ouverture et traitement du fichier Type 3
    Workbooks.Open chemin & "Type-3.xls"

    With Workbooks("Type-3.xls").Sheets("A")

        'Ajouter le "Type 3" dans la colonne "B"
        For s = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
            '.Cells(s, 2).NumberFormat = "0" 'désactivé car inutile pour le code
            .Range("B" & s) = "Type 3"
        Next s

        'Ajustement des colonnes
        .Columns("A:D").AutoFilter
        .Columns("A:D").EntireColumn.AutoFit
    End With

        'Sauvegarder les deux fichier Type1 et Type3
    Workbooks("Type-1.xls").Save
    Workbooks("Type-3.xls").Save

    'Ouverture et reinitialisation du fichier Type 1 et Type 3
    Workbooks.Open chemin & "Type-1-et-Type-3.xlsx"

    With Workbooks("Type-1-et-Type-3.xlsx").Sheets("Type 1 & 3")
        .Range("A:D").Delete

        'Copier Type 1 sur fichier Type 1 et Type 3
        Workbooks("Type-1.xls").Sheets("A").Columns("A:D").Copy .Columns("A:A")

        'Copier Type 3 sur fichier Type 1 et Type 3
        Workbooks("Type-3.xls").Sheets("A").Range("A1").CurrentRegion.Copy .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    End With
End Sub

Le code ouvre :
- les fichiers Type-1.xls, Type-3.xls et mets les données à jour en colonne B et sauvegarde les deux fichiers
- le fichier Type-1-et-Type-3.xlsx et copie les données des deux autres fichiers ouverts

Cordialement

C'est bien exécuté mais juste pour le fichier Type-3 il le colle avec la ligne en-tête sur le fichier Type-1-et-Type-3.xlsx.

Bonjour

Pour fin simple, à la fin du code, vous pouvez remplacer cette ligne

 Workbooks("Type-3.xls").Sheets("A").Range("A1").CurrentRegion.Copy .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 

par celle-ci

 Workbooks("Type-3.xls").Sheets("A").Range("A1").CurrentRegion.Offset(1, 0).Copy .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 

Le code va aussi copier une ligne vide en dessous du tableau mais cela n'a pas d'importance ici.

Cordialement

Le code fonctionne parfaitement

Merci infiniment Dan pour tes réponses, ton suivi et ton implication

A la prochaine

@+ Dev007

Rechercher des sujets similaires à "coller donnees derniere vide feuille"