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).RowOk 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 WithJe reçois ce message en exécutant le code à partir de " ThisWorkbook ", par contre il fonctionne bien à partir du " Module ".
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 SubQuelques 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.ClearContents4. 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.ClearContents4. 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 dAutre 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.
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 SubLe 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