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 :

Interférence entre 2 ComboBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut Interférence entre 2 ComboBox
    Bonsoir,

    Voilà plusieurs jours que je galère à propos d'une bizarrerie excelienne.

    J'ai 2 ComboBox sur la même feuille.
    Quand on choisit un item dans le 1er ComboBox, le résultat est quasi instantané, puis ça se remet à calculer je ne sais quoi.
    Quand on choisit ensuite un item dans le 2ème ComboBox, le résultat est lui aussi quasi instantané, puis, bizarrement, le 1er item de la liste s'impose...
    J'ai un peu tout essayé pour résoudre ce problème mais sans succès.
    Je me suis même demandé si ça ne provenait pas de mon ordinateur ou du logiciel. J'ai essayé sur un autre PC et le problème persiste.
    Il y aurait-il des espèces d'incompatibilités entre plusieurs ComboBox sur une même feuille ?

    Merci d'avance pour toute aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Je viens de lire la charte.

    Je pense, sans trop exagérer, que sans exemple dans le cas de ce fil, il serait impossible de comprendre quoi que ce soit au sujet de mon problème. J'aurais pu, bien sûr, recopier les procédures, mais je pense que le classeur est nettement plus parlant.

    Bonne soirée à tous.

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Un peu d'effort S.V.P

    on voudrais voir le code ... (sur le forum , pas dans les pièces jointes que j'ouvre pas ...)


    utilise tu des procédure événementielle liées à tes deux combobox ?

  4. #4
    Membre actif
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Voici les codes :

    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
    Option Explicit
    -------------------------------------------------------------------------
    Private Sub ComboBox2_Click()
    'job75 / Magic_Doctor
     
    On Error Resume Next
     
    Dim NumFeuille As Variant, nom As Name, SousZone As Range, lig As Byte, NomSZ As Variant
     
    Application.ScreenUpdating = False
     
    'Récupère le numéro de la feuille sélectionnée dans la liste du "ComboBox2"
    NumFeuille = Application.VLookup(ComboBox2, [ListeOnglets2], 2, 0)
    If IsError(NumFeuille) Then Exit Sub
     
    'Listage des tableaux ("SousZones") de la feuille (de GAUCHE à DROITE & de HAUT en BAS)
    With [ListeSousZones].Resize(, 3) '2 colonnes auxiliaires
        .Value = ""
        [ListeTableaux].ClearContents
        If ComboBox2.ListIndex = -1 Then Exit Sub
        For Each nom In Worksheets(NumFeuille).Parent.Names
            If nom.Name Like "SousZone*" Then
                Set SousZone = Evaluate(nom.Name)
                If SousZone.Parent.Name = ComboBox2 Then
                    lig = lig + 1
                    .Cells(lig, 0) = "TABLEAU " & lig
                    .Cells(lig, 1) = nom.Name
                    .Cells(lig, 2) = SousZone.Row 'ligne
                    .Cells(lig, 3) = SousZone.Column 'colonne
                End If
            End If
        Next
        'tri par ligne puis par colonne
        .Sort .Columns(2), xlAscending, .Columns(3), , xlAscending
        'efface les 2 colonnes auxiliaires
        .Offset(, 1).Resize(, 2).Value = ""
    End With
     
    'Actualisation du "ComboBox3"
    With ComboBox3
      .ListFillRange = [ListeTableaux].Resize(lig).Address
      .ListRows = lig
      .ListIndex = 0  'Le problème semble être là !!!!!!!!!!!!!!!!!!!
    End With
     
    'Récupère le nom de la plage "SousZone" correspondant au 1er tableau
    '(qui est sélectionné par défaut) dans la liste du "ComboBox3"
    NomSZ = Application.VLookup(ComboBox3, [ListesSousZones], 2, 0)
    If IsError(NomSZ) Then Exit Sub
     
    'Récupère les couleurs des lignes du 1er tableau de la liste du "ComboBox3"
    'pour les transférer aux cellules "CouleurLignes_a" & "CouleurLignes_b"
    Call CouleursLignes(CStr(NomSZ))
     
    'Assigne, dans la feuille "Items", le nom de l'en-tête ("SousZone") correspondant
    'au 1er item dans la liste du "ComboBox3"
    [EnTête] = NomSZ
    'Afin que soit sélectionné par défaut le 1er item de la liste de chacune
    'des 3 colonnes gérées par l'USF
    [ChxItem] = [FirstListeItems]: [ChxOrdre] = 1: [ChxColonnes] = 1
     
    '[CH50].Select
     
    End Sub
    -------------------------------------------------------------------------

    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
    Private Sub ComboBox3_Click()
    'Magic_Doctor
     
    On Error Resume Next
     
    Dim NomSZ As Variant, SZ As Range
     
    'Application.ScreenUpdating = False
     
    'Récupère le nom de la plage "SousZone" correspondant au tableau
    'sélectionné dans la liste du "ComboBox3"
    NomSZ = Application.VLookup(ComboBox3, [ListesSousZones], 2, 0)
    If IsError(NomSZ) Then Exit Sub
     
    'Récupère les couleurs des lignes du tableau correspondant à la plage "SousZone"
    'pour les transférer aux cellules "CouleurLignes_a" & "CouleurLignes_b"
    Call CouleursLignes(CStr(NomSZ))
     
    'Assigne, dans la feuille "Items", le nom de l'en-tête ("SousZone")
    'qui a été sélectionné dans la liste du "ComboBox3"
    [EnTête] = NomSZ
    'Afin que soit sélectionné par défaut le 1er item de la liste de chacune
    'des 3 colonnes gérées par l'USF
    [ChxItem] = [FirstListeItems]: [ChxOrdre] = 1: [ChxColonnes] = 1
     
    '[CH50].Select
     
    End Sub
    -------------------------------------------------------------------------

    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
    Sub CouleursLignes(NomSZ As String)
    'Récupère les couleurs des lignes du tableau correspondant à la plage "SousZone"
    'pour les transférer aux cellules "CouleurLignes_a" & "CouleurLignes_b"
    'Magic_Doctor
     
    Dim NumFeuille As Variant, SZ As Range, ad As String
     
    'Récupère le numéro de la feuille sélectionnée dans la liste du "ComboBox2"
    NumFeuille = Application.VLookup(ComboBox2, [ListeOnglets2], 2, 0)
    If IsError(NumFeuille) Then Exit Sub
     
    'Localise la plage "SousZone"
    Set SZ = Evaluate(NomSZ)
     
    'Récupère l'adresse de la 1ère cellule située immédiatement sous la plage "SousZone"
    ad = Range(Range(SZ.Address).Offset(1, 0).Address).Cells(1).Address
    [CouleurLignes_a].Interior.Color = Worksheets(NumFeuille).Range(ad).Interior.Color
    [CouleurLignes_b].Interior.Color = Worksheets(NumFeuille).Range(ad).Offset(1, 0).Interior.Color
     
    End Sub

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Déjà tu pourrai supprimer cette ligne :

    il ne suffit pas d'inhiber les erreurs il faut aussi traiter celles-ci ..!

  6. #6
    Membre actif
    Inscrit en
    Décembre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 37
    Par défaut
    Je sais bien que le "On Error resume next" est presque un aveu de défaite ; mais si l'on s'adresse à un forum, c'est que l'on reconnaît humblement ses limites (sinon pourquoi existeraient les forum ?) et que l'on attend une réponse plus pertinente.
    Je ne pense pas qu'il y ait, dans les procédures, d'erreurs majeures qui soient responsables de ce problème. Le problème est semble-t-il nettement plus subtil et tient au langage VBA (bien souvent abscons) lui-même. Pour preuve : on vient de me conseiller de changer (pour le "ComboBox2" par exemple) "ComboBox2_Click" par "ComboBox2_DropButtonClick", et "miraculeusement" ça marche. Pourquoi ? Allez savoir... En revanche, ce problème dorénavant réglé, subsiste un dernier : quand j'actionne le ComboBox3, curieusement je n'arrive pas à obtenir "[ChxItem] = [FirstListeItems]".
    La vida siempre nos reserva cosas extrañas.

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par bbil Voir le message
    Déjà tu pourrai supprimer cette ligne :

    il ne suffit pas d'inhiber les erreurs il faut aussi traiter celles-ci ..!
    si tu est "débutant" et que tu ne comprends pas le fonctionnement de On Error resume next ... mieux vaut ne pas l'utiliser .. car de la façon dont tu l'utilise cela revient à conduire en se bandant les yeux...

Discussions similaires

  1. [Cookies] Empecher interférences entre sessions php
    Par reventlov dans le forum Langage
    Réponses: 4
    Dernier message: 04/06/2008, 11h33
  2. Interférence entre deux programmes
    Par eyquem dans le forum Général Python
    Réponses: 1
    Dernier message: 01/06/2008, 15h10
  3. Liaison entre un comboBox et un dataset
    Par robocop2776 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/01/2007, 18h02
  4. Interférence entre références ?!
    Par janou dans le forum Access
    Réponses: 2
    Dernier message: 12/12/2005, 18h36
  5. recherche composant hybride entre le ComboBox et le DBLookup
    Par Calixte dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/06/2004, 13h32

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