Exécuter plusieurs macros à l'ouverture

gacr0

XLDnaute Nouveau
Bonjour,

Je suis une grande débutante dans excel mais j'ai vraiment besoin d'aide pour le boulot. J'ai un classeur excel avec plusieurs feuilles lesquelles contiennent des macros différentes. Ces feuilles sont liées à une feuille de données source, laquelle est également dans mon classeur.

Mon problème est que je voudrais pouvoir exécuter toutes mes macros à l'ouverture de mon fichier excel. La seule façon dont j'ai réussi est en créant une méga macro qui fait tout ce que mes autres petites macros font. Cependant, je ne sais pas pourquoi, cela altère les données de ma feuille source aussi.

Pourriez-vous m'aider ?
 

Paf

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

Bonjour

sans classeur exemple pas facile de donner une réponse sûre !

mais sans doute que chaque macro est prévue pour être lancée depuis une feuille bien particulière et traite alors la feuille active. Regrouper tout le code en une seule macro fait qu'il n'y a plus qu'une feuille active . les instructions du code s'exécutent sur cette feuille alors qu'elles s'adressaient à une autre.

Une solution ( possible ?) est de bien référencer les instructions avec la feuille , par exemple
au lieu de Range("A1")= " exemple" écrire Worksheets("Feuil2").Range("A1")= " exemple"

A+ avec le classeur en PJ ?
 

gacr0

XLDnaute Nouveau
Re : Exécuter plusieurs macros à l'ouverture

Bonjour

Je comprend votre idée mais malheureusement, ce sont des données confidentielles du travail, il faudrait que je reproduise celui-ci avec d'autres données. Donc si je comprend, je dois créer une macro par feuille. Okay, donc cela me donnerait 6 macros indépendantes qui s'exécutent chacune sur des feuilles distinctes. Maintenant comment dois-je écrire ma requête dans VBA (et quel est le chemin d'accès) afin que toutes mes macros s'exécutent à l'ouverture ?

Merci milles fois !
 

chris

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

Bonjour

Non, ce que Paf indique c'est que tes procédures actuelles étant sans doute attachées à une feuille, elles s'appliquent à cette feuille particulière alors que si tu copies colles le code dans un module, le code va s'appliquer à la feuille active du classeur actif et pas à la feuille initialement prévue.

Il faut donc, si tu copies le code, repréciser le classeur et la feuille concernée par ces lignes copiées.

Sans voir le code, difficile de t'aider plus.

Edit : correction fautes de frappe
 
Dernière édition:

gacr0

XLDnaute Nouveau
Re : Exécuter plusieurs macros à l'ouverture

Voici le code de deux de mes macros :

Sub suivi15jours()
'
' suivi15jours Macro
'

'
ActiveSheet.Range("$A$3:$F$619").AutoFilter Field:=6, Criteria1:= _
"En attente"
ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort.SortFields.Add Key _
:=Range("E3:E619"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

AND

Sub suiviappels()
'
' suiviappels Macro
'

'
ActiveSheet.Range("$A$3:$F$1260").AutoFilter Field:=5, Criteria1:="<11", _
Operator:=xlAnd
End Sub




Et voici maintenant le combiné des deux :

Sub TOUSSUIVIS()
'
' TOUSSUIVIS Macro
'

'
ActiveSheet.Range("$A$3:$F$619").AutoFilter Field:=6, Criteria1:= _
"En attente"
ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort.SortFields.Add Key _
:=Range("E3:E619"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("Suivi des appels").Select
ActiveSheet.Range("$A$3:$F$1260").AutoFilter Field:=5, Criteria1:="<11", _
Operator:=xlAnd
End Sub


En espérant que cela vous aidera à m'aider ;)
 

chris

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

Re,
Dans le filtre
Add Key :=Range("E3:E619")
ne précise pas la feuille où est prise la clé.
Par ailleurs il est généralement plus logique de donner E1 car on ne connait pas la hauteur de la plage.
Bien vérifier dans ce cas que
.Header = xlYes

Donc
Add Key :=ActiveWorkbook.Worksheets("Suivi 15 jours").Range("E1")

Il peut être plus pratique d'utiliser des structures With End With pour éviter de répéter ActiveWorkbook.Worksheets("Suivi 15 jours").

Quand on débute en VBA, il faut bien comprendre que le VBA N'a pas souris et ne clique pas sur telle cellule de telle feuille et que lui peut donc écrire ou lire sans voir la feuille contrairement à nous. Doù la nécessité de préciser tout le chemin du classeur à la cellule.
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

re et bonjour chris


dans Sub suiviappels() , ActiveSheet.Range("$A$3:... se rapporte sans doute à la feuille Suivi des appels vue l'instruction rajoutée dans le regroupement de macro:
Sheets("Suivi des appels").Select
ActiveSheet.Range("$A$3:$F$1260")....

(qui aurait pu s'écrire Sheets("Suivi des appels").Range("$A$3:$F$1260")....)

Faire la même chose pour toutes les références sans feuille précisée comme:
dans Sub suivi15jours() ou Sub TOUSSUIVIS() à quelle feuille doit se rapporter ActiveSheet.Range("$A$3:$F$619")... ?

A+
 

ROGER2327

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

Bonjour à tous.


(...) malheureusement, ce sont des données confidentielles du travail, il faudrait que je reproduise celui-ci avec d'autres données. (...)
Bien que le mot confidentiel n'ait plus guère de sens dès qu'on allume sa machine, c'est probablement une bonne idée.

À tout hasard :



Bonne journée.


ℝOGER2327
#7318


Mardi 17 Palotin 141 (Saint Macrotatoure, caudataire - fête Suprême Quarte)
17 Floréal An CCXXII, 5,2096h - pimprenelle
2014-W19-2T12:30:11Z
 
Dernière édition:

gacr0

XLDnaute Nouveau
Re : Exécuter plusieurs macros à l'ouverture

Bonjour
Je ne suis vraiment pas certaine d'avoir suivi. Que dois-je modifier ?
En fait j'avais créé la macro toussuivis car je pensais que ce serait plus simple de tout exécuter à la fois.

Mon problème initial est que je veux exécuter les macros "suiviappels" et "suivi15jours" à l'ouverture de mon classeur excel. La macro "suiviappels" est sur la feuille "suivi des appels" et la macro "suivi15jours" est sur la feuille "suivi 15 jours".

J'essaie de comprendre qu'elle est la logique pour exécuter plus d'une macro à l,ouverture car en fait j'en ai 6 à effectuer, je ne vous en ai donné que 2 pour alléger mais je présume que le principe est le même ?

Merci de votre support !
 

Paf

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

Re

Pour lancer toutes les macros en une seule fois, faire une macro qui regroupe les appels à ces macros, par exemple:

Code:
Sub ToutesMacros()
  suivi15jours
  suiviappels
  Macro3
  Macro4
  '...
End Sub

Mais le problème des feuilles courantes ne sera pas réglé pour autant !

Sans classeur joint, je ne vais pas m'aventurer à décrire un code qui ne s'adapterait que peut-être.

A+
 

gacr0

XLDnaute Nouveau
Re : Exécuter plusieurs macros à l'ouverture

Bonjour Paf
Voir en PJ le fichier exemple. J'ai enlevé toutes les données sensibles mais j'ai conservé toutes les macros dont j'ai besoin. Bref toutes les macros existantes doivent être exécuter à l'ouverture...

Merci de votre aide !
 

Pièces jointes

  • Références.xlsm
    263.1 KB · Affichages: 30

Paf

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

re bonjour

ci dessous le deux macros du classeur fourni modifiées à titre d'exemple. Peut-être que cette adaptation pourrait convenir aux 4 macros non présentes.

Code:
Sub Suivi15jours()
'
' Suivi15jours Macro
'

With Worksheets("Suivi 15 jours")
    .Range("$A$3:$F$619").AutoFilter Field:=6, Criteria1:= _
        "En attente"
    .AutoFilter.Sort.SortFields.Clear
    .AutoFilter.Sort.SortFields.Add Key _
        :=.Range("E3:E619"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
    With .AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    .Range("$A$3:$F$619").AutoFilter Field:=4, Criteria1:="<>*vide*" _
        , Operator:=xlAnd
End With
End Sub

Code:
Sub Suivi5jours()
'
' Suivi5jours Macro
'

With Worksheets("Suivi 5 jours")
    .Range("$A$3:$F$443").AutoFilter Field:=6, Criteria1:="En attente"
    .AutoFilter.Sort.SortFields.Clear
    .AutoFilter.Sort.SortFields.Add Key _
        :=.Range("E3:E443"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
    With .AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    .Range("$A$3:$F$443").AutoFilter Field:=4, Criteria1:="<>*VIDE*" _
        , Operator:=xlAnd
End With
End Sub

/!\ attention à ne pas oublier le point dans :=.Range("E3:E619"), ...

Pour que l'ensemble des macros soit lancé à l'ouverture du classeur, la macro que j'avais nommé ToutesMacros() doit se trouver dans ThisWorkbook Private Sub Workbook_Open()

A+
 

gacr0

XLDnaute Nouveau
Re : Exécuter plusieurs macros à l'ouverture

Bonjour
Merci de votre aide, j'ai pratiquement réussi. Par contre, il me reste un petit problème. Ma première macro demande de sortir dans une feuille toutes les valeurs vides. Dans une seconde feuille (macro jours5) je demande d'éliminer dans une autre colonne toutes les valeurs vides. Je demande la même chose dans ma macro 3 jours15. Lorsque j'affecte mes macros, la premiere (appels) est correctement effectuée mais les macros jours5 et jours15 font soudainement abstraction de ce filtre. Pourtant les autres composantes de ces macros sont conservées.

Pouvez-vous m'aider ?

Voici le code :
Code:
Sub appels()
'
' appels Macro
'

'
    With Worksheets("Suivi des appels")
    .Range("$A$3:$G$4000").AutoFilter Field:=7, Criteria1:="=*vide*" _
        , Operator:=xlAnd
    ActiveSheet.Range("$A$3:$G$4000").AutoFilter Field:=5, Criteria1:= _
        "<>*vide*", Operator:=xlAnd
End With
End Sub


Code:
Sub jours5()
'
' jours5 Macro
'

'
    With Worksheets("Suivi 5 jours")
    .Range("$A$3:$G$15003").AutoFilter Field:=7, Criteria1:= _
        "En attente"
    ActiveWorkbook.Worksheets("Suivi 5 jours").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Suivi 5 jours").AutoFilter.Sort.SortFields.Add Key _
        :=Range("F3:F15003"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Suivi 5 jours").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveSheet.Range("$A$3:$G$15003").AutoFilter Field:=5, Criteria1:= _
        "<>*vide*", Operator:=xlAnd
End With
End Sub

Code:
Sub jours15()
'
' jours15 Macro
'

'
    With Worksheets("Suivi 15 jours")
    .Range("$A$3:$G$4003").AutoFilter Field:=7, Criteria1:= _
        "En attente"
    ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort.SortFields.Add Key _
        :=Range("F3:F4003"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Suivi 15 jours").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveSheet.Range("$A$3:$G$10003").AutoFilter Field:=5, Criteria1:= _
        "<>*vide*", Operator:=xlAnd
End With
End Sub

NB: J'ai finalement choisi d'exécuter ces macros à l'aide d'un bouton de commande.
 

gacr0

XLDnaute Nouveau
Re : Exécuter plusieurs macros à l'ouverture

Lorsque je dis : Lorsque j'affecte mes macros, la premiere (appels) est correctement effectuée mais les macros jours5 et jours15 font soudainement abstraction de ce filtre

Je veux dire que dans ces macros, le filtre sur les valeurs vide n'Est pas pris en compte.

Merci de votre précieuse aide !
 

Paf

XLDnaute Barbatruc
Re : Exécuter plusieurs macros à l'ouverture

Re

Je ne peux pas tester le code qui utilise des instructions que ne connait pas Excel 2003.

Par ailleurs j'ai pris la peine de modifier les macros à titre d'exemple pour vous montrer une façon de faire, mais visiblement cela ne vous convient pas !!

Bonne suite
 

Discussions similaires

Réponses
5
Affichages
200

Statistiques des forums

Discussions
312 176
Messages
2 085 965
Membres
103 069
dernier inscrit
jujulop