userform pour lancer macro

Katoch

XLDnaute Junior
Bonsoir Forum et bon w-e à tous !

J'ai réussi à réaliser cette macro avec l'enregistreur et elle fonctionne .
Je souhaiterais utiliser un userform avec 2 listes modifiables :
Liste 1 : contient les choix A ; B ; C ; D par ex.
Liste 2 : contient les noms des mois

L'utilisateur sélectionne son choix dans la liste modifiable 1 , puis sélectionne le mois dans la liste modifiable 2 :

Le choix du mois lance la macro et la macro exécute le code en tenant compte du mois choisi .

Si vous pouviez m'aider à réaliser ce rêve ...!!!
Pouvez vous me construire le userform afin que je comprenne le code nécessaires aux actions demandées ?
Pouvez vous apporter la modification au code de la macro ci-dessous pour que le mois sélectionné soit choisi pour filtrer :
ActiveSheet.Range("$A$5:$R$1048576").AutoFilter Field:=12, Criteria1:= _
xlFilterThisMonth, Operator:=xlFilterDynamic

Merci par avance.

Sub ACHATS()
'
' ACHATS Macro
'

'
Sheets("OPEX").Select
Rows("5:5").Select
Selection.AutoFilter
Selection.AutoFilter
ActiveSheet.Range("$A$5:$R$1048576").AutoFilter Field:=12, Criteria1:= _
xlFilterThisMonth, Operator:=xlFilterDynamic
Application.Run "'Budgets 2011 vf .xlsm'!MacroFiltreNatCptACHATS_050RG1"
Application.Run "'Budgets 2011 vf .xlsm'!MacroImputAUX_ORD"
Range("J4").Select
Selection.Copy
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Rows("5:5").Select
Selection.AutoFilter
Selection.AutoFilter
ActiveSheet.Range("$A$5:$R$1048576").AutoFilter Field:=12, Criteria1:= _
xlFilterThisMonth, Operator:=xlFilterDynamic
Application.Run "'Budgets TST HTA 2011 vf .xlsm'!MacroFiltreNatCpt050RG1"
ActiveSheet.Range("$A$5:$R$1048576").AutoFilter Field:=4, Criteria1:= _
"=K3272KL", Operator:=xlOr, Criteria2:="=K3272KM"
Range("J4").Select
Selection.Copy
Range("D3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("D4").Select
ActiveCell.FormulaR1C1 = "=(R[-2]C-R[-1]C)/1000"
Range("D4").Select
Selection.Copy
Sheets("RésultatsOPEX").Select
Range("F35").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : userform pour lancer macro

Bonsoir Katoch, bonsoir le forum,

Sans un fichier exemple ne contenant pas de données cofidentielles et reprenant la structure de ton fichier proginal (nom des onglets, plages nommées, etc.) difficle de t'aider... Pas besoin de beaucoup de données juste la quantité nécessaire à résoudre ton problème. Aide-nous à t'aider...
 

Brigitte

XLDnaute Barbatruc
Re : userform pour lancer macro

Bonjour,

Quelle durée as tu choisi pour ton fichier ? si c'est 4 jours, attention, je crois que Robert ne touche pas à internet le we... alors veille et reposte le sur cijoint s'il avait disparu !

Bonne journée.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : userform pour lancer macro

Bonjour le fil, bonjour le forum,

Katoh, avec ma version 2003 j'arrive à ouvrir ton classeur avec un convertisseur mais ça plante tout le temps... Donc plus essayer de résoudre ton problème il me faudrait d'abord prendre le temps de le deboger. Désolé je n'en ai ni le temps ni l'envie. Je pense que tu devrais fournir un exmple hyper simplifié avec juste ton problème mais je ne sais pas si c'est possible... Bonne chance.
 

dra72

XLDnaute Occasionnel
Re : userform pour lancer macro

Bonjour Katoch et à tous

Pour ma part, je n'arrive pas à ouvrir ton fichier. J'obtiens simplement un fichier zip avec fichiers xml.

Je ne connais pas le principe de fonctionnement du site cijoint. Est-ce du à un problème de délai?

Bonne journée à vous.
 

Pierrot93

XLDnaute Barbatruc
Re : userform pour lancer macro

Bonjour à tous

De toute évidence, un tout petit fichier placé directement sur le forum et ne représentant que le problème posé, permet d'obtenir des réponses plus appropriées et plus rapidement...

bonne journée
@+
 

Katoch

XLDnaute Junior
Re : userform pour lancer macro

Bonsoir forum,
Et bien , est -ce une autre énigme informatique ??
Je vous confirme qu'à cette heure le fichier est encore dispo , et s'ouvre (ouvert avec w2007 et w2010).
J'ai contacté des amis qui me confirment aussi la disponibilité et l'ouverture du fichier sans pb...

j'espère que quelqu'un d'autre du forum essayera .
 

dra72

XLDnaute Occasionnel
Re : userform pour lancer macro

Bonjour Katoch et à tous,

J'ai réussi à télécharger ton fichier en utilisant Firefox au lieu de IE.

Quelques petites questions avant de commencer à faire ce que tu demandes.

As-tu supprimé des feuilles, des lignes ou des colonnes dans ton fichier ou est-il complet?
Par exemple: Le filtre sur les colonnes N à S est il utile puisque aucune données?

Dans ta feuille OPEX, tu as des cellules utilisées au dessus de la ligne 5.
A mon avis, elles ne servent qu'à stocker des données temporaires.
En plus alimentées avec des select et des copier-coller successifs.
As-tu une autre explication?

Je pense qu'un petit nettoyage s'impose.

D'autre part, tu me disais, sur un autre post, que l'utilisation de showalldata ralentissait ton projet.
Est-ce sur celui-ci ou un autre projet?
J'ai essayé sur celui-ci et tout fonctionne correctement chez moi.

A te lire sachant que je suis partant pour t'aider sur ce que tu as demandé sans te promettre d'y parvenir dans un délai restreint.

Bonne journée
 

Katoch

XLDnaute Junior
Re : userform pour lancer macro

Bonsoir forum , salut dra72 !

Effectivement le projet complet faisant plus de 20Mo , j'ai supp pas mal d'onglets et de données.
Mais en gros , les macros de ce projet (réalisées avec l'enregistreur de macro ) ,ne sont que des p'tits frères.
Une fois que tu auras pu répondre à mes attentes , je dupliquerai j'espère sans trop de difficultés.Ce qui m'aidera à progresser dans la compréhension des codes , certainement.
Ah , important , il n' y a pas le feu au lac ! Prends ton temps , et n'hésite pas à me poser toutes questions nécessaires.
Cordialement et bon courage !


Je réponds à tes questions (mais tu avais tout deviné ),
Le filtre sur les colonnes N à S est il utile puisque aucune données?
Non.

A mon avis, elles ne servent qu'à stocker des données temporaires.
Oui , tu as raison , les lignes 1 à 4 stockent des calculs ou données intermédiaires.
Toutes les macros se servent de cette ligne 5 comme référence
Rows("5:5").Select
Selection.AutoFilter
En plus alimentées avec des select et des copier-coller successifs.=>exactement.

...l'utilisation de showalldata ralentissait...=> oui sur le projet complet.
Certaines macros démarrent lentement (très lentement ) puis s'accélèrent .Une deuxième relance voire troisième et le projet se déroule "normalement".Mais bon , peu attendre .
 

dra72

XLDnaute Occasionnel
Re : userform pour lancer macro

Bonsoir Katoch et le Forum,

Je te propose dans un premier temps ceci pour réduire un peu la lourdeur des macros

Code:
Sub MacroOPEXTotal()
    
    Application.ScreenUpdating = False
    
    MacroOPEXACHATS
    MacroOPEXENG
    MacroOPEXChPers
    MacroOPEXChAff
    MacroOPEXImpôtstaxes
   
    Sheets("RésultatsOPEX").Activate
    Range("D33").Select
    
    Application.ScreenUpdating = True

End Sub

Sub MacroOPEXACHATS()
    
    Dim X As Double
    Sheets("OPEX").Activate
    With Range("A5:M5")
      .AutoFilter
      .AutoFilter
    End With
    MacroFiltreNatCptACHATS_050RG1
    MacroImputAUX_ORD
    X = Range("J4")
    With Range("A5:M5")
      .AutoFilter
      .AutoFilter
    End With
    MacroFiltreNatCpt050RG1
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=4, Criteria1:= _
        "=K3272KL", Operator:=xlOr, Criteria2:="=K3272KM"
    Sheets("RésultatsOPEX").Range("F33") = (X - Range("J4")) / 1000
    
End Sub
Sub MacroOPEXENG()
    
    Dim X As Double
    Sheets("OPEX").Activate
    With Range("A5:M5")
      .AutoFilter
      .AutoFilter
    End With
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=1, Criteria1:="=ENG*", _
        Operator:=xlAnd
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=10, Criteria1:= _
        "=?327P*", Operator:=xlOr, Criteria2:="=**/E**"
    X = Range("L4")
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=1
    MacroFiltreNatCpt050RG1
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=4, Criteria1:="=Z**", _
        Operator:=xlAnd
    Sheets("RésultatsOPEX").Range("G33") = (-X - Range("L4")) / 1000
    
End Sub
Sub MacroOPEXChPers()
    
    Sheets("OPEX").Activate
    With Range("A5:M5")
      .AutoFilter
      .AutoFilter
    End With
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=1, Criteria1:="=060*", _
        Operator:=xlAnd
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=10, Criteria1:="<E327" _
        , Operator:=xlOr, Criteria2:="=**/E**"
    Sheets("RésultatsOPEX").Range("H33") = Range("L4") / -1000
    
End Sub

Sub MacroOPEXChAff()
    
    Sheets("OPEX").Activate
    With Range("A5:M5")
      .AutoFilter
      .AutoFilter
    End With
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=1, Criteria1:="=704180" _
        , Operator:=xlAnd
    Sheets("RésultatsOPEX").Range("E33") = Range("L4") / 1000
    
End Sub
Sub MacroOPEXImpôtstaxes()
    
    Sheets("OPEX").Activate
    With Range("A5:M5")
      .AutoFilter
      .AutoFilter
    End With
    ActiveSheet.Range("$A$5:$M$1048576").AutoFilter Field:=1, Criteria1:="070RG1"
    Sheets("RésultatsOPEX").Range("J33") = Range("L4") / -1000

End Sub

Si quelque chose t'échappe dans ce code, n'hésite pas à me demander.

Concernant ta principale demande (Insérer une USF pour sélection d'un mois pour compléter ton tableau en page RésultatsOPEX), ne pourrait-on pas compléter ce tableau en une seule fois en ventilant bien sur par mois?

Pourrait-on également supprimer ton tableau en lignes 31 à 33?
Suivant tes réponses, je pourrais éventuellement te proposer une autre solution.

Bonne soirée et à+
 

Katoch

XLDnaute Junior
Re : userform pour lancer macro

Bonsoir dra72 !

Que dire ...SUPER ! , le code des macros remplacé dans mon projet complet , fais passer de 8" à 2" le délai de traitement.
Par comparaison des codes , j'ai compris que tu cherchais à simplifier, les "Selection.Copy " en remplaçant par une variable X(?bonne terminologie).Je pense pouvoir adapter ceci aux autres macros du projet.(ce w-e...)
Et même pas la moindre erreur , celà fonctionne du premier coup.

Réponses aux questions :
Concernant ta principale demande (Insérer une USF pour sélection d'un mois pour compléter ton tableau en page RésultatsOPEX), ne pourrait-on pas compléter ce tableau en une seule fois en ventilant bien sur par mois?
=> pourquoi pas,finalement ;d'autant que la vitesse de calcul ne devrait pas être une gêne !
Pourrait-on également supprimer ton tableau en lignes 31 à 33?
=>oui ! et même au delà sans pb;

pour ton info , et pour peut être t'aider dans ta réflexion , mon projet comporte 3 autres onglets comparables , construits de la même façon , tant au niveau codes que présentation des résultats.A la fin, j'aurai besoin d'un code qui aille rechercher les résultats d'un mois donné (combolist ?) de chacun de ces onglets.

A+
 

Discussions similaires

Réponses
2
Affichages
124

Statistiques des forums

Discussions
312 305
Messages
2 087 082
Membres
103 457
dernier inscrit
fab2614