Copier coller des colonnes

Bonsoir,

J'ai deux fichier excel ma macro se lance depuis le premier (mon fichier1) avec une seule feuille1 et un autre fichier (mon fichier2) avec plusieurs feuilles (non déterminer)

je veux copier la colonne D de toutes les feuilles du classeur mon fichier2 et les coller vers la feuille1 du classeur monfichier1 dans la première cellule vide du colonne A

Merciiiiiii

Bonjour,

Voici un essai avec le fichier 2 ouvert après le fichier exécutant et sans autre classeur ouvert que ces 2 là :

Sub test()
for each ws in workbooks(2).worksheets
    dl = ws.cells(ws.rows.count, 4).end(xlup).row
    t = ws.columns(4).resize(dl).value
    with thisworkbook.sheets(1)
        nvl = .cells(.rows.count, 1).end(xlup).row + 1
        .cells(nvl, 1).resize(ubound(t)).value = t
    end with
next ws
end sub

Sinon, il faudra donner davantage de détails sur le fichier 2.

Cdlt,

Merci beaucoup pour votre code, ça fonctionne très bien j'ai ajouter cette ligne pour supprimer les lignes vides

Sub test()
For Each ws In Workbooks("test2.xlsx").Worksheets
    dl = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    t = ws.Columns(1).Resize(dl).Value
    With ThisWorkbook.Sheets(1)
        nvl = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(nvl, 1).Resize(UBound(t)).Value = t
    End With
Next ws
 On Error Resume Next
    [A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Bonsoir 3GB,

J'ai remarqué un truc pourquoi le code m'importe les nombres en éliminant les 0 : exemple tous mes nombres contiennent 5 chiffres "00005"-"00020"-"00100"

a l'importation il me mets "5" seulement et je dois garder ces 0 pour la vérification

Merci

Bonjour xxmedxx,

Le tableau t récupère la valeur et lorsque cette valeur est numérique, elle est évaluée et convertie automatiquement vraisemblablement.

Peux-tu essayer dans un premier temps en remplaçant les .value par des .text ?

Sinon, j'adapterais le code.

J'ai déjà essayé et ça m'envoie un erreur de débogage au niveau du macro.

Merci pour votre réactivité

Je viens de tester, en effet, ça ne passe pas.

Alors voici une première solution, avec la colonne A de destination au format texte :

Sub test()
with thisworkbook.sheets(1).range("A:A")
    .numberformat = "@"
    For Each ws In Workbooks("test2.xlsx").Worksheets
        dl = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        t = ws.Columns(1).Resize(dl).Value
        nvl = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(nvl, 1).Resize(UBound(t)).Value = t
    Next ws
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
end with
End Sub

Sinon, en voici une seconde avec transformation des valeurs à 5 chiffres :

Sub test()
with thisworkbook.sheets(1).range("A:A")
    For Each ws In Workbooks("test2.xlsx").Worksheets
        dl = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        t = CText(ws.Columns(1).Resize(dl).Value)
        nvl = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        .Cells(nvl, 1).Resize(UBound(t)).Value = t
    Next ws
    On Error Resume Next
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
end with
End Sub

function CText(ArrSrc)
for i = lbound(ArrSrc) to ubound(ArrSrc)
    if ArrSrc(i, 1) like "#####" then ArrSrc(i, 1) = "'" & ArrSrc(i, 1)
next i
CText = ArrSrc
end function

La première est plus simple et évite toute confusion puisque le format est homogène.

Cdlt,

Salut 3GB,

Les deux codes génèrent des erreurs de débogage le premier au niveau de cette ligne : .Cells(nvl).Resize(UBound(t)).Value = t

le deuxième : for i = lbound(t) to ubound(t)

merci

Salut xxmedxx,

J'ai mis à jour les 2 codes, je pense qu'ils devraient marcher tous les 2 désormais.

Cdlt,

C'est résolu avec un petit changement merci beaucoup 3GB

Rechercher des sujets similaires à "copier coller colonnes"