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 :

Probleme d'algorithmie entre onglets


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 118
    Par défaut Probleme d'algorithmie entre onglets
    Bonjour à tous

    Voilà. Un souci se présente à moi aujourd'hui. Ma feuille excel possede deux onglets.

    Dans mon onglet numéro 2, je fais appel, grace à la méthode Worksheet_Activate, à une méthode de l'onglet 1 qui fait elle même appel à ma méthode Worksheet_Activate de mon onglet 2. En clair, ca boucle en continue.

    Je n'ai pas d'idée pour palier à ce probleme. QQ un aurait il une idée?

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 577
    Par défaut
    tu peux essayer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 118
    Par défaut
    Salut

    EnableEvents?

    Je suis pas sur de comprendre.. Je dois placer cette instruction où?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 577
    Par défaut
    tu a une procedure appelante, et une procedure automatique. tu dois donc placer le enableevents dans la procedure appelante pour que l'automatique ne declenche pas

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 118
    Par défaut
    Ok

    J'ai tenté l'opération. J'ai placé le code dans ma procédure de l'onglet 1. Mais le résultat est toujours le meme. Ca boucle à l'infini....

    Est-ce moi qui suis-je une bille?

  6. #6
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir,

    Faute de frappe d’alsimbad apparement : c’est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = False
    qu’il faut placer au début de ton code pour que l’événement suivant ne déclenche pas la procédure associée.

    A la fin de ton code,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableEvents = True
    permet de réactiver les procédures événementielles. Difficile d’être + précis sans au moins un extrait de ton code

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 118
    Par défaut
    Super

    Merci à vous deux!

    A +

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 118
    Par défaut
    J'ai parlé trop vite. Ce matin au travail, cela ne marche pas...

    Voici le code de mon onglet 2 qui appele la procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_Activate()
    Call InitialiserOnglet("Carto Prob-Impact avec libellé")
    positionnerCartographieImpactEventualite ("Carto Prob-Impact avec libellé")
    End Sub
    Et le code du module

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    Sub InitialiserOnglet(Onglet As String)
     
        Application.EnableEvents = False
     
            ActiveWindow.ScrollWorkbookTabs Position:=xlLast
            Sheets("Modele Cartographie Impact Ev").Visible = True
            Sheets("Modele Cartographie Crit Maitri").Visible = True
            If (Onglet = "Carto Prob-Impact avec libellé") Or (Onglet = "Carto Prob-Impact sans libellé") Then
            Sheets("Modele Cartographie Impact Ev").Select
            ElseIf (Onglet = "Carto Criticité-Maitrise") Then
            Sheets("Modele Cartographie Crit Maitri").Select
            End If
            Cells.Select
            Selection.Copy
            ActiveWindow.ScrollWorkbookTabs Sheets:=-1
            ActiveWindow.ScrollWorkbookTabs Sheets:=-1
            ActiveWindow.ScrollWorkbookTabs Sheets:=-1
            ActiveWindow.ScrollWorkbookTabs Sheets:=-1
            ActiveWindow.ScrollWorkbookTabs Sheets:=-1
            Sheets(Onglet).Select
            Cells.Select
            ActiveSheet.Paste
            Sheets("Modele Cartographie Impact Ev").Visible = False
            Sheets("Modele Cartographie Crit Maitri").Visible = False
            Range("C5").Select
     
        Application.EnableEvents = True
     
    End Sub
     
     
    Public Sub positionnerCartographieImpactEventualite(Onglet As String)
     
        Application.EnableEvents = False
     
            Dim ligneRisque As Integer
            Dim risque As String
            Dim contenu As String
            Dim impact As String
            Dim prob As String
            Dim posimp As Integer
            Dim posprob As String
            Dim taillemait As Integer
            Dim maitrise As String
            Dim identifiant As String
            Dim libelle As String
            Dim texteAInserer As String
            Dim compteurdecalage1 As Integer
            Dim compteurdecalage2 As Integer
            Dim compteurdecalage3 As Integer
            Dim compteurdecalage4 As Integer
            Dim finDecalage As Integer
            Dim ligneVide As Integer
     
            compteurdecalage1 = 0
            compteurdecalage2 = 0
            compteurdecalage3 = 0
            compteurdecalage4 = 0
     
            ligneRisque = 7
            risque = "ok"
     
            Sheets("Table consolidée des risques").Activate
            Sheets("Table consolidée des risques").Select
     
            dateDebut = Sheets("Table consolidée des risques").Range("C2").Value
            dateFin = Sheets("Table consolidée des risques").Range("G2").Value
     
            Sheets(Onglet).Range("C2") = dateDebut
            Sheets(Onglet).Range("G2") = dateFin
     
            While (Not risque = "")
     
     ' ......
     
            Wend
     
            Application.EnableEvents = True
     
        End Sub
     
    Function rechercherCaseVide(Compteur As Integer, Colonne As String, ligne As Integer, Onglet As String) As Integer
     
            Application.EnableEvents = False
     
            Dim ligneVide As Integer
            Dim contenu As String
     
            i = 0
     
            For i = 0 To Compteur
     
          ' ....
     
            Next i
     
        Application.EnableEvents = True
     
    End Function
    Public Sub positionnerCartographieCriticiteMaitrise(Onglet As String)
     
        Application.EnableEvents = False
     
        Dim ligneRisque As Integer
        Dim risque As String
        Dim contenu As String
        Dim criticite As String
        Dim mait As String
        Dim poscrit As Integer
        Dim posmait As String
        Dim taillemait As Integer
        Dim maitrise As String
        Dim identifiant As String
        Dim libelle As String
        Dim compteurdecalage1 As Integer
        Dim compteurdecalage2 As Integer
        Dim compteurdecalage3 As Integer
        Dim finDecalage As Integer
        Dim ligneVide As Integer
        Dim texteAInserer As String
     
        compteurdecalage1 = 0
        compteurdecalage2 = 0
        compteurdecalage3 = 0
     
        ligneRisque = 7
        risque = "ok"
     
        dateDebut = Sheets("Table consolidée des risques").Range("C2").Value
        dateFin = Sheets("Table consolidée des risques").Range("G2").Value
     
        Sheets(Onglet).Range("C2") = dateDebut
        Sheets(Onglet).Range("E2") = dateFin
     
        While (Not risque = "")
     
       ' ....
     
        Wend
     
        Application.EnableEvents = True
     
    End Sub
    QQ'un pour m'éclairer?

  9. #9
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Il y a une balise pour reproduire le code, #, qui est la dernière de la seconde ligne au-dessus de la fenêtre dans laquelle tu rédiges ton message.

    Commence par l’utiliser, ton code sera + lisible, en particulier si tu l’indentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If Condition Then
            ' Traitement
        End If
    est beaucoup plus agréable à lire que

    If Condition Then
    ' Traitement
    End If

    Ensuite nettoie le code en supprimant les lignes inutiles comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    ou

    En effet, à défaut d’initialisation, un Integer prend pour valeur initiale 0. L’initialisation n’est donc utile que s’il s’agit de donner une valeur différente de 0.

    Ou alors, mets ton classeur en pièce jointe. Tel que, c’est illisible

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 118
    Par défaut
    C'est vrai que c'est illisible!

    Autant pour moi....

    J'ai trouvé la parade à mon probleme, en déclarant une variable globale, un boolean qui me permet de bloquer le déclenchement automatique de ma procédure Worksheet activate.

    Mais la solution du EnableEvents paraissait juste elle aussi.. Encore faut il savoir l'utiliser..

    Merci à plus

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

Discussions similaires

  1. [VB.NET] Probleme d'affichage entre ListBox/TextBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2004, 11h02
  2. [MFC] communication entre onglets d'une fenêtre
    Par bigboomshakala dans le forum MFC
    Réponses: 12
    Dernier message: 29/05/2004, 12h12
  3. Réponses: 2
    Dernier message: 25/05/2004, 11h40
  4. probleme de connexion entre delphi 7 et une BD access
    Par bob.marley dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/04/2004, 11h17
  5. Probleme de connection entre postgresql et PgAccess
    Par Missvan dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 24/03/2004, 11h14

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