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 :

Petit problème, surement dans le Worksheet_Activate() [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut Petit problème, surement dans le Worksheet_Activate()
    Bonjour,

    Alors, voilà mon petit code

    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
    Private Sub ComboBox1_Change()
     
        'var
       Dim etude As String
        Dim A As Integer
     
        'debut
        A = 1
        While Sheets("etude").Cells(A, 1).Text <> Sheets("Plannifier étude").ComboBox1.Text
             A = A + 1
            Sheets("plannifier étude").TextBox1 = Sheets("etude").Cells(A, 2)
        Wend
     
    End Sub
     
     
    Private Sub ComboBox2_Change()
     
    'var
        Dim b As Integer
     
        'debut
        b = 1
        While Sheets("equipes").Cells(b, 1).Text <> Sheets("Plannifier étude").ComboBox2.Text
             b = b + 1
            Sheets("plannifier étude").TextBox4 = Sheets("equipes").Cells(b, 2)
            Sheets("plannifier étude").TextBox5 = Sheets("equipes").Cells(b, 3)
        Wend
     
    End Sub
     
     
    Private Sub Worksheet_Activate()
     
        'var
        Dim étude As String
        Dim A As Integer
        Dim b As Integer
     
        'debut
        Sheets("Plannifier étude").ComboBox1.Clear
        A = 2
        étude = Sheets("etude").Cells(A, 1).Value
        Sheets("Plannifier étude").ComboBox2.Clear
        b = 2
        étude = Sheets("equipes").Cells(b, 1).Value
     
        While étude <> ""
            Sheets("Plannifier étude").ComboBox1.AddItem étude
            Sheets("Plannifier étude").ComboBox2.AddItem étude
            A = A + 1
            b = b + 1
            étude = Sheets("etude").Cells(A, 1).Value
            étude = Sheets("equipes").Cells(b, 1).Value
        Wend
     
    End Sub
    C'que je comprends pas, c'est que, si ma ComboBox2 est indépendante du Worksheet_Activate(), elle ne marche pas, et vis-versa pour la ComboBox1. Avec ce code, c'est la ComboBox2 qui marche pas

    Quelqu'un pourrait-il m'aider à comprendre d'où vient le problème ???

    J'ai sans doute du cafouiller dans la boucle et mal placer mes instructions

    Merci d'avance de votre aide

    Au plaisir de vous lire

    Aphroditeuh

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Aphroditeuh et le forum
    Ton problème n'est pas lié à une erreur de code, mais a une erreur de "raisonnement".
    Mais je ne comprends pas tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ComboBox1_Change()
    'var
    Dim etude As String
    Dim A As Integer
    'debut
    A = 1
    While Sheets("etude").Cells(A, 1).Text <> Sheets("Plannifier étude").ComboBox1.Text
            A = A + 1
           Sheets("plannifier étude").TextBox1 = Sheets("etude").Cells(A, 2)
    Wend
    End Sub
    C'est bien de déclarer les variables, mais deux remarques :
    - À quoi sert etude ? Tu la déclares, mais ne l'utilises pas. Ne déclare que ce qui est utilisé.
    - Ta variable A est utilisée pour le numéro de ligne. La déclarer en Integer n'est pas adapté : si tu dépasses les 32735 lignes (pas ici, mais plus tard), tu auras une erreur, et comme ça marche sur un bout de test... Moi, je préfère déclarer mes variables dans le format où une fonctionnement aux limites ne déclenche pas d'erreur (en Long pour les lignes). Le gain/perte de place mémoire est négligeable.
    si tu fais ta macro en Pas-à-pas :
    tant que Sheets("etude").Cells(A, 1).Text <> Sheets("Plannifier étude").ComboBox1.Text tu :
    - augmentes de 1 la variable A
    - remplis la textbox1 avec la baleur en B ligne A
    Pas glop, pas glop :
    - si la colonne A ne contient pas la valeur de la combobox, tu vas aller jusqu'à la limite de ta feuille (de ton Integer) avant de déclencher une erreur.
    - à chaque valeur de A tu remplis ta textbox1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub ComboBox1_Change()
    'var
    Dim A As Long
    'debut
    A = 1
    While Sheets("etude").Cells(A, 1) <> Sheets("Plannifier étude").ComboBox1
            A = A + 1
    Wend
    Sheets("plannifier étude").TextBox1 = Sheets("etude").Cells(A, 2)
    End Sub
    La même que la tienne, mais on inscrit qu'une seule fois dans la textbox1. Il reste toujours le risque de n'avoir pas la donnée, mais si tu l'as faite comme ça...
    Le même raisonnement est applicable à la combobox2

    Pour Private Sub Worksheet_Activate() on va juste regarder ta boucle :
    While étude <> ""
    ComboBox1.AddItem étude
    ComboBox2.AddItem étude
    A = A + 1
    b = b + 1
    étude = Sheets("etude").Cells(A, 1).Value
    étude = Sheets("equipes").Cells(b, 1).Value
    Wend
    Tant que étude n'est pas vide
    ajouter étude à Combobox1
    ajouté la même étude à combobox2
    ajouter 1 à A et B
    remplacer la valeur de étude par cellule en A ligne A de "etude"
    remplacer la valeur de étude par cellule en A ligne b de "equipes"

    Pas sûr que ce soit ce que tu voulais faire ???
    Excel fait toujours ce qu'on lui demande, parfois ce qu'on voudrait qu'il fasse

    Utilises 2 variables soit dans 2 boucles soit dans une seule : les données fournies ne permettent pas d'orienter ton choix.
    A+

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 13
    Par défaut
    Merci Gorfael, j'avais trouvé mon erreur avant que tu postes ta réponse mais merci quand même, elle est instructive

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

Discussions similaires

  1. Petit problème dans une fonction
    Par Jiyuu dans le forum wxPython
    Réponses: 6
    Dernier message: 08/07/2008, 22h49
  2. [MySQL] Un petit problème dans ma requette
    Par abzal dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/06/2008, 15h12
  3. Petit Problème d'une balise ancrée dans une autre
    Par stansoad0108 dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2008, 10h23
  4. Petit Problème dans une GTK-Table
    Par simtim dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 16/04/2007, 11h41
  5. Réponses: 3
    Dernier message: 15/07/2005, 17h58

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