Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb avec useform

5 réponses
Avatar
Michel MTO
bonjour à toutes et à tous,

j'utilise ceci :

Private Sub ComboBox1_Click()
ActiveSheet.[G20] = ComboBox1.Value
End Sub

Private Sub ComboBox2_Click()
ActiveSheet.[A34] = ComboBox2.Value
End Sub
Private Sub ComboBox3_Click()
ActiveSheet.[E34] = ComboBox3.Value
End Sub

pour remplir des valeurs dans les cellules indiquées. G20 rmène bien la
valeur sélectionnée dans le combox1 idem pour E34, mais A34 reste, quant à
elle, reste vide ???

Je précise que mes trois combobox sont sur le même userform et je les
alimente de la manière suivante (code fourni par MichDenis) :

Private Sub UserForm_Initialize()
Load UserForm1
Dim Tblo As Variant, Tblo2 As Variant, Tblo3 As Variant, Rg As Range, Rg2 As
Range, Rg3 As Range

'A1 étant la ligne d'étiquette
With Workbooks("Adresses Clients.xls").Sheets("Adresses Clients")
Set Rg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
Tblo = Application.Transpose(Rg)
Quick_Sort Tblo, LBound(Tblo), UBound(Tblo)
With UserForm1.ComboBox1
.MatchEntry = fmMatchEntryComplete
.MatchRequired = True
.Style = fmStyleDropDownCombo
.List = Application.Transpose(Tblo)
End With
Set Rg = Nothing

'A1 étant la ligne d'étiquette
With Workbooks("Articles.xls").Sheets("Articles")
Set Rg2 = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
Tblo2 = Application.Transpose(Rg2)
Quick_Sort Tblo2, LBound(Tblo2), UBound(Tblo2)
With UserForm1.ComboBox2
.MatchEntry = fmMatchEntryComplete
.MatchRequired = True
.Style = fmStyleDropDownCombo
.List = Application.Transpose(Tblo2)
End With
Set Rg2 = Nothing

'A1 étant la ligne d'étiquette
With Workbooks("Articles.xls").Sheets("Articles")
Set Rg3 = .Range("B2:B" & .Range("B65536").End(xlUp).Row)
End With
Tblo3 = Application.Transpose(Rg3)
Quick_Sort Tblo3, LBound(Tblo3), UBound(Tblo3)
With UserForm1.ComboBox3
.MatchEntry = fmMatchEntryComplete
.MatchRequired = True
.Style = fmStyleDropDownCombo
.List = Application.Transpose(Tblo3)
End With
Set Rg3 = Nothing
End Sub

puis, toujours offert par mich Denis :

Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last
As Long)
Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last
List_Separator = SortArray((First + Last) / 2)
Do
Do While (SortArray(Low) < List_Separator)
Low = Low + 1
Loop
Do While (SortArray(High) > List_Separator)
High = High - 1
Loop
If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If
Loop While (Low <= High)
If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last
End Sub
dans un module standard.

Entre parenthèse si quelqu'un comprend les lignes suivantes et peut me les
expliquer, çà serait sympa :
List_Separator = SortArray((First + Last) / 2)
Do While (SortArray(Low) < List_Separator)
Do While (SortArray(High) > List_Separator)

Merci à toutes et à tous

Michel MTO

5 réponses

Avatar
Michel MTO
MichDenis,
Merci pour ta réponse, je regarde çà demain, je dois partir en urgence.

M Mto
Avatar
Michel MTO
Bonjour Denis,

Alors si j'ai bien compris :
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last
As Long)
Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last


affectation des 1er et dernier éléments

List_Separator = SortArray((First + Last) / 2)


Choix de l'élément médian

Do
Do While (SortArray(Low) < List_Separator)


Si le 1er élément < au médian

Low = Low + 1


on passe ) l'élément 2 etc ... pour arriver jusqu'à l' élt médian
Mais SortArray() => çà veut dire quoi, je ne le trouve pas dans l'aide VBA
??
Loop

Do While (SortArray(High) > List_Separator)
High = High - 1
Loop


on fait la même chose avec l'élément supérieur

If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If


????? je ne comprend pas

Loop While (Low <= High)

If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last


Et là on recommence la procèdure de manière à arriver avec des listes de 1
éléments.

End Sub



Voilà comment j'interprète !!

Est-ce que ton combobox2 contient bien les données désirées ?


Oui

Est-ce qu'il affiche une valeur lors de l'opération ?


Non

Dans la feuille active, as-tu des procédures événementielles?


Oui, j'ai
Private Sub Workbook_Open()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub CommandButton1_Click()

Si oui, ajoute en début de procédure :

Application.Enableevents = false
et à la fin
Application.Enableevents = true


Dois je les mettre dans la procèdure Quick sort ??? ou une autre ??

Merci beaucoup pour toutes tes explications

Michel MTO
Avatar
michdenis
| SortArray() => çà veut dire quoi, je ne le trouve pas dans l'aide VBA

C'est un paramètre de la fonction personnalisée Quick_Sort() qui
représente un tableau (array)
Si j'étais toi, je ne perdrais pas trop de temps à comprendre cela,
j'attendrais d'être un peu plus féru en VBA et en programmation.

Pour ce qui est de ton combobox, est-ce possible que tu publies
un bout de ton fichier sur Cijoint.fr ou cjoint.com
et que tu nous retournes l'adresse ici.




"Michel MTO" a écrit dans le message de groupe de
discussion : hto0ap$kit$
Bonjour Denis,

Alors si j'ai bien compris :
Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As Long, ByVal Last
As Long)
Dim Low As Long, High As Long
Dim Temp As Variant, List_Separator As Variant
Low = First
High = Last


affectation des 1er et dernier éléments

List_Separator = SortArray((First + Last) / 2)


Choix de l'élément médian

Do
Do While (SortArray(Low) < List_Separator)


Si le 1er élément < au médian

Low = Low + 1


on passe ) l'élément 2 etc ... pour arriver jusqu'à l' élt médian
Mais SortArray() => çà veut dire quoi, je ne le trouve pas dans l'aide VBA
??
Loop

Do While (SortArray(High) > List_Separator)
High = High - 1
Loop


on fait la même chose avec l'élément supérieur

If (Low <= High) Then
Temp = SortArray(Low)
SortArray(Low) = SortArray(High)
SortArray(High) = Temp
Low = Low + 1
High = High - 1
End If


????? je ne comprend pas

Loop While (Low <= High)

If (First < High) Then Quick_Sort SortArray, First, High
If (Low < Last) Then Quick_Sort SortArray, Low, Last


Et là on recommence la procèdure de manière à arriver avec des listes de 1
éléments.

End Sub



Voilà comment j'interprète !!

Est-ce que ton combobox2 contient bien les données désirées ?


Oui

Est-ce qu'il affiche une valeur lors de l'opération ?


Non

Dans la feuille active, as-tu des procédures événementielles?


Oui, j'ai
Private Sub Workbook_Open()
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub CommandButton1_Click()

Si oui, ajoute en début de procédure :

Application.Enableevents = false
et à la fin
Application.Enableevents = true


Dois je les mettre dans la procèdure Quick sort ??? ou une autre ??

Merci beaucoup pour toutes tes explications

Michel MTO
Avatar
Michel MTO
Denis,

j'ai trouvé, mon problème venait du fait suivant :

Lorsque je saisie un libéllé dans mon combobox, il apparait les 1ère lettres
que je tape et ensuite le libéllé est en bleue pour les lettres que je ne
saisie pas, et là au lieu de cliquer sur ma flèche pour sélectionner le
libéllé qu'il me fallait je laissais tel quel, donc sélection à vide et
aucune donnée dans mes cellules de destination. En fait, en cliquant bien
sur mon libéllé les valeurs sont bien rapportées dans les cellules.

Pour :
| SortArray() => çà veut dire quoi, je ne le trouve pas dans l'aide VBA

Effectivement y-a des progrès à faire et j'ai bien compris qu'il s'agissait
d'un paramètre de la fonction personnalisée Quick_Sort().

Juste une dernière précision :
avec ceci => Quick_Sort Tblo3, LBound(Tblo3), UBound(Tblo3)
on passe les 3 arguments dont tu me parlait

et avec ceci => Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As
Long, ByVal Last As Long)
on récupère ces valeurs mêmes valeur dans les variables SortArray(), First ,
Last

Juste ou faux ??

Michel MTO
Avatar
michdenis
Juste une dernière précision :
avec ceci => Quick_Sort Tblo3, LBound(Tblo3), UBound(Tblo3)
on passe les 3 arguments dont tu me parlait

et avec ceci => Sub Quick_Sort(ByRef SortArray As Variant, ByVal First As
Long, ByVal Last As Long)
on récupère ces valeurs mêmes valeur dans les variables SortArray(), First ,
Last

Juste ou faux ??

***** C'est exact.