Traitement de donnée Excel dans des dossiers variables

Bonjour, je suis nouveau sur le forum, et débutant en VBA.

Je vous écris car je rencontre un soucis dans mon programme.

Je m'explique :

Je dois créer un programme qui s'exécute sur un tableur excel qui va chercher à ouvrir d'autre tableurs excels, faire des copies et coller sur de nouveau onglet sur le tableur initial. Le programme s'éxecute bien sur le nom associé, voici un extrait du programme :

Sub CreationSynthese()

'Synthèse des documents à traiter

' Ouverture de ADA.xlsx"

Workbooks.Open "C:\Users\maxime.paruch\Analyse de donnée EXCEL\112163\ADA.xlsx"

Application.DisplayAlerts = False

' Copie des données :

Workbooks("ADA.xlsx").Sheets("ADA").Range("A1:P1000").Copy

Workbooks("Générateur de bilan de comptes.xlsm").Activate

Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Select

Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Paste

Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Range("A1").Select

' Fermeture de ADA.xlsx :

Workbooks("ADA.xlsx").Close False

Application.DisplayAlerts = True

' Ouverture de ADA-2.xlsx :

Workbooks.Open "C:\Users\maxime.paruch\Analyse de donnée EXCEL\112163\ADA-2.xlsx"

Application.DisplayAlerts = False

' Copie des données :

Workbooks("ADA-2.xlsx").Sheets("ADA-2").Range("A1:P1000").Copy

Workbooks("Générateur de bilan de comptes.xlsm").Activate

Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Select

Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Paste

Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Range("A1").Select

' Fermeture de ADA-2.xlsx :

Workbooks("ADA-2.xlsx").Close False

Application.DisplayAlerts = True

Les données qui sont en couleur bleu sont variables selon le dossier ou le générateur de bilan s'éxecute.

Dans l'idée j'aimerais que mon programme puisse s'exécuter dans d'autre dossier directement avec n'importe quelle valeur du type XXXXXX (112163 pour celui ci).

Il faudrait que se soit une variable que le générateur prenne en compte.

Je vous remercie pour votre aide.

Maxime

Bonjour

Workbooks.Open "C:\Users\maxime.paruch\Analyse de donnée EXCEL\" & variable & "\ADA-2.xlsx"

IL vous reste à intégrer dans la variable l'élément voulu

Tout d'abord merci pour votre réponse,

mais je ne sais pas comment gérer "& variable &" pour que cela fonctionne.

Comment dois-je la déclarer ? Et comment faire pour que mon programme fonctionne dans n'importe quel dossier de la forme XXXXXX..

Je vous remercie pour votre aide.

Cordialement,

Maxime

Tout dépend de la source, qui va donner à la variable sa raison d'être. Si c'est-ce une saisie manuelle...du texte dans une cellule...

Ici, par exemple mon programme s'executera dans un dossier portant un nom de la forme XXXXXX en chiffre.

Je voudrai qu'au lancement de la macro récupération de donnée, que le programme puisse prendre le numéro de compte XXXXXX.

Que la macro s'exécute en adaptant à chaque fois sa variable (n° de compte) dans le fichier ou elle se trouve (dans la ligne workbook.open).

NomDossier : 112158 --> & variable & =112158

NomDossier : 145489 --> & variable & =145489

NomDossier : 159486 --> & variable & =159486

Je vous remercie pour toute votre aide.

Cordialement,

Maxime

Max6456 a écrit :

Je voudrai qu'au lancement de la macro récupération de donnée, que le programme puisse prendre le numéro de compte XXXXXX.

Je réitère ma question sous une autre forme : allez chercher le N° de compte où ? Chez l'épicier ? Chez le coiffeur ? Dans les toilettes ? Dans la cuisine ? Sous le coussin ? Dans la cellule B1, dans la feuille 2 ? Chez tatan Edmonde ? Chez tonton lulu ?

Après réflexion, je me suis rendu compte qu'il me faut une macro qui me permette d'aller chercher un dossier à traiter.

Chaque dossier est caractérisé par un numéro de compte à 6 chiffres.

Si vous voulais je vais garder la même structure de programme mais c'est moi qui lui dit dans quel dossier intervenir et où traiter justement les différents fichiers Excel.

Pouvez vous.m'aider à modifier mon programme pour qu'il puisse faire ça ?

En gros on doit via l'explorer lui dire ou la macr extraction doit intervenir (dossier avec numéro de compte)

Désolé pour mon ancienne explication.

Merci pour votre aide.

Cordialement.

Maxime.

En première approche, vous pouvez commencer par ceci (je vous laisse rajouter les éléments concernant la copie)

Sub recopie()
Dim fichierD As Workbook
Application.Dialogs(xlDialogOpen).Show
Set fichierD = ActiveWorkbook

Range(machintruc).Copy fichierD.sheets("bidule").Range("Aquelquechose")
End Sub

Tout ce qui vous paraît anormal (les machin truc bidule) ce sont les termes à remplacer.

Au lancement de la macro, une fenêtre s'ouvre. Vous allez chercher votre fichier via l'arborescence des repertoires puis celui-ci se nommera "FichierD" . Dans l'exemple ci-dessus je copie la plage machintruc pour la coller dans la feuille bidule du fichierD.

Tout d'abord merci pour votre réponse.

Je ne suis pas sur ma machine mais demain à la première heure je testes tout ça, et vous dit comment ça réagit.

Cela devrait résoudre mon problème, et pouvoir faire fonctionner cette macro dans n'importe quel dossier (fichierd, XXXXXX n° de compte).

La ligne qui recopie et place (RANGE), je peux en mettre à la suite autant que je veux sur la macro recopie ?

Je vous remercie.

Bien cordialement,

Maxime PARUCH

Autant que vba en supporte.

Par la suite, présentez-nous votre macro (voire le fichier) pour que les vbaïste puissent améliorer le code et vous apporter un certain "confort informatique)

La macro d'ouverture des répertoires s'exécute bien mais après je ne parviens pas à ce que la sélection se sopie et se colle ou je veux automatiquement.

Je m'explique pour que tout soit bien clair.

J'ai un fichier excel appelé "Générateur de bilan", c'est dans celui ci que toutes les macros seront.

Dans ce fichier excel, je dois être capable via un bouton d'aller chercher le dossier de la forme XXXXXX (variable Dossierd), et qu'elle s'exécute automatiquement pour les fichiers .xls : ADA ADA_2 ADM ADV CHRONO DEVIS1 DEVIS2......

Si vous voulez ma macro actuelle fonctionne mais pour un seul dossier (bien localisé 112163).

Je voudrai lui dire où intervenir.

La macro juste à l'ouverture du dossier de la forme XXXXXX, doit pouvoir copier ADA ADA_2 ADM .... et les coller dans des onglets du générateur de bilan.

Je mettrai bien des images pour vous aider mais je ne sais pas comment faire avec Img.

J'espère que vous pourrez m'aider. Je vous remercie.

Cordialement,

Maxime PARUCH

J'ai eu cette petite idée mais je ne sais pas comment la programmer.

Je vais procéder avec la variable ncompte (ncompte, que l'on définit en choisissant le dossier n°compte=nom du dossier (avec l'explorer en gros on va définir la variable n°compte pour lancer Sub CreationSynthese.

Voici une partie du code qui doit être ajusté pour faire cela.

Sub CreationSynthese()

'Synthèse des documents à traiter

[color=#FF4000]Dim ncompte As Integer
ncompte = name du dossier choisi avec Application.Dialogs(xlDialogOpen).Show[/color]
' Ouverture de ADA.xlsx"
    Workbooks.Open "C:\Users\maxime.paruch\Analyse de donnée EXCEL\[color=#FF4000]ncompte[/color]\ADA.xlsx"

        Application.DisplayAlerts = False

' Copie des données :
    Workbooks("ADA.xlsx").Sheets("ADA").Range("A1:P1000").Copy
    Workbooks("Générateur de bilan de comptes.xlsm").Activate
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Select
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Paste
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Range("A1").Select

' Fermeture de ADA.xlsx :
    Workbooks("ADA.xlsx").Close False

        Application.DisplayAlerts = True

' Ouverture de ADA-2.xlsx :
     Workbooks.Open "C:\Users\maxime.paruch\Analyse de donnée EXCEL\[color=#FF4000]ncompte[/color]\ADA-2.xlsx"

        Application.DisplayAlerts = False

' Copie des données :
    Workbooks("ADA-2.xlsx").Sheets("ADA-2").Range("A1:P1000").Copy
    Workbooks("Générateur de bilan de comptes.xlsm").Activate
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Select
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Paste
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Range("A1").Select

 ' Fermeture de ADA-2.xlsx :
    Workbooks("ADA-2.xlsx").Close False

        Application.DisplayAlerts = True
        

Je vous remercie pour votre aide.

Maxime PARUCH

Bonjour, votre macro semble avoir une certaine logique, pour ma part j'étais en train de developper celle-ci

Sub dossier()
Dim fichier, dossier, fichierD As Workbook
   With Application.FileDialog(msoFileDialogFolderPicker)
      '.InitialFileName = ActiveWorkbook.Path & "\"
      .Show
      If .SelectedItems.Count > 0 Then
        dossier = .SelectedItems(1)
      Else
        dossier = ""
      End If
    End With

fichier = Array("ADA", "ADA_2", "ADM", "ADV", "CHRONO", "DEVIS1")

For i = 0 To UBound(fichier)
Workbooks.Open dossier & "\" & fichier(i) & ".xlsx"
Set fichierD = ActiveWorkbook
'ici placer une condition si
'Si fichierD = fichier(0) alors copier plage générateur de bilan sur la feuille ADA-2
'si FichierD =fichier(1) alors copier............................... sur la feuille ADA_2-2
Next

End Sub

La première partie de la macro est une macro déjà existante qui permet de récupérer le nom du répertoire.

De se fait, le nom complet du chemin sera dans la variable "dossier"

Ensuite avec fichier = Array("ADA", "ADA_2", "ADM", "ADV", "CHRONO", "DEVIS1")

Je crée un petit tableau virtuel ou je rentre le nom (simplement le nom) des fichiers à traiter

Puis je fais une boucle

--> Workbooks.Open dossier & "\" & fichier(i) & ".xlsx" j'ouvre dans le dossier spécifier le ième fichier (ADA fichier 1,ADA_2 c'est le fichier 2 etc)

Puis pour coller sur les bonnes feuille de chaque fichier il faudra étudier une fonction si ou un select cas mais sans savoir précisément collé quoi et ou je ne peux le faire pour vous.

Cordialement

Alors là, je suis impressionné, j'ai copié votre programme et il marche, je vais bien chercher mon répertoire de la forme XXXXXX, et il ouvre automatique les fichiers ADA ADA-2 ADM CHRONO........

A la suite de ça je vais intégrer ma partie pour faire les copies, et coller dans "générateur de bilan de compte"...

Je vous remercie, j'aurai quelques questions, sur quelques lignes que je ne comprends pas...

Je vous remercie,

J'adapte mon programme et l'envoie ensuite ici.

Maxime Paruch

Je n'y répondrai que vers midi car je vais m'absenter

Voici une partie du programme, j'ai remplacer fichierd par generation :

Sub dossier()
Dim fichier, dossier, Generation As Workbook
   With Application.FileDialog(msoFileDialogFolderPicker)
      '.InitialFileName = ActiveWorkbook.Path & "\"
      .Show
      If .SelectedItems.Count > 0 Then
        dossier = .SelectedItems(1)
      Else
        dossier = ""
      End If
    End With

fichier = Array("ADA", "ADA-2", "ADM", "CHRONO", "DEVIS1")

For i = 0 To UBound(fichier)
Workbooks.Open dossier & "\" & fichier(i) & ".xlsx"
Set Generation = ActiveWorkbook
If Generation = fichier(0) Then
    Workbooks("ADA.xlsx").Sheets("ADA").Range("A1:P1000").Copy
    Workbooks("Générateur de bilan de comptes.xlsm").Activate
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Select
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Paste
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA").Range("A1").Select
End If
If Generation = fichier(1) Then
    Workbooks("ADA-2.xlsx").Sheets("ADA-2").Range("A1:P1000").Copy
    Workbooks("Générateur de bilan de comptes.xlsm").Activate
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Select
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Paste
    Workbooks("Générateur de bilan de comptes.xlsm").Sheets("ADA (2)").Range("A1").Select

'ici placer une condition si
'Si fichierD = fichier(0) alors copier plage générateur de bilan sur la feuille ADA-2
'si FichierD =fichier(1) alors copier............................... sur la feuille ADA_2-2
End If
Next i

End Sub

Il ouvre bien les fichiers mais sa bloc au niveau de : If Generation = fichier(0) Then

ça affiche : Erreur d'exécution 438, propriété ou méthode non géré par cet objet

Merci pour votre aide.

Maxime PARUCH

Workbooks("ADA-2.xlsx").Sheets("ADA-2")
Workbooks("ADA.xlsx").Sheets("ADA")

Le nom des feuilles sera toujours le même que le nom du classeur ?

Oui, les mêmes

Maxime PARUCH

essayez celle-ci.

Sub dossier()
  Dim fichier, dossier, fe,Generation As Workbook
  With Application.FileDialog(msoFileDialogFolderPicker)
    '.InitialFileName = ActiveWorkbook.Path & "\"
    .Show
    If .SelectedItems.Count > 0 Then
      dossier = .SelectedItems(1)
    Else
      dossier = ""
    End If
  End With

  fichier = Array("ADA", "ADA-2", "ADM", "CHRONO", "DEVIS1")

  For i = 0 To UBound(fichier)
    Workbooks.Open dossier & "\" & fichier(i) & ".xlsx"
    Set Generation = ActiveWorkbook
    fe = Left(Generation.Name, Len(Generation.Name) - 5)
    Generation.Sheets(fe).Range("A1:P1000").Copy Workbooks("Générateur de bilan de comptes.xlsm").Sheets(fe).Range("A1")
    Generation.Close False
  Next i

End Sub

Il existe des techniques pour lire dans un classeur fermés sans les ouvrir mais je ne maîtrise pas du tout cette partie donc par défaut, j'ouvre et je ferme le fichier.

Generation.Sheets(fe).Range("A1:P1000").Copy Workbooks("Générateur de bilan de comptes.xlsm").Sheets(fe).Range("A1")

le programme bloque sur cette avant dernière ligne.

Il s'agit d'une erreur "9". L'indice n'appartient pas à la sélection.

Merci,

Maxime

Rechercher des sujets similaires à "traitement donnee dossiers variables"