OVH Cloud OVH Cloud

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

6 réponses

1 2
Avatar
pfval
nos messages se sont croisés!!
Cela fonctionne
Merci énormément, tu m'a fais gagner beucoup de temps!!


"AV" a écrit dans le message de
news:
PS : pour l'erreur d'éxécution : ajouter un point entre C et Text !
** UserForm1.ComboBox1.AddItem c.Text **

AV




Avatar
michdenis
Bonjour Pfval,

Essaie cette version de la procédure de AV


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



Salutations!



"pfval" a écrit dans le message de news:
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
Rendons le message lisible ...


J'allais oublier que si leur système d'exploitation (windows) est différent , il se peut qu'il y ait une certaine
problématique car le fichier Dll associé à cette bibliothèque est localisé pas nécessairement dans le même répertoire, le
chemin d'accès étant 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:
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
pfval
bonjour isabelle

je vais essayer ta soluce de mettre le .ddl dans le même repertoire que le
fichier sur le serveur
car tout le monde est sur NT avec Excel 97.
AV m'a dépanné pour l'instant mais je risque effectivement d'avoir un
fichier qui va grossir, donc la procédure de michdenis sera peut être mieux
?

En tout cas merci à tous
Pierre

"isabelle" a écrit dans le message de
news:
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









Avatar
michdenis
Bonjour Pfval,

Si vous travaillez à partir d'une version excel 97, c'est la bibliothèque "Microsoft DAO 3.5 objects librairy" qu'il faut
charger et probablement celle-ci : "Microsoft DAO 2.5/3.5 Compatibility Librairy" ... comme je n'ai plus cette version
d'installée, je ne peux pas effectuer de tests.


Salutations!



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

bonjour isabelle

je vais essayer ta soluce de mettre le .ddl dans le même repertoire que le
fichier sur le serveur
car tout le monde est sur NT avec Excel 97.
AV m'a dépanné pour l'instant mais je risque effectivement d'avoir un
fichier qui va grossir, donc la procédure de michdenis sera peut être mieux
?

En tout cas merci à tous
Pierre

"isabelle" a écrit dans le message de
news:
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









Avatar
pfval
Bonjour,

Merci MichDenis pour toutes tes infos


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

Si vous travaillez à partir d'une version excel 97, c'est la bibliothèque
"Microsoft DAO 3.5 objects librairy" qu'il faut

charger et probablement celle-ci : "Microsoft DAO 2.5/3.5 Compatibility
Librairy" ... comme je n'ai plus cette version

d'installée, je ne peux pas effectuer de tests.


Salutations!



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


bonjour isabelle

je vais essayer ta soluce de mettre le .ddl dans le même repertoire que le
fichier sur le serveur
car tout le monde est sur NT avec Excel 97.
AV m'a dépanné pour l'instant mais je risque effectivement d'avoir un
fichier qui va grossir, donc la procédure de michdenis sera peut être
mieux

?

En tout cas merci à tous
Pierre

"isabelle" a écrit dans le message de
news:
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