Utilisation de plusieurs macro pr classeurs a plusieur feuils
Résolu/Fermé
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
-
15 mars 2013 à 09:44
hakoko Messages postés 187 Date d'inscription lundi 11 mars 2013 Statut Membre Dernière intervention 21 mars 2024 - 18 mars 2013 à 17:23
hakoko Messages postés 187 Date d'inscription lundi 11 mars 2013 Statut Membre Dernière intervention 21 mars 2024 - 18 mars 2013 à 17:23
A voir également:
- Utilisation de plusieurs macro pr classeurs a plusieur feuils
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
12 réponses
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
18 mars 2013 à 16:38
18 mars 2013 à 16:38
Voila ma proposition pour la macro Import :
Le principe est le suivant :
Dans chaque feuille se trouve
En A1 le nom du fichier sans extension
En B1 l'extension (.TXT ou .XLSX)
En C1 le chemin complet y compris le "\" à la fin
Si A1 est vide il calcule le nom en fonction de la date sous la forme "ayyyymmdd"
sinon il prend le nom en A1
Voila j'ai testé cela fonctionne dans tous les cas.
(Remarque : j'ai pris 250000 lignes cela interdit donc les fichier XLS)
A tester
A+
Sub Import_Fichier() Dim Fichier, Fichier_Ext, Repertoire, Chemin, Chemin_Complet Dim Ma_Feuille As Worksheet Dim Type_Fichier As String 'fige ecran Application.ScreenUpdating = False For Each Ma_Feuille In Worksheets Ma_Feuille.Select Fichier = Range("A1").Value Type_Fichier = Range("B1").Value Chemin = Range("C1").Value 'Efface le contenu de toutes les cellules de l'onglet actif Cells.ClearContents Range("A1").Value = Fichier Range("B1").Value = Type_Fichier Range("C1").Value = Chemin If Fichier = "" Then ' il faut calculer en fonction de la date Fichier = "a" & Format(Date, "yyyymmdd") End If Fichier_Ext = Fichier & Type_Fichier Chemin_Complet = Chemin & Fichier_Ext If Type_Fichier = ".TXT" Then 'Importation du fichier texte a afficher, premiere cellule a remplir: A2 'la base du code est obtenu avec l'enregistreur de macro et travaile en fonction 'du besoin: noms de ficher et repertoire changeant en fonction de la date With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;" & Chemin_Complet, Destination:= _ Range("$A$2")) .Name = Fichier .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 850 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With ElseIf Type_Fichier = ".XLSX" Then Application.DisplayAlerts = False Workbooks.Open Filename:=Chemin_Complet Range("A2:AM250000").Copy ThisWorkbook.Activate Range("A2").Select ActiveSheet.Paste Workbooks(Fichier_Ext).Close Application.DisplayAlerts = True End If 'Selection Donnees importees Range("A2:AM8643").Select 'RAZ tri ActiveSheet.Sort.SortFields.Clear 'Selection tri cle A2 descendant ActiveSheet.Sort.SortFields.Add Key:=Range("A2"), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortTextAsNumbers 'Tri Donnees With ActiveSheet.Sort .SetRange Range("A3:AM250000") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Next Ma_Feuille 'positionne sur cellule A1 Range("A1").Select 'Parametrage interval temps import: ici 3 secondes Next_Scan = Now() + TimeValue("00:00:03") Application.OnTime Next_Scan, "Import_Fichier" Application.ScreenUpdating = True End Sub
Le principe est le suivant :
Dans chaque feuille se trouve
En A1 le nom du fichier sans extension
En B1 l'extension (.TXT ou .XLSX)
En C1 le chemin complet y compris le "\" à la fin
Si A1 est vide il calcule le nom en fonction de la date sous la forme "ayyyymmdd"
sinon il prend le nom en A1
Voila j'ai testé cela fonctionne dans tous les cas.
(Remarque : j'ai pris 250000 lignes cela interdit donc les fichier XLS)
A tester
A+
scinarf
Messages postés
1119
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
15 mars 2013 à 10:18
15 mars 2013 à 10:18
Bonjour,
Tout dépend de ce que vous souhaitez faire.
Pour ma part, j'ai créer une userfom avec le code des macros à l'appuie de bouton.
Comment sont appelées vos macros ? (par un bouton sur une feuille, par une userform, elles sont automatiques ? )
Tout dépend de ce que vous souhaitez faire.
Pour ma part, j'ai créer une userfom avec le code des macros à l'appuie de bouton.
Comment sont appelées vos macros ? (par un bouton sur une feuille, par une userform, elles sont automatiques ? )
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
15 mars 2013 à 10:26
15 mars 2013 à 10:26
Je ne suis que debuttant dans la programmation sous VBA donc je vous pri de m'excuser si je coopere mal.
mon macro se lance par un boutton qui permet d'importer des données. comme le chemin vers ces données est different donc chaques Feuils de mon Classeur Excel doit lancer un macro qui fait l'importation des données mais avec different chemins (par exemple) et donc chaque Feuils doit lancer sa propre macro.
si il est util de mettre le code, je le mets.
merci pour votre aide
mon macro se lance par un boutton qui permet d'importer des données. comme le chemin vers ces données est different donc chaques Feuils de mon Classeur Excel doit lancer un macro qui fait l'importation des données mais avec different chemins (par exemple) et donc chaque Feuils doit lancer sa propre macro.
si il est util de mettre le code, je le mets.
merci pour votre aide
scinarf
Messages postés
1119
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
15 mars 2013 à 10:36
15 mars 2013 à 10:36
Alors, si les données a importer ont la même forme il est possible une seule macro avec un chemin d'accès différent selon la feuille de destination.
Est ce que vous souhaitez ?
Est ce que vous souhaitez ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
15 mars 2013 à 10:41
15 mars 2013 à 10:41
il se peut que le chemin vers ces fichiers contenant les données soit differents comme il se peut que ces fichiers soient de formats differents ( fichier excel, fichiers texte,...)
scinarf
Messages postés
1119
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
15 mars 2013 à 10:44
15 mars 2013 à 10:44
LA ça complique tout alors si il s'agit de fichier texte ou excel ou autre ...
Cela dis si vous avez déjà une macro qui récupère les données pour chacune des feuille c'est toujours jouable.
Cela dis si vous avez déjà une macro qui récupère les données pour chacune des feuille c'est toujours jouable.
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
15 mars 2013 à 10:49
15 mars 2013 à 10:49
en fait ma macro pour le moment ne recupere que des données provenant d'un fichiers texte, je croyais que le fait de changer l'extension dans la macro me permettait de recuperer des données sous une autre forme, ceci n'est-il pas possible?
je pense qu'il est preferable de vous envoyer le code peut etre que vous y compreniez mieu que moi.
je pense qu'il est preferable de vous envoyer le code peut etre que vous y compreniez mieu que moi.
scinarf
Messages postés
1119
Date d'inscription
samedi 18 novembre 2006
Statut
Membre
Dernière intervention
25 septembre 2014
252
15 mars 2013 à 10:56
15 mars 2013 à 10:56
Oui je veux bien regarder le code, mais cela va certainement me demander un peu de temps...
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
15 mars 2013 à 11:02
15 mars 2013 à 11:02
je vous remerci pour le temps que vous m'accordez
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
15 mars 2013 à 10:59
15 mars 2013 à 10:59
'Variable utilisable dans tout les codes
Public Next_Scan As Date
'Arret du Timer d'import ficher
Sub Stop_Import()
On Error Resume Next
Application.OnTime Next_Scan, "Import_Fichier", , False
End Sub
Sub Import_Fichier()
Dim Fichier, Fichier_Ext, Repertoire, Chemin, Chemin_Complet
'fige ecran
Application.ScreenUpdating = False
'Nom du fichier fonction de la date ex a20121211
Fichier = "a" & Format(Date, "yyyymmdd")
'Nom de fichier avec extention: .TXT pour ficher texte
'correspondant aux nom de fichier attendu
Fichier_Ext = "\a" & Format(Date, "yyyymmdd") & ".TXT"
'correspondant aux nom de repertoire attendu
Repertoire = "\données"
'A adapter a votre utilisation
Chemin = "\\xxx.xx.xxx.xx"
'Ecriture du chemin complet pour acceder au ficher attendu
Chemin_Complet = Chemin & Repertoire & Fichier_Ext
Worksheets("Affichage").Activate
'Efface le contenu de toutes les cellules de l'onglet actif
Cells.ClearContents
'Importation du fichier texte a afficher, premiere cellule a remplir: A2
'la base du code est obtenu avec l'enregistreur de macro et travaile en fonction
'du besoin: noms de ficher et repertoire changeant en fonction de la date
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Chemin_Complet, Destination:= _
Range("$A$2"))
.Name = Fichier
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Selection Donnees importees
Range("A2:AM8643").Select
'RAZ tri
ActiveWorkbook.Worksheets("Affichage").Sort.SortFields.Clear
'Selection tri cle A2 descendant
ActiveWorkbook.Worksheets("Affichage").Sort.SortFields.Add Key:=Range("A2"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortTextAsNumbers
'Tri Donnees
With ActiveWorkbook.Worksheets("Affichage").Sort
.SetRange Range("A3:AM250000")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'positionne sur cellule A1
Range("A1").Select
'Parametrage interval temps import: ici 3 secondes
Next_Scan = Now() + TimeValue("00:00:01")
Application.OnTime Next_Scan, "Import_Fichier"
End Sub
Public Next_Scan As Date
'Arret du Timer d'import ficher
Sub Stop_Import()
On Error Resume Next
Application.OnTime Next_Scan, "Import_Fichier", , False
End Sub
Sub Import_Fichier()
Dim Fichier, Fichier_Ext, Repertoire, Chemin, Chemin_Complet
'fige ecran
Application.ScreenUpdating = False
'Nom du fichier fonction de la date ex a20121211
Fichier = "a" & Format(Date, "yyyymmdd")
'Nom de fichier avec extention: .TXT pour ficher texte
'correspondant aux nom de fichier attendu
Fichier_Ext = "\a" & Format(Date, "yyyymmdd") & ".TXT"
'correspondant aux nom de repertoire attendu
Repertoire = "\données"
'A adapter a votre utilisation
Chemin = "\\xxx.xx.xxx.xx"
'Ecriture du chemin complet pour acceder au ficher attendu
Chemin_Complet = Chemin & Repertoire & Fichier_Ext
Worksheets("Affichage").Activate
'Efface le contenu de toutes les cellules de l'onglet actif
Cells.ClearContents
'Importation du fichier texte a afficher, premiere cellule a remplir: A2
'la base du code est obtenu avec l'enregistreur de macro et travaile en fonction
'du besoin: noms de ficher et repertoire changeant en fonction de la date
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Chemin_Complet, Destination:= _
Range("$A$2"))
.Name = Fichier
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Selection Donnees importees
Range("A2:AM8643").Select
'RAZ tri
ActiveWorkbook.Worksheets("Affichage").Sort.SortFields.Clear
'Selection tri cle A2 descendant
ActiveWorkbook.Worksheets("Affichage").Sort.SortFields.Add Key:=Range("A2"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortTextAsNumbers
'Tri Donnees
With ActiveWorkbook.Worksheets("Affichage").Sort
.SetRange Range("A3:AM250000")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'positionne sur cellule A1
Range("A1").Select
'Parametrage interval temps import: ici 3 secondes
Next_Scan = Now() + TimeValue("00:00:01")
Application.OnTime Next_Scan, "Import_Fichier"
End Sub
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
Modifié par pilas31 le 18/03/2013 à 14:58
Modifié par pilas31 le 18/03/2013 à 14:58
Bonjour,
Je viens de regarder le problème. Voila ma proposition.
Si chaque feuille du classeur a un chemin différent et peut avoir un type de fichier différent, je propose de mettre le chemin et le type de fichier dans une cellule de la feuille. Par exemple en A1 et B1.
Ensuite on boucle sur toutes les feuilles du classeur avec une boucle du type :
En fonction du type de fichier si c'est un fichier texte on fait l'import mais si c'est un fichier Excel il suffit de faire un copier coller du type :
J'ai quelques questions :
1/ Est-ce possible d'avoir le chemin dans la feuille elle-même
2/Dans la macro on voit que le nom du fichier est calculé avec la date est-ce que c'est le cas ou bien à chaque feuille on connait le nom du fichier ?
3/Le fichier Excel est-il au format 2003 (.xls), ou au delà (.xlsx)
4/Dans ce fichier excel quel est la plage de données à récuperer et dans quelle feuille ?
Avec les réponses à ces questions je peux faire une proposition de macro.
A+
Cordialement,
Je viens de regarder le problème. Voila ma proposition.
Si chaque feuille du classeur a un chemin différent et peut avoir un type de fichier différent, je propose de mettre le chemin et le type de fichier dans une cellule de la feuille. Par exemple en A1 et B1.
Ensuite on boucle sur toutes les feuilles du classeur avec une boucle du type :
Sub XXX() Dim Ma_Feuille As Worksheet For Each Ma_Feuille In Worksheets Ma_Feuille.Select Chemin = Range("A1").Value Type_Fichier = Range("B1").Value ' ' 'Traitement ' ' Next Ma_Feuille
En fonction du type de fichier si c'est un fichier texte on fait l'import mais si c'est un fichier Excel il suffit de faire un copier coller du type :
Application.DisplayAlerts = False Workbooks.Open Filename:="XXXXXXX.xls" Range("A2:AM50000").Copy ThisWorkbook.Activate Range("A2").Select ActiveSheet.Paste Workbooks("XXXX.xls").Close Application.DisplayAlerts = True
J'ai quelques questions :
1/ Est-ce possible d'avoir le chemin dans la feuille elle-même
2/Dans la macro on voit que le nom du fichier est calculé avec la date est-ce que c'est le cas ou bien à chaque feuille on connait le nom du fichier ?
3/Le fichier Excel est-il au format 2003 (.xls), ou au delà (.xlsx)
4/Dans ce fichier excel quel est la plage de données à récuperer et dans quelle feuille ?
Avec les réponses à ces questions je peux faire une proposition de macro.
A+
Cordialement,
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
18 mars 2013 à 15:38
18 mars 2013 à 15:38
Re,
1- le chemin dans la feuille elle meme ne poserai pas de prebleme.
2- on effet chaque feuilles pourais avoir un nom differents, le calcul du nom en fonction de la date à étais fait pour un des fichiers selement mais pas tous ont ce type de nom.
detail: les données sous format textes sont sous la forme de a+date, mais les données sous format excel parviennent d'un autre pc, (pour les recuperer sur le pc source , ils doivent etre telecharger automatiquement puis etre mis sous le reseau ( je nai pas encor chercher une solution a cela) sauf que pour le moment je ne connai pas leur noms.
3- il est au format (.xlsx).
4- c'est fichiers peuvent prendre jusqu'a 25000 ligne, selon la frequence de recuperation, les données les plus récentes doivent etre aux dessus, et conecrnant les feuilles l'ordre n'importe pas l'essentiel que les données les plus recente soient misent au dessus pour n'importe quelle feuilles.
si une reponse n'est pas clair, dites le moi.
1- le chemin dans la feuille elle meme ne poserai pas de prebleme.
2- on effet chaque feuilles pourais avoir un nom differents, le calcul du nom en fonction de la date à étais fait pour un des fichiers selement mais pas tous ont ce type de nom.
detail: les données sous format textes sont sous la forme de a+date, mais les données sous format excel parviennent d'un autre pc, (pour les recuperer sur le pc source , ils doivent etre telecharger automatiquement puis etre mis sous le reseau ( je nai pas encor chercher une solution a cela) sauf que pour le moment je ne connai pas leur noms.
3- il est au format (.xlsx).
4- c'est fichiers peuvent prendre jusqu'a 25000 ligne, selon la frequence de recuperation, les données les plus récentes doivent etre aux dessus, et conecrnant les feuilles l'ordre n'importe pas l'essentiel que les données les plus recente soient misent au dessus pour n'importe quelle feuilles.
si une reponse n'est pas clair, dites le moi.
hakoko
Messages postés
187
Date d'inscription
lundi 11 mars 2013
Statut
Membre
Dernière intervention
21 mars 2024
3
18 mars 2013 à 17:23
18 mars 2013 à 17:23
merci infiniment!!
ça a marché pour un premiere essay. je trouve cette solution tres ingenieuse, merci bcp
ça a marché pour un premiere essay. je trouve cette solution tres ingenieuse, merci bcp