Liste en ligne pour ComboBox ?

  • Initiateur de la discussion Drefzone
  • Date de début
D

Drefzone

Guest
Bonjour cher Forum.

Grace à vous je sais maintenant creer des listes dans des comboBox en utilisant une colonne entière d'Excel. Pour l'instant j'utilise les 65565 lignes de la colonne, pfff quel gachi non ???
Alors, est-il possible de n'utiliser qu'un nombre donné de cellules de la colonne ? Par exemple de A5 à A15.

Ensuite est-il possible d'utiliser une ligne d'excel comme source pour le comboBox ?
et si oui, est il possible aussi de ne définir qu'un certain nombre de cellule ?
Pae exemple de E3 à P3.

Merci à vous tous pour toutes vos aides passées et à venir.

A+
Dref
 
@

@+Thierry

Guest
Salut DrefZone, le Forum

Arf...... Grace à nous tu utilises une colonne entière pour alimenter une ComboBox .... Non, enfin pas de moi ce coup là et je ne l'ai pas vu passer !! lol (fais voir le code que tu utilises ?)

Voici les trois méthodes connues pour alimenter une ComboBox de manière dynamique...

METHODE ADDITEM :
Description de l'aide :Ajoute un élément à la liste d'une zone de liste ou d'une liste modifiable à colonne unique. Ajoute une ligne à la liste d'une zone de liste ou d'une liste modifiable multicolonnes.

Exemple concret :
Private Sub UserForm_Initialize()
Dim i As Byte, x As Byte
i = Sheets("Database").Range("A65536").End(xlUp).Row
For x = 1 To i
With ComboBox1
.AddItem Sheets("Database").Range("A" & i)
End With
Next x
End Sub


METHODE ROWSOURCE : (attention Combobox de UserForm ONLY)
Description de l'aide : Spécifie la source de données fournissant une liste à un contrôle ComboBox ou ListBox.

Exemple concret :
Private Sub UserForm_Initialize()
Dim Plage As String
With Sheets("Database")
Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row).Address
End With
ComboBox1.RowSource = "Database!" & Plage
End Sub

NB : la méthode "RowSource" ci-dessus ne supporte pas des nom de feuille (onglet) avec des espaces et certains caractères spéciaux


METHODE LIST :
Description de l'aide : Renvoie ou définit la liste des entrées d'un contrôle ListBox ou ComboBox.

Exemple concret :
Private Sub UserForm_Initialize()
Dim Plage As Range
Dim Tab1() As String
With Sheets("Database")
Set Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
ReDim Tab1(1 To Plage.Count)
For Each Cell In Plage
i = i + 1
Tab1(i) = Cell
Next
ComboBox1.List = Tab1
End Sub

Voilà, ces trois méthodes feront le même résultat (à l'oeil nu) dans la l'initialisation du UserForm pour l'incrémentation de données dans ComboBox1

Maintenant pour en revenir à nos moutons, dans ton exemple, alors on peut alimenter une ComboBox d'une maniere fixe (non-dynamique) comme suit :

METHODE ADDITEM :
Private Sub UserForm_Initialize()
Dim i As Byte, x As Byte
For x = 5 To 15
With ComboBox1
.AddItem Sheets("Database").Range("A" & x)
End With
Next x
End Sub


METHODE ROWSOURCE : (Combobox de UserForm Only, sinon voir ListFillRange)
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Database!A5:A15"
End Sub

La Methode List semble un peu superflue pour ceci....

Bonne Fin de Journée
@+Thierry










Bonne Fin de Week End
@+Thierry
 
D

Drefzone

Guest
Merci pour cette longue reponse.
Je vais essayer de trouver une soluce pour mon cas avec.


Pour info mon code utilisé avec Excel97 qui me permet de recuperer toutes les données de la colonne A de la feuille Database est par exemple :

L = Sheets("Database").Range("A65536").End(xlUp).Row
PlagI = Sheets("Database").Range("A1:A" & L).Address
ComboBoxTM.RowSource = "Database!" & PlagI

L'idée est donc de ne pas utiliser les 65536 lignes de la colonne et ensuite d'essayer de lire une ligne en définissant une zone bien precise comme expliqué dans mon premier message.

En tout cas, merci d'avance pour toute autre aide :eek:)

A+
Dref !!!
 
@

@+Thierry

Guest
RE Salut DrefZone, le Forum

Comme expliqué dans mon premier message (tout en bas !! lol) avec ceci tu as ta réponse :

Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Database!A5:A15"
End Sub


Mais pour être clair et contrairement à ce que tu pense, avec
"L = Sheets("Database").Range("A65536").End(xlUp).Row"

Tu "n'utilises" pas 65536 lignes, tu ne fais que trouver la dernière qui est remplie en partant du bas... C'est ceci pour faire une plage dynamique...

Bonne Soirée
@+Thierry
 
D

drefzone

Guest
Bonsoir à toutes et à tous.

Je n'avais pas eu trop le temps de reprendre mon petit pb mais après une journée de messages d'erreurs, je reviens vous voir :eek:)

Ma question est la suivante :
Avec Excel 97 est-il possible d'afficher la liste d'un ComboBox issue d'une ligne d'une feuille Excel ?

Par exemple des cellules E10 à J10 de la feuille Database:
Avec le code
ComboBox1.RowSource = "Database!E10:J10"
je n'ai que la valeur de la cellule E10 qui apparaît.

Pour info, si la source est une colonne, j'y arrive bien (merci pour ça @+Thierry).

Bonne soirée et merci.
 
@

@+Thierry

Guest
SAlut DrefZone, le Forum

Pour faire ceci il faut utiliser la méthode AddItem sous une boucle comme suit :

Dim x As Byte
For x = 5 To 8 '5 = Colonne E / to 8 = Colonne J
ComboBox1.AddItem Sheets("Database").Cells(10, x)
Next x

Bonne Journée
@+Thierry
 
D

drefzone

Guest
Bonjour @+Thierry.

Merci pour ces infos mais helas depuis que j'essaye, j'ai un message "Erreur d'application" me disant "la memoire ne peut être "read""

Peut être est-ce un pb de version car j'utilise Excel 97 SR-2.
J'ai essayé sur 2 PC différents avec la même version d'Excel et le même pb apparaît.

Dommage car cela m'aurait bien rendu service :eek:)

En tout cas merci beaucoup pour ton aide.

Si jamais quelqu"un connait une soluce pour Excel 97, merci d'avance :eek:)


Bonne journée.
Dref !!!
 

Discussions similaires

Réponses
28
Affichages
1 K
Réponses
0
Affichages
260
Réponses
9
Affichages
230

Statistiques des forums

Discussions
312 771
Messages
2 091 954
Membres
105 126
dernier inscrit
ait zerraf