Bonjour,
Je sais que le sujet a déjà été abordé, mais je pose la questio n car
je n'ai pas trouvé la réponse. Je souhaite effectuer 2 listes
déroulantes dans un userform, la première
contenant toute une série d'essence de bois (chêne, hêtre,
peuplier, ...) et
l'autre qui en fonction de la première propose des épaisseurs de bois
(25,
34, 41, ...). Ses données proviennent d'une liste qui n'est pas triée
également. Exemple:
Essence Epaisseur
Chêne 34
Hêtre 25
Hêtre 18
Peuplier 50
Chêne 25
...
J'espère avoir été clair. J'ai trouvé des renseignements sur les
listes
déroulantes, notamment le fichier jb-formulaire. J'y ai trouvé ceci:
Cascade sans doublons
Pour un client, on veut les types de rapport (sans doublons)
Private Sub UserForm_Initialize()
Me.ChoixClient.List = SansDoublonsTrié([client]) ' si champ nomm é
ou
Me.ChoixClient.List = SansDoublonsTrié(Range([A2],
[A65000].End(xlUp))
End Sub
Private Sub ChoixClient_Change()
a = [client]
b = [typereport]
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To [typereport].Count
If a(i, 1) = Me.ChoixClient Then
témoin = Not IsError(Application.Match(b(i, 1), temp, 0))
If Not témoin And b(i, 1) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = Range("typeReport")(i)
j = j + 1
End If
End If
Next i
Call Tri(temp, 1, UBound(temp, 1))
Me.ComboBox2.List = temp
End Sub
'-------------------------------------------
'Et dans un module:
Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function
Merci d'avance.
Fred
Bonjour,
Je sais que le sujet a déjà été abordé, mais je pose la questio n car
je n'ai pas trouvé la réponse. Je souhaite effectuer 2 listes
déroulantes dans un userform, la première
contenant toute une série d'essence de bois (chêne, hêtre,
peuplier, ...) et
l'autre qui en fonction de la première propose des épaisseurs de bois
(25,
34, 41, ...). Ses données proviennent d'une liste qui n'est pas triée
également. Exemple:
Essence Epaisseur
Chêne 34
Hêtre 25
Hêtre 18
Peuplier 50
Chêne 25
...
J'espère avoir été clair. J'ai trouvé des renseignements sur les
listes
déroulantes, notamment le fichier jb-formulaire. J'y ai trouvé ceci:
Cascade sans doublons
Pour un client, on veut les types de rapport (sans doublons)
Private Sub UserForm_Initialize()
Me.ChoixClient.List = SansDoublonsTrié([client]) ' si champ nomm é
ou
Me.ChoixClient.List = SansDoublonsTrié(Range([A2],
[A65000].End(xlUp))
End Sub
Private Sub ChoixClient_Change()
a = [client]
b = [typereport]
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To [typereport].Count
If a(i, 1) = Me.ChoixClient Then
témoin = Not IsError(Application.Match(b(i, 1), temp, 0))
If Not témoin And b(i, 1) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = Range("typeReport")(i)
j = j + 1
End If
End If
Next i
Call Tri(temp, 1, UBound(temp, 1))
Me.ComboBox2.List = temp
End Sub
'-------------------------------------------
'Et dans un module:
Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function
Merci d'avance.
Fred
Bonjour,
Je sais que le sujet a déjà été abordé, mais je pose la questio n car
je n'ai pas trouvé la réponse. Je souhaite effectuer 2 listes
déroulantes dans un userform, la première
contenant toute une série d'essence de bois (chêne, hêtre,
peuplier, ...) et
l'autre qui en fonction de la première propose des épaisseurs de bois
(25,
34, 41, ...). Ses données proviennent d'une liste qui n'est pas triée
également. Exemple:
Essence Epaisseur
Chêne 34
Hêtre 25
Hêtre 18
Peuplier 50
Chêne 25
...
J'espère avoir été clair. J'ai trouvé des renseignements sur les
listes
déroulantes, notamment le fichier jb-formulaire. J'y ai trouvé ceci:
Cascade sans doublons
Pour un client, on veut les types de rapport (sans doublons)
Private Sub UserForm_Initialize()
Me.ChoixClient.List = SansDoublonsTrié([client]) ' si champ nomm é
ou
Me.ChoixClient.List = SansDoublonsTrié(Range([A2],
[A65000].End(xlUp))
End Sub
Private Sub ChoixClient_Change()
a = [client]
b = [typereport]
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To [typereport].Count
If a(i, 1) = Me.ChoixClient Then
témoin = Not IsError(Application.Match(b(i, 1), temp, 0))
If Not témoin And b(i, 1) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = Range("typeReport")(i)
j = j + 1
End If
End If
Next i
Call Tri(temp, 1, UBound(temp, 1))
Me.ComboBox2.List = temp
End Sub
'-------------------------------------------
'Et dans un module:
Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function
Merci d'avance.
Fred
Bonjour,
Je sais que le sujet a déjà été abordé, mais je pose la questio n car
je n'ai pas trouvé la réponse. Je souhaite effectuer 2 listes
déroulantes dans un userform, la première
contenant toute une série d'essence de bois (chêne, hêtre,
peuplier, ...) et
l'autre qui en fonction de la première propose des épaisseurs de bois
(25,
34, 41, ...). Ses données proviennent d'une liste qui n'est pas triée
également. Exemple:
Essence Epaisseur
Chêne 34
Hêtre 25
Hêtre 18
Peuplier 50
Chêne 25
...
J'espère avoir été clair. J'ai trouvé des renseignements sur les
listes
déroulantes, notamment le fichier jb-formulaire. J'y ai trouvé ceci:
Cascade sans doublons
Pour un client, on veut les types de rapport (sans doublons)
Private Sub UserForm_Initialize()
Me.ChoixClient.List = SansDoublonsTrié([client]) ' si champ nomm é
ou
Me.ChoixClient.List = SansDoublonsTrié(Range([A2],
[A65000].End(xlUp))
End Sub
Private Sub ChoixClient_Change()
a = [client]
b = [typereport]
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To [typereport].Count
If a(i, 1) = Me.ChoixClient Then
témoin = Not IsError(Application.Match(b(i, 1), temp, 0))
If Not témoin And b(i, 1) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = Range("typeReport")(i)
j = j + 1
End If
End If
Next i
Call Tri(temp, 1, UBound(temp, 1))
Me.ComboBox2.List = temp
End Sub
'-------------------------------------------
'Et dans un module:
Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function
Merci d'avance.
Fred
Bonjour,
Je sais que le sujet a déjà été abordé, mais je pose la questio n car
je n'ai pas trouvé la réponse. Je souhaite effectuer 2 listes
déroulantes dans un userform, la première
contenant toute une série d'essence de bois (chêne, hêtre,
peuplier, ...) et
l'autre qui en fonction de la première propose des épaisseurs de bois
(25,
34, 41, ...). Ses données proviennent d'une liste qui n'est pas triée
également. Exemple:
Essence Epaisseur
Chêne 34
Hêtre 25
Hêtre 18
Peuplier 50
Chêne 25
...
J'espère avoir été clair. J'ai trouvé des renseignements sur les
listes
déroulantes, notamment le fichier jb-formulaire. J'y ai trouvé ceci:
Cascade sans doublons
Pour un client, on veut les types de rapport (sans doublons)
Private Sub UserForm_Initialize()
Me.ChoixClient.List = SansDoublonsTrié([client]) ' si champ nomm é
ou
Me.ChoixClient.List = SansDoublonsTrié(Range([A2],
[A65000].End(xlUp))
End Sub
Private Sub ChoixClient_Change()
a = [client]
b = [typereport]
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To [typereport].Count
If a(i, 1) = Me.ChoixClient Then
témoin = Not IsError(Application.Match(b(i, 1), temp, 0))
If Not témoin And b(i, 1) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = Range("typeReport")(i)
j = j + 1
End If
End If
Next i
Call Tri(temp, 1, UBound(temp, 1))
Me.ComboBox2.List = temp
End Sub
'-------------------------------------------
'Et dans un module:
Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function
Merci d'avance.
Fred
Bonjour,
Je sais que le sujet a déjà été abordé, mais je pose la questio n car
je n'ai pas trouvé la réponse. Je souhaite effectuer 2 listes
déroulantes dans un userform, la première
contenant toute une série d'essence de bois (chêne, hêtre,
peuplier, ...) et
l'autre qui en fonction de la première propose des épaisseurs de bois
(25,
34, 41, ...). Ses données proviennent d'une liste qui n'est pas triée
également. Exemple:
Essence Epaisseur
Chêne 34
Hêtre 25
Hêtre 18
Peuplier 50
Chêne 25
...
J'espère avoir été clair. J'ai trouvé des renseignements sur les
listes
déroulantes, notamment le fichier jb-formulaire. J'y ai trouvé ceci:
Cascade sans doublons
Pour un client, on veut les types de rapport (sans doublons)
Private Sub UserForm_Initialize()
Me.ChoixClient.List = SansDoublonsTrié([client]) ' si champ nomm é
ou
Me.ChoixClient.List = SansDoublonsTrié(Range([A2],
[A65000].End(xlUp))
End Sub
Private Sub ChoixClient_Change()
a = [client]
b = [typereport]
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To [typereport].Count
If a(i, 1) = Me.ChoixClient Then
témoin = Not IsError(Application.Match(b(i, 1), temp, 0))
If Not témoin And b(i, 1) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = Range("typeReport")(i)
j = j + 1
End If
End If
Next i
Call Tri(temp, 1, UBound(temp, 1))
Me.ComboBox2.List = temp
End Sub
'-------------------------------------------
'Et dans un module:
Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function
Merci d'avance.
Fred
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors l à
chapeau. Merci encore
Fred
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors l à
chapeau. Merci encore
Fred
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors l à
chapeau. Merci encore
Fred
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, divers2.lasc...@laposte.net wrote:
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et l à tu me
sors la réponse en plus personnalisée dans un fichier excel. Alor s là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le chêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 12:53, "JB" <boisgont...@hotmail.com> wrote:
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, divers2.lasc...@laposte.net wrote:
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et l à tu me
sors la réponse en plus personnalisée dans un fichier excel. Alor s là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le chêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et l à tu me
sors la réponse en plus personnalisée dans un fichier excel. Alor s là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le chêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et l à tu me
sors la réponse en plus personnalisée dans un fichier excel. Al ors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le chê ne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, divers2.lasc...@laposte.net wrote:
On 22 fév, 12:53, "JB" <boisgont...@hotmail.com> wrote:
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, divers2.lasc...@laposte.net wrote:
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et l à tu me
sors la réponse en plus personnalisée dans un fichier excel. Al ors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le chê ne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et l à tu me
sors la réponse en plus personnalisée dans un fichier excel. Al ors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le chê ne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:41, "JB" wrote:Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le ch êne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'aime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:41, "JB" <boisgont...@hotmail.com> wrote:
Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, divers2.lasc...@laposte.net wrote:
On 22 fév, 12:53, "JB" <boisgont...@hotmail.com> wrote:
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, divers2.lasc...@laposte.net wrote:
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le ch êne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'aime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:41, "JB" wrote:Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel. Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le ch êne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne pas
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'aime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:51, wrote:On 22 fév, 13:41, "JB" wrote:Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
CordialementJB
On 22 fév, 12:47, wrote:Merci beaucoupJB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel . Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le c hêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne p as
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'a ime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Si tu es encore là, j'ai un dernier petit problème qui pour toi ne
dois pas en être un:
J'ai un textbox ou les utilisateurs doivent rentrer un nombre à
virgule. Le problème est que si ils remplacent la virgule par un
point, ça bugue la macro (car j'ai déclaré les variables). Comment
faire si l'utilisateur rentre un nombre avec un point, peut etre
remplacer directement le point par une virgule, faire une erreur et
lui redemander de saisir ?
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:51, divers2.lasc...@laposte.net wrote:
On 22 fév, 13:41, "JB" <boisgont...@hotmail.com> wrote:
Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, divers2.lasc...@laposte.net wrote:
On 22 fév, 12:53, "JB" <boisgont...@hotmail.com> wrote:
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
CordialementJB
On 22 fév, 12:47, divers2.lasc...@laposte.net wrote:
Merci beaucoupJB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel . Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le c hêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne p as
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'a ime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Si tu es encore là, j'ai un dernier petit problème qui pour toi ne
dois pas en être un:
J'ai un textbox ou les utilisateurs doivent rentrer un nombre à
virgule. Le problème est que si ils remplacent la virgule par un
point, ça bugue la macro (car j'ai déclaré les variables). Comment
faire si l'utilisateur rentre un nombre avec un point, peut etre
remplacer directement le point par une virgule, faire une erreur et
lui redemander de saisir ?
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:51, wrote:On 22 fév, 13:41, "JB" wrote:Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
CordialementJB
On 22 fév, 12:47, wrote:Merci beaucoupJB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel . Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le c hêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne p as
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'a ime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Si tu es encore là, j'ai un dernier petit problème qui pour toi ne
dois pas en être un:
J'ai un textbox ou les utilisateurs doivent rentrer un nombre à
virgule. Le problème est que si ils remplacent la virgule par un
point, ça bugue la macro (car j'ai déclaré les variables). Comment
faire si l'utilisateur rentre un nombre avec un point, peut etre
remplacer directement le point par une virgule, faire une erreur et
lui redemander de saisir ?
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:51, wrote:On 22 fév, 13:41, "JB" wrote:Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel . Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le c hêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne p as
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'a ime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Si tu es encore là, j'ai un dernier petit problème qui pour toi ne
dois pas en être un:
J'ai un textbox ou les utilisateurs doivent rentrer un nombre à
virgule. Le problème est que si ils remplacent la virgule par un
point, ça bugue la macro (car j'ai déclaré les variables). Comment
faire si l'utilisateur rentre un nombre avec un point, peut etre
remplacer directement le point par une virgule, faire une erreur et
lui redemander de saisir ?
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:51, divers2.lasc...@laposte.net wrote:
On 22 fév, 13:41, "JB" <boisgont...@hotmail.com> wrote:
Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, divers2.lasc...@laposte.net wrote:
On 22 fév, 12:53, "JB" <boisgont...@hotmail.com> wrote:
Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, divers2.lasc...@laposte.net wrote:
Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel . Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le c hêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne p as
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'a ime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Si tu es encore là, j'ai un dernier petit problème qui pour toi ne
dois pas en être un:
J'ai un textbox ou les utilisateurs doivent rentrer un nombre à
virgule. Le problème est que si ils remplacent la virgule par un
point, ça bugue la macro (car j'ai déclaré les variables). Comment
faire si l'utilisateur rentre un nombre avec un point, peut etre
remplacer directement le point par une virgule, faire une erreur et
lui redemander de saisir ?
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
On 22 fév, 13:51, wrote:On 22 fév, 13:41, "JB" wrote:Remplacer:
Private Sub UserForm_Initialize()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp)) ' voir module mod_tri
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = 0
End Sub
Private Sub ComboBox1_Change()
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
If Not MonDico.Exists(c.Offset(0, 1).Value) Then
MonDico.Add c.Offset(0, 1).Value, c.Offset(0, 1).Value
End If
End If
Next c
temp = MonDico.items
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End Sub
JB
On 22 fév, 13:20, wrote:On 22 fév, 12:53, "JB" wrote:Dans le post ci dessous, la seconde liste est également tiée:
Private Sub ComboBox1_Change()
Dim temp()
i = 0
Me.ListBox1.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
i = i + 1
ReDim Preserve temp(1 To i)
temp(i) = c.Offset(0, 1)
End If
Next c
Call Tri(temp, LBound(temp), UBound(temp))
Me.ListBox1.List = temp
End Sub
Cordialement JB
On 22 fév, 12:47, wrote:Merci beaucoup JB,
Je me suis cassé la tête hier soir jusqu'à 3 h du matin, et là tu me
sors la réponse en plus personnalisée dans un fichier excel . Alors là
chapeau. Merci encore
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Je viens de remarquer que lorsque j'ai plusieurs épaisseurs pour une
même essence, elles s'affichent en doublon. Par exemple pour le c hêne,
je peux trouver dans la liste plusieurs fois la même épaisseur.
Y'a t'il possibilité, comme tu as fait pour les essences, de ne p as
afficher les doublons ?
Merci
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Et bien voila, c'est parfait. Encore merci (je sais, je t'ai déjà
remercié), mais tu m'as vraiment enlevé une épine. En plus je n'a ime
pas rester sur une défaite, hier soir j'étais un peu frustré.
A bientot
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Si tu es encore là, j'ai un dernier petit problème qui pour toi ne
dois pas en être un:
J'ai un textbox ou les utilisateurs doivent rentrer un nombre à
virgule. Le problème est que si ils remplacent la virgule par un
point, ça bugue la macro (car j'ai déclaré les variables). Comment
faire si l'utilisateur rentre un nombre avec un point, peut etre
remplacer directement le point par une virgule, faire une erreur et
lui redemander de saisir ?
Fred- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -