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

Trier des cellules et les copier dans une listbox

16 réponses
Avatar
pfval
Bonjour,

J'arrive pas à faire la procédure suivante

des noms en colonne a, des "oui" et des "non" en colonne b
a b
toto oui
tata oui
titi non
pop oui

je voudrai faire apparaitre que les noms qui ont "oui" dans une listbox.

Qui va être mon sauveur ??
Merci en tout cas de vos réponses

10 réponses

1 2
Avatar
AV
Avec une ListBox sur un Userform (à défaut de précision)

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
With Sheets("Feuil3") 'à adapter !
.[A:B].AutoFilter Field:=2, Criteria1:="oui"
For Each C In .Range("A2", [A65536].End(3)).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem C Text
Next
.[A:B].AutoFilter
End With
End Sub

AV


AV
Avatar
michdenis
Bonjour Pfval,


Une autre alternative....si ta liste est longue

1 ) n'affiche que les données répondant aux critères
1 ) trie par ordre alphabétique les données affichées dans le combobox
2 ) évite la présence des doublons le cas échéant

Pour ce faire, tu dois charger la bibliothèque :

"Microsoft DAO 3.6 objects librairy"

J'ai donnée à la colonne A1, B1 les étiquettes de colonnes Titre1 et Titre2

Le combobox s'appelle Combobox1 et il est situé sur la feuil1 de même que les données.

'------------------------------------
Sub RequêteExcel()

Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String

'définir la plage de cellule: Ne pas inclure la ligne d'étiquette de colonne
With Worksheets("Feuil1")
.Range("A1:B" & .Range("A65356").End(xlUp).Row).Name = "NomColonne"
End With

'Ouvrir la base de données
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")

'Définir la requête formant le recordset
Requete = "SELECT titre1 From NomColonne " & vbCrLf & _
"Where Ucase(titre2) = 'OUI'" & vbCrLf & _
"Group By titre1 ORDER By titre1"

'Création du recordset
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst

'Initialistation du Combobox1 en Feuil1
Do Until Rst.EOF
Feuil1.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop

'Élimination du NOM de la plage
ThisWorkbook.Names("NomColonne").Delete

Rst.Close 'ferme le recordset
bd.Close 'Ferme la base de données
'Libère la mémoire des objets
Set Rst = Nothing: Set bd = Nothing

End Sub
'------------------------------------


Salutations!





"pfval" a écrit dans le message de news:
Bonjour,

J'arrive pas à faire la procédure suivante

des noms en colonne a, des "oui" et des "non" en colonne b
a b
toto oui
tata oui
titi non
pop oui

je voudrai faire apparaitre que les noms qui ont "oui" dans une listbox.

Qui va être mon sauveur ??
Merci en tout cas de vos réponses
Avatar
pfval
Merci pour ta réponse
Je débute , donc les messages qu'il envoi suite à ta procédure
sont
Attendu fin d'instruction
pour la ligne
UserForm1.ComboBox1.AddItem c Text

Variable objet ou variable de bloc With non définie

J'avoue ne pas comprendre ce qu'il se passe


"AV" a écrit dans le message de
news:
Avec une ListBox sur un Userform (à défaut de précision)

Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
With Sheets("Feuil3") 'à adapter !
.[A:B].AutoFilter Field:=2, Criteria1:="oui"
For Each C In .Range("A2",
[A65536].End(3)).SpecialCells(xlCellTypeVisible)

ListBox1.AddItem C Text
Next
.[A:B].AutoFilter
End With
End Sub

AV


AV




Avatar
pfval
Merci pour ta réponse mais le fichier .xls que je dois faire sera installé
sur un serveur et plusieurs utilisateurs y auront accés , donc ma question
est faudra t' il que j'installe "Microsoft DAO 3.6 objects librairy" sur
chacun des postes? Cela étant impossible, trop de postes

a +

"michdenis" a écrit dans le message de
news:%
Bonjour Pfval,


Une autre alternative....si ta liste est longue

1 ) n'affiche que les données répondant aux critères
1 ) trie par ordre alphabétique les données affichées dans le combobox
2 ) évite la présence des doublons le cas échéant

Pour ce faire, tu dois charger la bibliothèque :

"Microsoft DAO 3.6 objects librairy"

J'ai donnée à la colonne A1, B1 les étiquettes de colonnes Titre1 et
Titre2


Le combobox s'appelle Combobox1 et il est situé sur la feuil1 de même que
les données.


'------------------------------------
Sub RequêteExcel()

Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String

'définir la plage de cellule: Ne pas inclure la ligne d'étiquette de
colonne

With Worksheets("Feuil1")
.Range("A1:B" & .Range("A65356").End(xlUp).Row).Name = "NomColonne"
End With

'Ouvrir la base de données
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")

'Définir la requête formant le recordset
Requete = "SELECT titre1 From NomColonne " & vbCrLf & _
"Where Ucase(titre2) = 'OUI'" & vbCrLf & _
"Group By titre1 ORDER By titre1"

'Création du recordset
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst

'Initialistation du Combobox1 en Feuil1
Do Until Rst.EOF
Feuil1.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop

'Élimination du NOM de la plage
ThisWorkbook.Names("NomColonne").Delete

Rst.Close 'ferme le recordset
bd.Close 'Ferme la base de données
'Libère la mémoire des objets
Set Rst = Nothing: Set bd = Nothing

End Sub
'------------------------------------


Salutations!





"pfval" a écrit dans le message de
news:

Bonjour,

J'arrive pas à faire la procédure suivante

des noms en colonne a, des "oui" et des "non" en colonne b
a b
toto oui
tata oui
titi non
pop oui

je voudrai faire apparaitre que les noms qui ont "oui" dans une listbox.

Qui va être mon sauveur ??
Merci en tout cas de vos réponses





Avatar
AV
UserForm1.ComboBox1.AddItem c Text


Le problème est que cette ligne n'existe pas dans l'exemple de code fourni !
Par ailleurs tu parles de ListBox dans l'objet de la question et maintenant de
Combo...
Quid de tout ça ?

Si ton adresse est valide (sinon...ben tant pis...), je t'envoie un exemple en
bal perso

AV

Avatar
AV
PS : pour l'erreur d'éxécution : ajouter un point entre C et Text !
** UserForm1.ComboBox1.AddItem c.Text **

AV
Avatar
michdenis
Bonjour Pfval,

Si les usagers ouvrent le fichier à partir du serveur et travaille sur ce fichier, il ne devrait pas y avoir de problème car
le fichier contient déjà la référence ... Si tu as des ordi version 97, la configuration de leur poste de travail n'aura pas
la bibliothèque Dao 3.6 , Dans toutes les autres version Excel 2000 2002 et 2003 cela ne devrait pas causer de problèmes.


Salutations!



"pfval" a écrit dans le message de news:
Merci pour ta réponse mais le fichier .xls que je dois faire sera installé
sur un serveur et plusieurs utilisateurs y auront accés , donc ma question
est faudra t' il que j'installe "Microsoft DAO 3.6 objects librairy" sur
chacun des postes? Cela étant impossible, trop de postes

a +

"michdenis" a écrit dans le message de
news:%
Bonjour Pfval,


Une autre alternative....si ta liste est longue

1 ) n'affiche que les données répondant aux critères
1 ) trie par ordre alphabétique les données affichées dans le combobox
2 ) évite la présence des doublons le cas échéant

Pour ce faire, tu dois charger la bibliothèque :

"Microsoft DAO 3.6 objects librairy"

J'ai donnée à la colonne A1, B1 les étiquettes de colonnes Titre1 et
Titre2


Le combobox s'appelle Combobox1 et il est situé sur la feuil1 de même que
les données.


'------------------------------------
Sub RequêteExcel()

Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String

'définir la plage de cellule: Ne pas inclure la ligne d'étiquette de
colonne

With Worksheets("Feuil1")
.Range("A1:B" & .Range("A65356").End(xlUp).Row).Name = "NomColonne"
End With

'Ouvrir la base de données
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")

'Définir la requête formant le recordset
Requete = "SELECT titre1 From NomColonne " & vbCrLf & _
"Where Ucase(titre2) = 'OUI'" & vbCrLf & _
"Group By titre1 ORDER By titre1"

'Création du recordset
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst

'Initialistation du Combobox1 en Feuil1
Do Until Rst.EOF
Feuil1.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop

'Élimination du NOM de la plage
ThisWorkbook.Names("NomColonne").Delete

Rst.Close 'ferme le recordset
bd.Close 'Ferme la base de données
'Libère la mémoire des objets
Set Rst = Nothing: Set bd = Nothing

End Sub
'------------------------------------


Salutations!





"pfval" a écrit dans le message de
news:

Bonjour,

J'arrive pas à faire la procédure suivante

des noms en colonne a, des "oui" et des "non" en colonne b
a b
toto oui
tata oui
titi non
pop oui

je voudrai faire apparaitre que les noms qui ont "oui" dans une listbox.

Qui va être mon sauveur ??
Merci en tout cas de vos réponses





Avatar
pfval
Merci c'est trés sympa de m'avoir envoyé cet exemple , mais c'est pareil

le message est Erreur de syntaxe sur la ligne
ListBox1.AddItem C Text

par hasard je colle CText
là la procédure va au bout mais je n'ai rien dans la listbox
J'ai Excel 97, peut être que c'est pour ça que ça marche pas ?

A +


"AV" a écrit dans le message de
news:
UserForm1.ComboBox1.AddItem c Text


Le problème est que cette ligne n'existe pas dans l'exemple de code fourni
!

Par ailleurs tu parles de ListBox dans l'objet de la question et
maintenant de

Combo...
Quid de tout ça ?

Si ton adresse est valide (sinon...ben tant pis...), je t'envoie un
exemple en

bal perso

AV





Avatar
michdenis
J'allais oublier que si leur système d'exploitation (windows) , il se peut qu'il y ait une certaine problématique car le
fichier Dll associé à cette bibliothèque est localisé dans un répertoire différent. Il y a moyen d'ajouter une petite
procédure qui tienne compte de ces différences à l'ouverture du Classeur le cas échéant.


Salutations!



"michdenis" a écrit dans le message de news:
Bonjour Pfval,

Si les usagers ouvrent le fichier à partir du serveur et travaille sur ce fichier, il ne devrait pas y avoir de problème car
le fichier contient déjà la référence ... Si tu as des ordi version 97, la configuration de leur poste de travail n'aura pas
la bibliothèque Dao 3.6 , Dans toutes les autres version Excel 2000 2002 et 2003 cela ne devrait pas causer de problèmes.


Salutations!



"pfval" a écrit dans le message de news:
Merci pour ta réponse mais le fichier .xls que je dois faire sera installé
sur un serveur et plusieurs utilisateurs y auront accés , donc ma question
est faudra t' il que j'installe "Microsoft DAO 3.6 objects librairy" sur
chacun des postes? Cela étant impossible, trop de postes

a +

"michdenis" a écrit dans le message de
news:%
Bonjour Pfval,


Une autre alternative....si ta liste est longue

1 ) n'affiche que les données répondant aux critères
1 ) trie par ordre alphabétique les données affichées dans le combobox
2 ) évite la présence des doublons le cas échéant

Pour ce faire, tu dois charger la bibliothèque :

"Microsoft DAO 3.6 objects librairy"

J'ai donnée à la colonne A1, B1 les étiquettes de colonnes Titre1 et
Titre2


Le combobox s'appelle Combobox1 et il est situé sur la feuil1 de même que
les données.


'------------------------------------
Sub RequêteExcel()

Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String

'définir la plage de cellule: Ne pas inclure la ligne d'étiquette de
colonne

With Worksheets("Feuil1")
.Range("A1:B" & .Range("A65356").End(xlUp).Row).Name = "NomColonne"
End With

'Ouvrir la base de données
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")

'Définir la requête formant le recordset
Requete = "SELECT titre1 From NomColonne " & vbCrLf & _
"Where Ucase(titre2) = 'OUI'" & vbCrLf & _
"Group By titre1 ORDER By titre1"

'Création du recordset
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst

'Initialistation du Combobox1 en Feuil1
Do Until Rst.EOF
Feuil1.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop

'Élimination du NOM de la plage
ThisWorkbook.Names("NomColonne").Delete

Rst.Close 'ferme le recordset
bd.Close 'Ferme la base de données
'Libère la mémoire des objets
Set Rst = Nothing: Set bd = Nothing

End Sub
'------------------------------------


Salutations!





"pfval" a écrit dans le message de
news:

Bonjour,

J'arrive pas à faire la procédure suivante

des noms en colonne a, des "oui" et des "non" en colonne b
a b
toto oui
tata oui
titi non
pop oui

je voudrai faire apparaitre que les noms qui ont "oui" dans une listbox.

Qui va être mon sauveur ??
Merci en tout cas de vos réponses





Avatar
isabelle
bonjour pfval,

tu pourrais utiliser quelque chose comme ça à l'ouverture du classeur

ThisWorkbook.VBProject.References.AddFromFile ThisWorkbook.Path & _
"C:Program FilesFichiers communsMicrosoft SharedDAOdao360.dll"

en adaptant au chemin du réseau.

isabelle


Merci pour ta réponse mais le fichier .xls que je dois faire sera installé
sur un serveur et plusieurs utilisateurs y auront accés , donc ma question
est faudra t' il que j'installe "Microsoft DAO 3.6 objects librairy" sur
chacun des postes? Cela étant impossible, trop de postes

a +

"michdenis" a écrit dans le message de
news:%
Bonjour Pfval,


Une autre alternative....si ta liste est longue

1 ) n'affiche que les données répondant aux critères
1 ) trie par ordre alphabétique les données affichées dans le combobox
2 ) évite la présence des doublons le cas échéant

Pour ce faire, tu dois charger la bibliothèque :

"Microsoft DAO 3.6 objects librairy"

J'ai donnée à la colonne A1, B1 les étiquettes de colonnes Titre1 et
Titre2


Le combobox s'appelle Combobox1 et il est situé sur la feuil1 de même que
les données.


'------------------------------------
Sub RequêteExcel()

Dim bd As Database, Rst As Recordset, Rg As Range
Dim Requete As String

'définir la plage de cellule: Ne pas inclure la ligne d'étiquette de
colonne

With Worksheets("Feuil1")
.Range("A1:B" & .Range("A65356").End(xlUp).Row).Name = "NomColonne"
End With

'Ouvrir la base de données
Set bd = OpenDatabase(ThisWorkbook.FullName, False, False, "excel 8.0")

'Définir la requête formant le recordset
Requete = "SELECT titre1 From NomColonne " & vbCrLf & _
"Where Ucase(titre2) = 'OUI'" & vbCrLf & _
"Group By titre1 ORDER By titre1"

'Création du recordset
Set Rst = bd.OpenRecordset(Requete)
Rst.MoveLast
Rst.MoveFirst

'Initialistation du Combobox1 en Feuil1
Do Until Rst.EOF
Feuil1.ComboBox1.AddItem Rst(0)
Rst.MoveNext
Loop

'Élimination du NOM de la plage
ThisWorkbook.Names("NomColonne").Delete

Rst.Close 'ferme le recordset
bd.Close 'Ferme la base de données
'Libère la mémoire des objets
Set Rst = Nothing: Set bd = Nothing

End Sub
'------------------------------------


Salutations!





"pfval" a écrit dans le message de
news:

Bonjour,

J'arrive pas à faire la procédure suivante

des noms en colonne a, des "oui" et des "non" en colonne b
a b
toto oui
tata oui
titi non
pop oui

je voudrai faire apparaitre que les noms qui ont "oui" dans une listbox.

Qui va être mon sauveur ??
Merci en tout cas de vos réponses







1 2