Microsoft 365 Créer une macro qui va dans un dossier récupérer un fichier

Excellerateur

XLDnaute Occasionnel
Bonjour chers membres!



Je voudrais pourvoir faire une macro qui va aller dans un dossier de mon pc, puis récupérer un fichier qui se trouve dans un dossier, l'ouvrir et copier toute une plage de ce fichier et venir la coller dans l'onglet de destination prévu dans mon fichier (celui de la macro).



Je ne sais pas si il faudrait que je produise le fichier , mais je n'en suis pas sûr.



Néanmoins voici ce que j'ai obtenu comme code:

VB:
Sub maj_extraction_de_donnees()

'

' maj_extraction_de_données Macro

'


'

    Sheets("Donnees").Select

    Range("A2:E3138").Select

    Selection.ClearContents

    Range("A1:E2644").Select

    Selection.Copy

    Windows("Outil de franchissement.xlsm").Activate

    Sheets("Donnees density").Select

    Range("A2").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Range("A1").Select

    Windows("Equity.csv").Activate

    Application.CutCopyMode = False

    Windows("Outil de franchissement.xlsm").Activate

End Sub

Mais mon code n'est pas optimal car quand je ferme et qu'une autre personne l'ouvre, il ne part pas ans le réseau chercher le ficher dans lequel la copie doit être faite.



Merci de votre aide.



Bien cordialement,
 
Solution
Exemple avec le code :

VB:
Sub Import_Data()
    Dim Chemin As String
    Chemin = [B1]
    Workbooks.Open Filename:= Chemin, ReadOnly:=True
    Sheets("Deliveries").Select
    last = Range("A1048576").End(xlUp).Row
    oArray = Range("A2:S" & last)
    Workbooks("Fichier.xlsx").Close SaveChanges = 0
    Windows(NomFichier).Activate
    Sheets("Data").Select
    On Error Resume Next
    Sheets("Data").ShowAllData
    On Error GoTo 0
    Range("T3:AG1048576").Clear
    Range("A2:S1048576").ClearContents
    Range("A2:S" & last) = oArray
    Erase oArray
    Range("T2:AG2").AutoFill Destination:=Range("T2:AG" & last)
    Range("la zone à convertir").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _...

Etoto

XLDnaute Barbatruc
Re
Le plus simple:
dans l'explorateur, sélectionner le fichier puis
Acceuil / Copier le chemin d'accès (dans le groupe presse papier)​
ou
Shift + clic droit et "Copier en tant que chemin d'accès"​

Regarde la pièce jointe 1109558
Et bien ça copie aussi le nom du fichier et son extension du coup voici le code avec ta méthode :
VB:
Sub Import_Data()
    Dim Chemin As String
    Chemin = [B1]
    Workbooks.Open Filename:= Chemin, ReadOnly:=True
    Sheets("Deliveries").Select
    last = Range("A1048576").End(xlUp).Row
    oArray = Range("A2:S" & last)
    Workbooks("Fichier.xlsx").Close SaveChanges = 0
    Windows(NomFichier).Activate
    Sheets("Data").Select
    On Error Resume Next
    Sheets("Data").ShowAllData
    On Error GoTo 0
    Range("T3:AG1048576").Clear
    Range("A2:S1048576").ClearContents
    Range("A2:S" & last) = oArray
    Erase oArray
    Range("T2:AG2").AutoFill Destination:=Range("T2:AG" & last)
End Sub

Cordialement
 

Excellerateur

XLDnaute Occasionnel
Salut la team!

Voilà ce que j'obtiens comme message en essayant de modifier le code

1624889530679.png
 

Etoto

XLDnaute Barbatruc
Re,

Avec l'extension, le code fonctionne maintenant ?

Parce que si ça fonctionne, j'ai une superbe méthode si tu veux extraire depuis plusieurs fichiers d'un même dossier en plusieurs fois séparées, mais Power Query est obligatoire dans ce cas, tu vas copier l'arborescence d'un dossier avec une requête Excel que tu modifies avec Power Query et tu as accès à ton les noms, les extensions et les chemins des fichiers dans ce dossier et dans ces sous-dossiers dans un tableau Excel ce qui est super après avec un RECHERCHEV en B1 tu tapes le nom en A1 et en B1 il te trouve le chemin.

C'est complexe mais c'est super pratique, crois-moi !
 
Dernière édition:

Excellerateur

XLDnaute Occasionnel
Bonjour,

Je vous explique!

En effet je comprenais pas pourquoi ça ne marchais pas, mais j'y suis enfin arrivé et cela grâce à votre aide à tous les deux @Etoto et @D.D. vous ne savez combien je vous suis reconnaissant.
Je croyais avoir tout réglé en mettant une extension intuitive xlsx. Mais ça ne marchait pas et je ne comprenais pas pourquoi. Je me disais que vu qu'il s'agit d'un fichier Excel qui n'a pas de macro, ça ne pouvait être que le xlsx.
Mais j'ai pu infine voir l'extension réelle en allant dans les paramètres du fichier (Quelle honte 😞).

Pour la petite histoire, j'ai compris comment faire apparaitre l'extension dans le code en enregistrant une macro.
En fait il faut lancer l'enregistreur de macro, puis aller chercher le fichier dont on a besoin sans sortir d'Excel.
Il faut plutôt passer par fichier-ouvrir- puis aller chercher le fichier voulu dans le dossier correspondant. Et la Bim vous avez le chemin qui apparaît dans le code comme par enchantement. 🤩

Votre humble Excellerateur vous remercie pour votre grande générosité!

Garder une Excellente pêche!

Excellemment votre!
 

Etoto

XLDnaute Barbatruc
Re, Yes c'est réussi
Bonjour,

Je vous explique!

En effet je comprenais pas pourquoi ça ne marchais pas, mais j'y suis enfin arrivé et cela grâce à votre aide à tous les deux @Etoto et @D.D. vous ne savez combien je vous suis reconnaissant.
Je croyais avoir tout réglé en mettant une extension intuitive xlsx. Mais ça ne marchait pas et je ne comprenais pas pourquoi. Je me disais que vu qu'il s'agit d'un fichier Excel qui n'a pas de macro, ça ne pouvait être que le xlsx.
Mais j'ai pu infine voir l'extension réelle en allant dans les paramètres du fichier (Quelle honte 😞).

Pour la petite histoire, j'ai compris comment faire apparaitre l'extension dans le code en enregistrant une macro.
En fait il faut lancer l'enregistreur de macro, puis aller chercher le fichier dont on a besoin sans sortir d'Excel.
Il faut plutôt passer par fichier-ouvrir- puis aller chercher le fichier voulu dans le dossier correspondant. Et la Bim vous avez le chemin qui apparaît dans le code comme par enchantement. 🤩

Votre humble Excellerateur vous remercie pour votre grande générosité!

Garder une Excellente pêche!

Excellemment votre!
Re,

Youhou !!! Bravo @D.D. tandis que je suis content pour toi @Excellerateur que tu aies une solution.

Cordialement.
 

Excellerateur

XLDnaute Occasionnel
Re, Yes c'est réussi

Re,

Youhou !!! Bravo @D.D. tandis que je suis content pour toi @Excellerateur que tu aies une solution.

Cordialement.
En effet @D.D. tu y as été pour beaucoup tout comme @Etoto.

Bon le nouveau souci c'est que les données que j'extrais arrivent sous forme brute (au lieu d'avoir plusieurs colonne comme cela se condense dans une seule colonne. Je sais pas si vous voyez)
👇
1625046869396.png

Des conseils???

Merci!
 

Excellerateur

XLDnaute Occasionnel
Hello
Merci pour ce que tu écris.

Pour le nouveau problème:
Utilise et enregistre puis analyse ce qui se passe quand tu utilises "Données / Convertir"
Salut,

oui en effet j'y ai pensé, mais le souci c'est que quand j'ouvre le fichier, les données sont bel et bien rangées correctement (confère image) 👇
1625047900659.png


ce n'est que quand j'essaye de rejouer ma macro que ça me fait le sale coup jpp 😞.

Pendant l'enregistrement tout est normal donc pas besoin de convertir ce qui est déjà bien ordonné.
Mais lorsque je ferme le tout et que je veux voir se réaliser mon chef d’œuvre ça me fait les foutaises décrites plus haut 😭😭

Tellement triste!
 

Etoto

XLDnaute Barbatruc
Salut,

oui en effet j'y ai pensé, mais le souci c'est que quand j'ouvre le fichier, les données sont bel et bien rangées correctement (confère image) 👇
Regarde la pièce jointe 1109786

ce n'est que quand j'essaye de rejouer ma macro que ça me fait le sale coup jpp 😞.

Pendant l'enregistrement tout est normal donc pas besoin de convertir ce qui est déjà bien ordonné.
Mais lorsque je ferme le tout et que je veux voir se réaliser mon chef d’œuvre ça me fait les foutaises décrites plus haut 😭😭

Tellement triste!
Re,

Et si tu incorporais cela dans ton code VBA, après plus de problème.
 

Etoto

XLDnaute Barbatruc
Re,

Comme ça avec l'enregistreur de macro pour la conversion
VB:
Sub Macro1 ()
'place ton code ici
Range("la zone à convertir").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
     
End sub

Par contre @D.D. aura peut-être un meilleur code.
 

Discussions similaires

Statistiques des forums

Discussions
312 309
Messages
2 087 108
Membres
103 472
dernier inscrit
garnoux57