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 ?

merci j'ai galéré (je débute)

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

Rechercher des sujets similaires à "placer code worksheet activate"