Comment ça, liés ?
Version imprimable
Comment ça, liés ?
de telle maniere a ce que j'ai toujours la correspondance entre les combobox comme dans mon fichier
Non ! Pour lier les données au listbox, c'est seulement RowSource.
A+
alors ya une soluce pour mon fichier ? 8O 8O 8O 8O
on peut remplir avec add item et apres convertir en rowsources c ça ?
:question:
Non. Mais je verrai ça demain, j'ai un bon bouquin qui m'attend. Désolé mais tu devrais aussi aller te coucher, on ne règlera pas ce pb ce soir... à moins que vous, des Antilles, du Canada, de la Réunion ou des Îles du Pacifique ayez envie de vous pencher sur le cas du pauv' SixBox... Je vous encourage à le faire, c'est un truc 'achement intéressant qui vous apporterait plein de bonnes choses :mouarf:
Bon courage à tous
A+
BONJOUR
Je maitrise pas trop add item
mais sur la faq je vois pas comment trier les données ?
Hello, on va commencer par le plus facile.
Peux-tu faire un tri sur ta feuille de calculs ? C'est le plus simple.
A+
OUPS le trie prend aussi la ligne a entete:aie:
Pas obligé si tu spécifies qu'il y a une ligne d'entête. Tu devrais lire ce qui est écrit dans la fenêtre du tri avant de te lancer ;) Si tu vas trop vite, tu vas rater plein de choses :mouarf:
A+
Dans
Excel met Header:=xlGuess par défaut. Remplace ça par "Header:=xlYes"Code:
1
2
3
4 Cells.Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
xlGuess laisse à Excel le soin de déterminer s'il y a une entête ou non et j'aime bien décider moi-même ;)
en appliquant le codej'ai une erreur 1004:aie: :aie:Code:
1
2
3
4
5
6
7 Private Sub cbox2_Click() Cells.Select Selection.Sort Key1:=Range("d5"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal laprocedure cbox2.ListIndex End Sub
Sur quelle ligne ?
Quand tu as une erreur, tu donnes l'erreur, pas le N° ou avec. Tu indiques la ligne et le contexte (quelques lignes en dessus et en dessous, qu'on comprenne)
Faut tout y dire à çuilà ! :mouarf:
A+
Edit
Et pourquoi mets-tu Key1:=Range("d5") ? C'est toute ta feuille que tu tries. Avec Key1:=Range("A2"), ça ne te va pas ?
Enfin, où est ta ligne d'entête ? J'espère qu'elle est bien sur la première
ligne...
PS - Simplifie le code en mettant
T'es pas obligé de sélectionnerCode:
1
2
3 Cells.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
Ou je dois mettre ce code et comment le lancer ?
si je le met dans private sub cbox2
j'ai une erreur de compilation :argument nommé introuvable
et en mode degug j'ai l'expression DataOption1:=xlSortNormal en jaune
1 - As-tu des cellules fusionnées ?
2 - La cellule de référence est-elle renseignée ?
3 - Ton entête est-elle sur la première ligne ?
Essaie d'être précis, par exemple, tu dis "si je le met dans private sub cbox2... etc", il y a quinze événements dans lequel tu peux mettre ton code, dans une combobox. En l'occurence, si on a suivi, on sait que c'est le click mais quelqu'un qui arrive ne le sait pas.
Fais un effort de ce côté là, tu facilitera nos échanges ;)
A+
1 Non je n'ai pas de cellule fusionné
2 Non la cellule a1 n'a pas de valeur
3 Non entete commence a partir de la troisieme ligne
Donc, pour ton tri, tu dois sélectionner ta plage à partir de la ligne 4 et mettre Header:=xlNo
"Cells" sélectionne toute la page, dans ce cas précis, ce n'est pas bon. Quant à xlGuess, si l'entête n'est pas sur la ligne 1, Excel considère qu'il n'y en a pas.
Donc, tu définis ta plage à trier en remplaçant NoColDebut, NoLigneFin, et NoLigneFin par les bonnes valeurs et tu mets
et là tu as des chance d'avoir le tri que tu souhaites.Code:
1
2
3 Range(Cells(4,NoColDébut),Cells(NoLigneFin,NoColFin)).sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal
Et moi, je me trouve bien gentil :mouarf:
A+
NB - On n'a pas idée de mettre une entête sur la ligne 3 !:evil:
Ou je place le code sachant en fait qu' a chaque fois que je vais cliquer sur n'importe qu'elle combobox celle ci me montre ses valeurs triees et une fois la valeur selectionnée les autres combobox m'indique leurs valeurs equivalentes
exemple si dans mon fichier je recherche le numero de telephone de nr leneuf je clique sur la combobox nom ( cbox1 ) celle ci me montre toute les valeurs triées ( la tortue ,le directeur,legrand,le renard .....) dans cet ordre
Si tu sélectionnes toujours la même combobox, pas de pb. Quand tu sélectionnes un nom, avec le code passé il y a 10 jours pour que tes autres combo affichent les renseignements correspondant au nom sélectionné, tu auras ce que tu veux.
Maintenant, si tu veux pouvoir sélectionner un N° de téléphone pour obtenir le nom, classer les N° de téléphones pour effectuer cette sélection, alors c'est effectivement plus tordu.
Mais avant d'en parler, explique ce que tu veux. 'n'aurait dû commencer par là, non ?
A+
voila en fait je souhaite exploiter mon userform pour faires des recherches sur mon fichier excel bd dont lequel figure tous mes contacts .
j'utilise des combobox liées entre elles ( pour recuperer toutes les informations ) sachant que si je rajoute un nouveau contact celui-ci soit aussi pris en compte dans mes combobox ( mon fichier tourne et "laprocedure "est excellente ;) )
Maintenant comme j'ai pas mal de lignes sur excel j'aimerai que chaque fois que je clique sur une combobox quelles qu'elles soient celle ci me montre ses valeurs triées ...... ( c'est la que ça se complique :aie: )
Le plus simple sinon le plus sioux, est de trier tes données sur place
Tu cliques sur cbox1, la base de données est triée selon la colonne 1
Tu cliques sur cbox2, la base de données est triée selon la colonne 2
etc.
Pour remplir tes combos, utilise bien RowSource
Pour définir la plage, tu as le N° de colonne, le N° de la 1ère ligne, et tu sais trouver le N° de la dernière ligne. DerniereLigne = tcétéra...
Pour mettre à jour tes combos, utilises toujours RowSource. Celui-ci peut être modifié à la demande
En cas d'ajout de données, et donc de lignes, et afin que tous tes combos se mettent à jour, tu fais une routine unique qui fera le travail, routine que tu appelleras après sélection de l'un des combos et qui mettra à jour la "rowsource"Code:LeCombo.RowSource = Range(cells(4,NoCol),Cells(DerniereLigne,NoColl)).address
Dans cette routine, tu mettra à jour la dernière ligne de la base avant de mettre à jour tous les combos
Tu peux faire ça dans une boucle du style
Ainsi, tous tes combos se mettront à jour.Code:
1
2
3
4
5
6
7
8 DerniereLigne = tu connais... For each LeCombo in Grille.controls if instr(LeCombo.name, "Cbox") <> 0 then 'On récupère le N° de colonne en espérant qu'il corresponde au N° du cbox (?) NoCol = Left(LeCombo.name, len(LeCombo.name)- Instr(LeCombo.name, "Cbox")) Grille.controls(LeCombo.name).rowSource = Range(cells(4,NoCol),Cells(DerniereLigne,NoColl)).address endif Next
A la consition que tes n° de combos correspondent bien aux N° de colonnes des données correspondantes
Sinon ? Tu vas devoir paramètrer le N° de colonne de chaque combo quand tu appelleras cette procédure :cry:
A+
Edit
Tu appelles cette procédure depuis Private sub Cbox_Enter de chaque combo
Le clic, lui, te servira à récupérer l'index de la ligne sélectionnée pour appeler la procédure qui placera tous les combos sur la même "ligne" de la base de données
Enfin, le tri devra être effectué avant la procédure ci-dessus, procédure que tu peux appeler depuis Cbox_Enter de chaque combo en passant le N° du combo ou de colonne en paramètre
Ouf ! Mais je sens bien que ce n'est pas fini :cry:
Je decouvre le message sur le forum :lol:ma premier colonne commence à la colonne C sur excel ....:oops:Citation:
A la condition que tes n° de combos correspondent bien aux N° de colonnes des données correspondantes
Sinon ? Tu vas devoir paramètrer le N° de colonne de chaque combo quand tu appelleras cette procédure
A+