OVH Cloud OVH Cloud

Remplir un combobox après un tri sur colonne séparée

4 réponses
Avatar
Clicnik
Bonjour,

J'ai une table avec (par exemple) 5 colonnes, et je veux mettre dans un
combo les 3 premières colonnes. Là j'y arrive sans problème :)
Le tout se corse quand je retrouver dans mon combo les valeur de mes 3
colonnes sur base d'un filtre sur la 5ème.
Exemple :
col1 col2 col3 col4 col5
1 2 3 4 ok
2 2 3 4 x
3 2 3 4 ok
4 2 3 4 x
5 2 3 4 ok
6 2 3 4 ok

Dans mon combo, je veux retrouver uniquement les lignes ayant un x en col5.
Soit dans ce cas, les lignes 2 et 4.

J'ai essayé avec un autofiltre, mais il prend les colonnes cachés entre la
première cellule et la dernière visible.
Voici le bout de code que j'ai testé :

Private Sub UserForm_Activate()
Workbooks("book2.xls").Sheets("P1").Activate
Range("E1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="x"
Range("A2:C3").Select
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
x = ActiveCell.Address
' Descend jusqu'à la dernière ligne REMPLIE
Range(Selection, Selection.End(xlDown)).Select
'donne l'adresse du bloc trouvé
vRange = ActiveWindow.RangeSelection.Address
UserForm1.cmb1.RowSource = vRange
End Sub

4 réponses

Avatar
isabelle
bonjour Clicnik,

il faut que Field: si la colonne des "x" est la colonne "O"

isabelle


Bonjour,

J'ai une table avec (par exemple) 5 colonnes, et je veux mettre dans un
combo les 3 premières colonnes. Là j'y arrive sans problème :)
Le tout se corse quand je retrouver dans mon combo les valeur de mes 3
colonnes sur base d'un filtre sur la 5ème.
Exemple :
col1 col2 col3 col4 col5
1 2 3 4 ok
2 2 3 4 x
3 2 3 4 ok
4 2 3 4 x
5 2 3 4 ok
6 2 3 4 ok

Dans mon combo, je veux retrouver uniquement les lignes ayant un x en col5.
Soit dans ce cas, les lignes 2 et 4.

J'ai essayé avec un autofiltre, mais il prend les colonnes cachés entre la
première cellule et la dernière visible.
Voici le bout de code que j'ai testé :

Private Sub UserForm_Activate()
Workbooks("book2.xls").Sheets("P1").Activate
Range("E1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="x"
Range("A2:C3").Select
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
x = ActiveCell.Address
' Descend jusqu'à la dernière ligne REMPLIE
Range(Selection, Selection.End(xlDown)).Select
'donne l'adresse du bloc trouvé
vRange = ActiveWindow.RangeSelection.Address
UserForm1.cmb1.RowSource = vRange
End Sub




Avatar
JB
Bonjour,

http://cjoint.com/?jCtMPyxOfQ

Private Sub UserForm_Initialize()
Dim temp()
ReDim temp(1 To 3, 1 To 1)
j = 0
For i = 1 To [liste].Rows.Count
If Range("liste")(i, 5) = "x" Then
j = j + 1
ReDim Preserve temp(1 To 3, 1 To j)
temp(1, j) = Range("liste")(i, 1)
temp(2, j) = Range("liste")(i, 2)
temp(3, j) = Range("liste")(i, 3)
End If
Next i
ComboBox1.List = Application.Transpose(temp)
End Sub

Cordialement JB


Bonjour,

J'ai une table avec (par exemple) 5 colonnes, et je veux mettre dans un
combo les 3 premières colonnes. Là j'y arrive sans problème :)
Le tout se corse quand je retrouver dans mon combo les valeur de mes 3
colonnes sur base d'un filtre sur la 5ème.
Exemple :
col1 col2 col3 col4 col5
1 2 3 4 ok
2 2 3 4 x
3 2 3 4 ok
4 2 3 4 x
5 2 3 4 ok
6 2 3 4 ok

Dans mon combo, je veux retrouver uniquement les lignes ayant un x en col 5.
Soit dans ce cas, les lignes 2 et 4.

J'ai essayé avec un autofiltre, mais il prend les colonnes cachés ent re la
première cellule et la dernière visible.
Voici le bout de code que j'ai testé :

Private Sub UserForm_Activate()
Workbooks("book2.xls").Sheets("P1").Activate
Range("E1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="x"
Range("A2:C3").Select
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
x = ActiveCell.Address
' Descend jusqu'à la dernière ligne REMPLIE
Range(Selection, Selection.End(xlDown)).Select
'donne l'adresse du bloc trouvé
vRange = ActiveWindow.RangeSelection.Address
UserForm1.cmb1.RowSource = vRange
End Sub


Avatar
Clicnik
Merci beaucoup pour ce code qui est pratiquement la solution demandée ;)

Je dis pratiquement car je n'arrive pas à l'intégrer dans mon form
d'origine. Il me dit à chaque "Run-time error '424' : object required".

Le problème vient peut-être du fait que j'ai 6 sheets dans mon fichier et
que je dois aller chercher les infos sur la deuxième, qui s'appelle "Connu".
J'ai donc glisser la ligne suivante "
Workbooks("test_5.xls").Sheets("Connu").Activate " en haut du code.

Ma colonne contenant les X est la colonne CD, soit la 82 ème position (ce
qui devient : If Range("liste")(i, 82) = "x" Then)

En faisant tourner le prgogramme pas à pas, j'obtiens l'erreur sur la ligne
de code suivante " For i = 1 To [liste].Rows.Count "

Pensez-vous pouvoir m'aider avec les renseignements que je vous ai fourni ?

Merci de votre aide.



Bonjour,

http://cjoint.com/?jCtMPyxOfQ

Private Sub UserForm_Initialize()
Dim temp()
ReDim temp(1 To 3, 1 To 1)
j = 0
For i = 1 To [liste].Rows.Count
If Range("liste")(i, 5) = "x" Then
j = j + 1
ReDim Preserve temp(1 To 3, 1 To j)
temp(1, j) = Range("liste")(i, 1)
temp(2, j) = Range("liste")(i, 2)
temp(3, j) = Range("liste")(i, 3)
End If
Next i
ComboBox1.List = Application.Transpose(temp)
End Sub

Cordialement JB


Bonjour,

J'ai une table avec (par exemple) 5 colonnes, et je veux mettre dans un
combo les 3 premières colonnes. Là j'y arrive sans problème :)
Le tout se corse quand je retrouver dans mon combo les valeur de mes 3
colonnes sur base d'un filtre sur la 5ème.
Exemple :
col1 col2 col3 col4 col5
1 2 3 4 ok
2 2 3 4 x
3 2 3 4 ok
4 2 3 4 x
5 2 3 4 ok
6 2 3 4 ok

Dans mon combo, je veux retrouver uniquement les lignes ayant un x en col5.
Soit dans ce cas, les lignes 2 et 4.

J'ai essayé avec un autofiltre, mais il prend les colonnes cachés entre la
première cellule et la dernière visible.
Voici le bout de code que j'ai testé :

Private Sub UserForm_Activate()
Workbooks("book2.xls").Sheets("P1").Activate
Range("E1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="x"
Range("A2:C3").Select
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
x = ActiveCell.Address
' Descend jusqu'à la dernière ligne REMPLIE
Range(Selection, Selection.End(xlDown)).Select
'donne l'adresse du bloc trouvé
vRange = ActiveWindow.RangeSelection.Address
UserForm1.cmb1.RowSource = vRange
End Sub






Avatar
JB
Le nom de champ étant connu dans tout le classeur, il n'est pas
nécessaire de modifier la feuille active.
Envoyez votre fichier

JB

Merci beaucoup pour ce code qui est pratiquement la solution demandée ;)

Je dis pratiquement car je n'arrive pas à l'intégrer dans mon form
d'origine. Il me dit à chaque "Run-time error '424' : object required".

Le problème vient peut-être du fait que j'ai 6 sheets dans mon fichie r et
que je dois aller chercher les infos sur la deuxième, qui s'appelle "Co nnu".
J'ai donc glisser la ligne suivante "
Workbooks("test_5.xls").Sheets("Connu").Activate " en haut du code.

Ma colonne contenant les X est la colonne CD, soit la 82 ème position ( ce
qui devient : If Range("liste")(i, 82) = "x" Then)

En faisant tourner le prgogramme pas à pas, j'obtiens l'erreur sur la l igne
de code suivante " For i = 1 To [liste].Rows.Count "

Pensez-vous pouvoir m'aider avec les renseignements que je vous ai fourni ?

Merci de votre aide.



Bonjour,

http://cjoint.com/?jCtMPyxOfQ

Private Sub UserForm_Initialize()
Dim temp()
ReDim temp(1 To 3, 1 To 1)
j = 0
For i = 1 To [liste].Rows.Count
If Range("liste")(i, 5) = "x" Then
j = j + 1
ReDim Preserve temp(1 To 3, 1 To j)
temp(1, j) = Range("liste")(i, 1)
temp(2, j) = Range("liste")(i, 2)
temp(3, j) = Range("liste")(i, 3)
End If
Next i
ComboBox1.List = Application.Transpose(temp)
End Sub

Cordialement JB


Bonjour,

J'ai une table avec (par exemple) 5 colonnes, et je veux mettre dans un
combo les 3 premières colonnes. Là j'y arrive sans problème :)
Le tout se corse quand je retrouver dans mon combo les valeur de mes 3
colonnes sur base d'un filtre sur la 5ème.
Exemple :
col1 col2 col3 col4 col5
1 2 3 4 ok
2 2 3 4 x
3 2 3 4 ok
4 2 3 4 x
5 2 3 4 ok
6 2 3 4 ok

Dans mon combo, je veux retrouver uniquement les lignes ayant un x en col5.
Soit dans ce cas, les lignes 2 et 4.

J'ai essayé avec un autofiltre, mais il prend les colonnes cachés entre la
première cellule et la dernière visible.
Voici le bout de code que j'ai testé :

Private Sub UserForm_Activate()
Workbooks("book2.xls").Sheets("P1").Activate
Range("E1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="x"
Range("A2:C3").Select
ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
x = ActiveCell.Address
' Descend jusqu'à la dernière ligne REMPLIE
Range(Selection, Selection.End(xlDown)).Select
'donne l'adresse du bloc trouvé
vRange = ActiveWindow.RangeSelection.Address
UserForm1.cmb1.RowSource = vRange
End Sub