XL 2019 suspendre l'execution Change() tout en modifiant le combobox

SPGoder

XLDnaute Occasionnel
Bonjour
C'est certainement une idée tordue, mais dans l'instruction suivant, quand le combobox1 reçoit une valeur, la macro se relance au début (normal puisque le combobox a alors changé)
Ma question, peut t on l’empêcher et qu'il modifie quand même la valeur de combobox1 et continue le code
J’espère avoir été assez clair dans l'explication
Je m'attends a une réponse : mauvaise utilisation, ou il y a moyen de faire autrement, et je n'en doute pas, mais cette question me taraude quand même
VB:
 Private Sub ComboBox1_Change()
......
code
........
ComboBox1 = Ws.Cells(Ligne, "G")
.......
code
.........
end sub
 

_Thierry

XLDnaute Barbatruc
Repose en paix
re Bonsoir ,

Ne t'inquiète pas SPGoder, Patrick est cash de chez cash et il est ultra super efficace dans ces codes , pas toujours facile à suivre !
Mais comme preuve de son efficacité le Post #30 à l'instant !!!

Je comprends tout à fait que tu débutes, mais pour la Gestion Locataire où j'avais un tout peu contribué, c'était moins le fouilli que dans la Gestion Bail !!! Là c'est vrai qu'on ne comprends même plus ce que tu veux faire ....

Bon apprentissage !
Bonne Nuit
@+Thierry
 

SPGoder

XLDnaute Occasionnel
Bonjour
Je me retourne vers vous, avec honte et surtout apres un temps considérable passé à chercher,, je n'arrive pas à initialiser le combobox a plusieurs colonne.
VB:
        With ComboBox1
                .ColumnCount = 3
                .ColumnWidths = "50;50;0"       
                .RowSource = "baux!A1:H1000"
       For BA = 2 To Worksheets("baux").Range("A" & Rows.Count).End(xlUp).Row
                .AddItem
                .List(BA, 0) = Worksheets("Baux").Range("G" & BA)
                .List(BA, 1) = Worksheets("Baux").Range("H" & BA)
                .List(BA, 2) = Worksheets("Baux").Range("A" & BA)
        Next BA

        End With

ça me met erreur 70 des que le code arrive à .additem
 

patricktoulon

XLDnaute Barbatruc
et ben mon ami voici ce petit code pour te placer enfin a la lumière

VB:
Dim Plage as range,arrcolumns
Set plage = Sheets("Baux").[A1:H1000]
arrcolumns = Array(7, 8, 1) 'colonne G H et A
With ComboBox1
    .ColumnCount = 3
    .ColumnWidths = "50;50;0"
    .List = Application.Index(plage.Value, Evaluate("ROW(1:" & plage.Rows.Count & ")"), arrcolumns)
End With
cé bo' la vie non ;)
et là y a encore thierry qui va perdre des cheveux :p :p :p :p
 

SPGoder

XLDnaute Occasionnel
Pffffffff, décourageant
je n'aurais jamais pu écrire ça, je le fais avec mes moyens, qui je l'accorde sont très limités
je découvre de nouvelle chose, comme arrcolumns
J'ai même pas tout compris dans
.List = Application.Index(plage.Value, Evaluate("ROW(1:" & plage.Rows.Count & ")"), arrcolumns)
Ta lumière éblouit mon coté dark
Je teste et modifie le code comme demandé hier soir. Pour demain, car dodo je travaille du matin
Bonne nuit et merci
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bosnoir Patrick, re SPGoder

Non ça va sur ce coup là Patrick je suis habitué !!! :eek:

Mais disons que pour apprendre à SPGoder les bases "classiques" à la portée de ses moyens, je propose de corriger le code comme il l'avait créé comme suit :

VB:
Private Sub UserForm_Initialize()
Dim WSBaux As Worksheet
Dim BA As Integer
Dim x As Integer

Set WSBaux = ThisWorkbook.Worksheets("Baux")

    With ComboBox1
             .ColumnCount = 3
             .ColumnWidths = "50;50;0"
                For BA = 2 To WSBaux.Range("A" & Rows.Count).End(xlUp).Row
                        .AddItem WSBaux.Range("G" & BA)
                        .Column(1, x) = WSBaux.Range("H" & BA)
                        .Column(2, x) = WSBaux.Range("A" & BA)
                        x = x + 1
                Next BA
     End With

End Sub

Bonne soirée
@+Thierry
 

SPGoder

XLDnaute Occasionnel
Bonjour Patrick et Thierry
Merci d'avoir eu pitié de moi....
Dans le cas présent, tu as chargé le combox avec additem, mais quel aurait été le code avec rowsource et list pour comprendre aussi
Merci à vous deux pour m'obliger à me forcer à écrire le code plus convenablement, c'est du temps pour tout comprendre, mais ça vaut le coup, car j'ai réussi à faire fonctionner mon petit bout de code avec plus de logique.
Je sais qu'il est encore loin d’être parfait, et surtout pas optimiser, mais au moins il fonctionne.
Ai je gagné un peu de lumens? Ou bien je suis désespérément du coté obscur?
 

Pièces jointes

  • GLP essai.xlsm
    92.4 KB · Affichages: 9
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @SPGoder , Patrick, le fil, le Forum

mais quel aurait été le code avec rowsource et list pour comprendre aussi

Dans ton cas avec une range non contigue que ce soit List ou RowSource ca pose problème, d'où la pirouette barbatruquestte de notre ami Patrick

Sinon ce fusse simple ! (avec un exemple que j'ai sous la main pour un autre truc)
VB:
Dim RngRef As Range
Dim TabRef As Variant

Set RngRef = WSRef.Range("A2:C" & WSRef.Range("A1000").End(xlUp).Row)
TabRef = RngRef
Me.LBXPropriete_20.List = TabRef

Bonne fin de journée
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re bonjour a tous
dans ton cas comme tu veux mettre un value qui n'existe pas dans la liste RowSource TU OUBLIE!!!!!!!
pour list avec colonne non contigue et dans le désordre tu n'a que ma méthode ou alors une boucle façon paléolithique avec
additem le "G"
puis
.list(.listcount-1,1)=le"H"
et
.list(.listcount-1,2)="A

moi en une seule ligne je te met des 999 lignes avec les colonnes non contiguës et dans l'ordre que tu veux
a toi de choisir la méthode qui te convient ;)
 

SPGoder

XLDnaute Occasionnel
Merci à vous 2 , Patrick, je garde ton code de coté pour le cas ou effectivement, j'aurais plus de colonne à charger, c'est pas perdu.
Bonne continuation, et il y a des chances que je revienne poser des questions dans un autre sujet
Que la force soit avec vous!!!
 

Statistiques des forums

Discussions
312 361
Messages
2 087 604
Membres
103 605
dernier inscrit
gabriel morency