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, _...

Excellerateur

XLDnaute Occasionnel
Re,

Comme ça avec l'enregistreur de macro pour la conversion
VB:
Sub Macro1 ()
'place ton code ici
Range("A1:A22").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.
J'essaye un peu ceci même si je n'y comprends pas grand chose 🥵
 

Etoto

XLDnaute Barbatruc
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, _
        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
 

Excellerateur

XLDnaute Occasionnel
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.
En effet j'ai utilisé ce code ci et ça marche bien jusqu'à ceci
bug Etoto.PNG


Je suis obligé de valider manuellement le "OK" pour que le code marche.
Mais sinon c'est déjà un petit pas pour 'humanité, mais un pas de géant pour wam 🤩
 

Etoto

XLDnaute Barbatruc
Re,

Parce qu'il est placé où ton code ? Dans la feuille ? Si oui place-le dans un module et comme ça il s'exécutera pas tout le temps, seulement quand tu cliqueras sur un bouton. Parce que ça fonctionne chez moi avec un module.
 
Dernière édition:

D.D.

XLDnaute Impliqué
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!
C'est parce que tu l'ouvres alors que:
Tu fais "fichier / Récent"
ou
Que tu l'as déjà ouvert dans la même session Excel

Ce que tu dois faire:
Fermer complètement Excel
Ouvrir le fichier via Fichier / Ouvrir

Et la normalement, tu auras le fichier "mal formaté".

Sinon utilise l'enregistreur une fois que ton fichier est chargé via la macro.
 

Etoto

XLDnaute Barbatruc
C'est parce que tu l'ouvres alors que:
Tu fais "fichier / Récent"
ou
Que tu l'as déjà ouvert dans la même session Excel

Ce que tu dois faire:
Fermer complètement Excel
Ouvrir le fichier via Fichier / Ouvrir

Et la normalement, tu auras le fichier "mal formaté".

Sinon utilise l'enregistreur une fois que ton fichier est chargé via la macro.
Re,

Super merci collègue 👍
 

Excellerateur

XLDnaute Occasionnel
Salut chers compagnons de recherche Excel,

Juste une petite question. J'essaye de bloquer une ligne dans laquelle j'ai mis des formules afin d'y sauvegarder les formules pour les futures utilisateurs. Au cas où une erreur se serait infiltrée dans le reste du fichier.

Je voudrais la bloquer sans y mettre un MDP. tout juste la verrouiller (j'sais même pas quel est le terme exacte)

Merci à vous.
 

Etoto

XLDnaute Barbatruc
Salut chers compagnons de recherche Excel,

Juste une petite question. J'essaye de bloquer une ligne dans laquelle j'ai mis des formules afin d'y sauvegarder les formules pour les futures utilisateurs. Au cas où une erreur se serait infiltrée dans le reste du fichier.

Je voudrais la bloquer sans y mettre un MDP. tout juste la verrouiller (j'sais même pas quel est le terme exacte)

Merci à vous.
Re,

Avant de protéger la ligne, va sous les options de protection.
 

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 170
Membres
112 676
dernier inscrit
little_b