VBA : Importer des colonnes de différentes feuilles vers un autre fichier

9prix-produit.xlsx (18.61 Ko)

Bonjour,

Merci pour ce forum c'est une véritable mine d'infos !

Je vous expose mon problème, j'aimerais trouver un code vba pour importer des colonnes de différentes feuilles vers un autre fichier

Ci-joint des documents pour mieux vous illustrer :

je voudrais tout d'abord créer une nouvelle feuille dans mon fichier : prix produit

ensuite copier les colonnes B de chaque feuille du fichier : données produits (sachant que ces colonnes seront mise à jour le nombre de ligne va augmenter)

pour enfin les coller dans la feuille nouvellement créée.

Est ce que vous pourriez m'aider à trouver un code faisant tout cela ?

J'ai déjà avancé sur la création de la feuille

Sub importation()

Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"

End Sub

Salut,

Ta demande n’est pas de plus précise et tes fichiers sont un peu bizarres

J’ai repris ton fichier pour la base de données, je l’ai renommé ‘’Données’’ et j’ai un peu modifié ces données de base.

J’ai ensuite considéré que tu avais ton fichier ‘’Prix-produit’’ dans le même dossier de ton arborescence que le fichier ‘’Données’’.

Si tu ouvres le fichier ‘’Prix-produit’’ et que tu lances la macro placée derrière le bouton ‘’Report sur nouvelle feuille’’, une nouvelle feuille ‘’Data’’ est créée, son numéro est incrémenté (‘’Data001’’, ‘’Data002’’, etc.) et les données du fichier ‘’Données’’ y sont reportées.

Dans la feuille nouvellement créée, le nom de la feuille passée en revue du fichier ‘’Données’’ est inscrite dans la ligne 1. On voit alors que tu as une feuille masquée dans la copie ton fichier que j’ai renommé ‘’Données’’, la feuille ‘’Classified as UnClassified’’, mais également une feuille fantôme ‘’xl_DCF_History’’. Je parle d’une feuille fantôme car je ne sais pas où aller la chercher dans ce fichier, je ne sais pas d’où elle sort !!!!!

Est-ce que ça part dans le bon sens ?

21donnees.xlsx (21.11 Ko)

Bonjour,

Pour poster du code, vous pouvez utiliser les balises </> qui se trouvent sur le ruban en haut de l'espace commentaire.

Voici une proposition si j'ai bien compris :

Sub importation()

if not FeuilleExiste("Data") then
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"
else
    Sheets("Data").cells.delete
end if

for each ws in worksheets
    if ws.name <> "Data" then
        with sheets("Data")
            col = .cells(1, .columns.count).end(xltoleft).column
            ws.columns(2).copy .cells(1, col)
        end with
    end if
next ws

Sheets("Data").copy
Activeworkbook.close savechanges:=true, filename:="Data " & format(now, "YYMMDD-HHMM")

End Sub

function FeuilleExiste(nomfeuille$) as boolean
on error resume next
FeuilleExiste = Sheets(nomfeuille).index
end function

Salut Yvouille : j'ai vu ta réponse mais comme je m'étais engagé...

Cdlt,

Sub importation()

Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"

End Sub

Sub test()

Workbooks("Prix produit.xlsx").Worksheets("Data").Range("A2:A400").Value = Workbooks("données produits.xlsx").Worksheets("Historique1").Range("B2:B400").Value

Workbooks("Prix produit.xlsx").Worksheets("Data").Range("B2:B400").Value = Workbooks("données produits.xlsx").Worksheets("Historique2").Range("B2:B400").Value

Workbooks("Prix produit.xlsx").Worksheets("Data").Range("C2:C400").Value = Workbooks("données produits.xlsx").Worksheets("Historique3").Range("B2:B400").Value

Workbooks("Prix produit.xlsx").Worksheets("Data").Range("D2:D400").Value = Workbooks("données produits.xlsx").Worksheets("Historique4").Range("B2:B400").Value

End Sub

Merci pour vos réponses @3GB et @yvouille !!! désolé si je n'ai pas été bien clair ... (mon language de débutant doit y être pour beaucoup)

J'ai moi même de mon côté travaillé sur un code que j'ai inséré dans mon message. Ce code est ok pour moi puiqu'il me permet d'insérer dans la feuille "data" les colonnes B des différentes feuilles du fichier "données produit". Qu'est ce que vous pensez de ce code ?

j'aimerais bien l'améliorer, en faisant en sorte qu'il s'arrête de sélectionner : à la dernière ligne pleine de la colonne B. (ici il s'arrête à la LIGNE B400 ...)

Message 2 :

merci pour vos codes :)

Après test ils fonctionnent bien mieux que le mien !!

Yvouille le tien fonctionne très bien !

Vous m'avez bien débloqué, maintenant je peux supprimer les doublons entre la feuille price et la feuille data !

merci beaucoup

Bonjour,

Votre code est pas mal, il faut le boulot. Pour la dernière ligne, il faut utiliser la méthode end (l'équivalent du "ctrl" + flèche avec les touches sur excel pour des déplacements globaux). Voici le code adapté :

Sub importation()

if not FeuilleExiste("Data") then
    Sheets.Add(after:=Sheets(Sheets.Count)).Name = "Data"
else
    'Sheets("Data").cells.delete
end if

for each ws in worksheets 'pour chaque feuille
    if ws.name like "Histo*" then ' si nom commence par "Histo"
        with sheets("Data") 'sur feuille data
            col = .cells(1, .columns.count).end(xltoleft).column 'col vaut dernière colonne en revenant à gauche de la droite
            lig = .cells(.rows.count, 1).end(xlup).row 'lig vaut der ligne en revenant d'en bas vers le haut
            dl = ws.cells(ws.rows.count, 1).end(xlup).row 'dl vaut egalement der ligne mais de la feuille en cours
            .cells(lig, col).resize(dl - 1, 1).value = ws.range("B2:B" & dl).value 'en cellule(lig, col), on redimensionne au nombre de cellule de la colonne B de ws et on prend les valeurs
        end with
    end if
next ws

Sheets("Data").copy
Activeworkbook.close savechanges:=true, filename:="Data " & format(now, "YYMMDD-HHMM")

End Sub

function FeuilleExiste(nomfeuille$) as boolean
on error resume next
FeuilleExiste = Sheets(nomfeuille).index
end function

Cdlt,

Rechercher des sujets similaires à "vba importer colonnes differentes feuilles fichier"