Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/10/2011, 01h13   #1
 
Inscription : décembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 16
Points : -5
Points : -5
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
Type de fichier : zip ComboBox.zip (40,3 Ko, 6 affichages)
Magic_Doctor est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/10/2011, 01h24   #2
 
Inscription : décembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 16
Points : -5
Points : -5
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.
Magic_Doctor est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/10/2011, 06h26   #3
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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 ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 16h41   #4
 
Inscription : décembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 16
Points : -5
Points : -5
Voici les codes :

Code :
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
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 :
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 :
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
Magic_Doctor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 19h00   #5
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Déjà tu pourrai supprimer cette ligne :

il ne suffit pas d'inhiber les erreurs il faut aussi traiter celles-ci ..!
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2011, 05h02   #6
 
Inscription : décembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 16
Points : -5
Points : -5
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.
Magic_Doctor est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 22/10/2011, 22h06   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 22h40   #8
 
Inscription : décembre 2007
Messages : 16
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 16
Points : -5
Points : -5
Inutile de t'entêter avec le "On Error Resume Next" que j'avais à un moment donné placé mais qui s'avérait inutile puisque la procédure fonctionne. Du reste, quand on la décortique un tant soit peu, il n'y a rien de bizarre qui saute aux yeux.
En conséquence, ces fameux "On Error Resume Next" je les ai tous virés, la procédure marche bien mais achoppe avec le ComboBox3.
Il faut définitivement chercher ailleurs que le sempiternel "On Error Resume Next", donc faire preuve de davantage de perspicacité.
Magic_Doctor est déconnecté   Envoyer un message privé Réponse avec citation 02
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h29.


 
 
 
 
Partenaires

Hébergement Web