Utilisation de plusieurs macro pr classeurs a plusieur feuils
Résolu
hakoko
Messages postés
228
Statut
Membre
-
hakoko Messages postés 228 Statut Membre -
hakoko Messages postés 228 Statut Membre -
Bonjour,
comment je pourais utiliser plusieurs macro en meme temp, pour plusieurs Feuils dans un meme classeur Excel ( chaque macro se lance dans une Feuil)?
comment je pourais utiliser plusieurs macro en meme temp, pour plusieurs Feuils dans un meme classeur Excel ( chaque macro se lance dans une Feuil)?
A voir également:
- Utilisation de plusieurs macro pr classeurs a plusieur feuils
- Utilisation chromecast - Guide
- Télécharger gratuitement notice d'utilisation - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
12 réponses
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+
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 ? )
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
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
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,...)
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.
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.
'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
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,
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.