Placer un code dans Worksheet_Activate
Bonjour,
Le code ci dessous fonctionne quand il est dans général. Or j'aimerais qu'il se déclenche quand je clique sur une feuille. Du coup je vais bien dans Private Sub Worksheet_Activate() de la feuille qui doit déclencher la macro quand je clique sur elle non? La feuille que je veux activer s'appelle Analyse1
Le code est le suivant que je place entre le private du début et le End sub de la fin
Merci
Sheets("Saisie").Select
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=3
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=5
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=3, Criteria1:= _
Array("P1", "P2", "PT"), Operator:=xlFilterValues
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=5, Criteria1:= _
Array("111 - Tenue des dossiers fournisseurs et sous-traitants", _
"112 - Traitement des ordres d’achat, des commandes", _
"113- Traitement des livraisons, des factures et suivi des anomalies", _
"114- Évaluation et suivi des stocks", _
"115- Gestion des règlements et traitement des litiges", _
"121- Participation à la gestion administrative de la prospection", _
"122- Tenue des dossiers clients, donneurs d’ordre et usagers", _
"123- Traitement des devis, des commandes", _
"124- Traitement des livraisons et de la facturation", _
"125- Traitement des règlements et suivi des litiges.", _
"131- Suivi de la trésorerie et des relations avec les banques", _
"132- Préparation des déclarations fiscales", _
"133- Traitement des formalités administratives", _
"134- Suivi des relations avec les partenaires métiers"), Operator:= _
xlFilterValues
Sheets("Analyse1").Select
Range("A93").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(Saisie!C[5]:C[6],""a"")"
Range("A94").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(Saisie!C[5]:C[6],""b"")"
Range("A95").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(Saisie!C[5]:C[6],""c"")"
Range("A96").Select
ActiveCell.FormulaR1C1 = "=COUNTIF(Saisie!C[5]:C[6],""d"")"
Je n'ai peut-être pas bien compris mais je propose dans le code de la feuille Analyse 1 :
Private Sub Worksheet_Activate()
Run "Nom_de_la_macro"
End Sub
Bonjour, j'ai compris mon problème en fait mais je ne sais pas le résoudre
Ma macro dit
si tu actives la feuille "analyse"
tu vas sur la feuille "saisie"
tu y fais ton filtre et tu retournes sur la feuille analyse
et c'est là que ça coince je pense car la feuille es du coup activé
et donc il va sur la feuille saisie faire le filtre et
retourne sur la feuille analyse
etc etc etc ... ça fait une boucle...
Je pense que cela doit être ça non ?
mais du coup si j'ai raison comment résoudre ce souci?
je pense que tu as raison. Il faut donc positionner un drapeau qq part pour tester si le filtre a déjà été exécuté.
Soit tu passes par une variable ouverte
Soit tu l'inscris qq part dans une cellule d'une des feuilles. Ca peut donner les codes suivants :
Dans l'onglet Analyse1
Private Sub Worksheet_Activate()
If Sheets(2).Range("A1") = "X" Then
Exit Sub
Else
Run "Ma_Macro_de_filtrage"
End If
End Sub
Et dans la macro de filtrage
Sub Ma_Macro_de_Filtrage()
Sheets(2).Range("A1") = ""
'Traitement
Sheets(2).Range("A1") = "X"
End Sub
Cela ne permettra qu'une seule exécution du filtre
Il faut prévoir la remise à blanc de sheets(2).Range("A1") au plus tard avant de fermer le classeur
Je comprends ta solution. (enfin je crois car je suis débutant d'une grosse semaine)
tu lui dis de mettre en X en plus de la macro
et s'il y a déjà un X il ne relance pas la macro et du coup il la lance qu'une fois.
Merci pour ta gentillesse et ton astuce. J'ai réfléchi de mon côté et je vais mettre un bouton pour lancer la macro que je vais appeler "mise à jour avant d'imprimer". c'est plus chiant car il faut y pense mais je pourrais éventuellement m'en servir pour mettre à jour d'autre macros si j'ai besoin.
Merci encore à toi. Je note ton astuce car cela peut servir.
Bonne soirée.
bonjour
mon problème semble être de même nature
Bonjour
J'ai un dossier avec 14 feuillets
- un appelé identité
- un pour les sommations
- 12 (1 par mois)
Je suis positionné sur un des mois et j'active une procédure rajout qui doit entre autres mailler le fichier exel
or je mets à jour le feuillet identité (c'est le premier fichier) pour le maillage au lieu de le faire sur le mois appelant
Public fin As Long
Public mois As Integer
Public page_ec As Variant
avec
ActiveSheet.Unprotect
Range("A" & fin & ":H" & fin + 30).Borders.Weight = xlThin
j'ai essayé sans succès d autres méthodes
sheets (page_ec) .range etcc
merci de votre aide
je ne comprends pas trop le pb. Que se passe-t-il quand tu parles de
michelj64 a écrit :mailler le fichier exel
Peux-tu joindre un fichier et décrire à nouveau (mais différemment) ton pb ?
je n'arrivais pas à mettre à jour les données du feuillet appelant
(ex droit, quadrillage)
maintenant après avoir fait le ménage das le code généré automatiquement
cela vient d'être débloqué (j'allais prévenir)
voir
Public fin As Long
Public mois As Integer
Public page_ec As Variant
Sub rajout()
'selectionne depuis la ligne de fin jusqu'à 30 lignes de plus et met les bordures
' en apparant et en permettant l'accès à ces champs
Sheets(page_ec).Select
ActiveSheet.Unprotect
Range("A" & fin & ":H" & fin + 30).Select
ActiveWindow.SmallScroll Down:=fin + 30
Range("A" & fin & ":H" & fin + 30).Select
Selection.Locked = False
Selection.Borders.Weight = xlThin
Selection.FormulaHidden = False
' inscris la nouvelle dernière ligne du mois dans Identité
Sheets("Identité").Range("B" & mois + 15) = fin + 30
End Sub
Sub Deverouillage()
Sheets("Identité").Visible = True
Sheets("Identité").Select
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Selection.FormulaHidden = False
'Sheets("Identité" ).Visible = False
End Sub
Sub Verouillage()
Sheets("Identité").Select
ActiveSheet.Unprotect
Range("A15:B27").Select
Range("A15:B27").Activate
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("A15 :B27").Select
Sheets(page_ec).Select
End Sub
avec le fichier
Bonjour,
Pour revenir à la question de initiale de jfk15.
Une proposition qui lance 1 seule fois la procédure mais qui ré-arme pour pouvoir l'exécuter à chaque activation :
Private Sub Worksheet_Activate()
Static noExec as Boolean
If noExec Then Exit Sub
noExec = True
Run "Ma_Macro_de_filtrage"
noExec = False
End Sub
Enfin à tester, je n'ai pas été jusque là...
eric