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
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)?

A voir également:

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
Voila ma proposition pour la macro Import :

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+
1
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
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 ? )
0
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
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
0
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
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 ?
0

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
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,...)
0
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
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.
0
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
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.
0
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
Oui je veux bien regarder le code, mais cela va certainement me demander un peu de temps...
0
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
je vous remerci pour le temps que vous m'accordez
0
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
'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
0
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
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 :

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,
0
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
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.
0
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
merci infiniment!!

ça a marché pour un premiere essay. je trouve cette solution tres ingenieuse, merci bcp
0