IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enchainement de procédures [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Enchainement de procédures
    Bonjour le forum,

    je reviens avec mon problème de déploiement de plan :
    je clique sur une date, je réalise deux recherches sur une autre feuille pour pointer sur l'élèment intéressant et j'ouvre le plan à ce niveau.

    Ca fonctionne sur un classeur avec la même structure mais pas sur le fichier de production !

    Arrivant sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:A2199").Rows(1883).ShowDetail = True
    le programme lance une fonction indépendante non présente sur la feuille active (ongletName) contenant le plan mais présente sur la feuille que j'ai quitté (celle sur laquelle j'ai cliqué)

    Voici le code de la procédure utilisée (avec divers tests):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub PointeSurOP(TargetCalendrier As Range)
        Dim OngletName As String
        Dim DernLign As Long
        Dim NomEmploi As String
        Dim DateOp As Date
        Dim RgEmploi  As Range
        Dim RgDate As Range
        Dim cEmploi As Variant
        Dim ccDate As Variant
     
        '--- Récupère les paramètres de recherche
        NomEmploi = Cells(TargetCalendrier.Row, 2)       'Sur la même ligne mais en colonne 2 (B)
        DateOp = Format(TargetCalendrier.Value, "Short Date")     'TargetCalendrier.Value
     
        '--- Récupère les
        OngletName = "OP" & Trim$(Str$(Year(Range("B3"))) & "-" & Trim$(Str$(Year(Range("B3"))) + 1))
        DernLign = Worksheets(OngletName).Range("A65500").End(xlUp).Row
     
        'Pointe sur la première cellule pour lancer la cellule
        Worksheets(OngletName).Activate
     
        Set RgEmploi = Worksheets(OngletName).Range("A1:A" & DernLign)
     
        With RgEmploi
            Set cEmploi = .Find(What:=NomEmploi, After:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart)  
            If Not cEmploi Is Nothing Then
                'TargetCalendrier trouvé"
                'Affiche la sous-arborescence niveau 2
                Worksheets(OngletName).Activate
                ActiveSheet.Range("A91").Select
                 Range("A1:A2199").Rows(.Emploi.row).EntireRow.ShowDetail = True
     
                'Puisque la date intéressante est placée en dessous du premier nom correspondant entré
                'il suffit de chercher dans cette plage la première date correspondante
                Set RgDate = Worksheets(OngletName).Range("B" & cEmploi.Row & ":I" & DernLign)
                'Worksheets(OngletName).Activate
                'ActiveSheet.Range("B" & cEmploi.Row & ":I" & DernLign).Select
                'MsgBox "zone selectionnee"
                With RgDate
                                Set ccDate = .Find(What:=CDate(DateOp), LookIn:=xlFormulas)    'Format(DateOp, "jj-mmm")) ', LookIn:=xlValues)
                    If Not ccDate Is Nothing Then
                        'Affiche l'arborescence
                        Worksheets(OngletName).Activate
                        Range("A1:D9000").Rows(ccDate.Row).ShowDetail = True
                    Else
                        MsgBox "Pas trouvé la date" & DateOp & "dans la base", vbOK + vbCritical, "Erreur de redirection"
                    End If
                End With
            Else
                MsgBox NomEmploi & " non trouvé"
            End If
        End With
     
        '---
        Set RgEmploi = Nothing
        Set RgDate = Nothing
     
        Set cEmploi = Nothing
        Set ccDate = Nothing
    End Sub
    Voici le code d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        '--- Pour éviter d'ouvrir la cellule pour l'éditer
        Cancel = True
     
        '--- Double-Clic sur une date du calendrier ?
        If Not Intersect(Target, Union(Range("C5:T15"), Range("C19:T19"), Range("C31:T41"))) Is Nothing Then
            Call PointeSurOP(Target)
        End If
    End Sub
    Pourquoi je reviens sur la feuille précédente et refait la mise à jour ?

    ESVBA

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    A chaque fois que tu fais tu t'adresses à la feuille active. Mais ce n'est pas simple à maîtriser, et activer à chaque fois la feuille concernée ralentit l'exécution.
    Tu pourrais à chaque fois préciser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.WorkSheets("NomFeuille").Range(...)
    Ainis maîtriseras-tu mieux la plage effectivement concernée.

    Cordialement,

    PGZ

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    Bonjour pgz,

    merci de l'intérêt porté à mon problème.

    je crois rêver !

    Oui, il faut spécifier devant chacun de mes "Range(..."
    "Worksheets(OngletName).".

    Ca fonctionne ! Alors que les "select", "activate" n'ont rien fait.
    Que de temps perdu.

    Un grand merci à vous.

    ESVBA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Enchainement procédures évènementielles
    Par mondev dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 25/09/2009, 01h05
  2. Réponses: 3
    Dernier message: 09/07/2007, 14h52
  3. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 13h27
  4. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo