Liste intuitive /// adapatation fonction

jonleboss

XLDnaute Junior
Bonjour à tous les mordus de VBA,

En faisant des recherches sur une liste intuitive, je suis tombé sur une fonction VBA mais je n'arrive pas à l'adapter.

Comment dans le fichier en PJ, peut-on :

- Aller chercher la liste dans une feuille nommée « Feuil2 » et qui commence en B2 sur cette même feuille ?
- Paramétrer la largueur des TextBox / ListBox ? Je ne trouve pas où ces paramètres ont été définis dans visual basic
- Paramétrer le nombre de ligne affichée dans la ListBox ? Je ne trouve pas où ces paramètres ont été définis dans visual basic

Je pense que c’est assez simple pour vous mais là je sèche ;)

Merci par avance.

Jonathan
 

Pièces jointes

  • essai.xls
    54.5 KB · Affichages: 47
  • essai.xls
    54.5 KB · Affichages: 52
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Liste intuitive /// adapatation fonction

Bonjour.
Pour la 1ère question précisez à la place de ActiveSheet et, suivi d'un point, à gauche des Cells le nom de l'objet Workhseet correspondant à la feuille d'où vous voulez tirer la liste. Moi je ne le préciserais qu'une fois, vu que je commencerais par en charger la UsedRange dans un tableau VBA (je déteste multiplier les Cells et Range, c'est très pénalisant).
Pour le reste, tout se passe dans la fenêtre de propriétés. D'abord onglet Développeur, groupe Contrôles, Mode Création.
Clic droit sur un des contrôles, Propriétés.
À la fin cliquez à nouveau sur Mode Création pour l'annuler.
 
Dernière édition:

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Bonjour Dranreb,

Merci pour votre retour.

Je n'avais pas trouvé les menus de configurations des objets …il n’était bizarrement pas au même endroit que d’habitude. Surement une erreur de ma part.

Si je comprends bien votre remarque quant à la source de donnée, c’est à ce niveau là que cela se passe :

Code:
For l = 1 To ActiveSheet.UsedRange.Rows.Count

Comment indiquez-vous spécifiquement que la liste de donné commence à la cellule B2 de la Feuil 2 ?

Merci pour votre support.

Jonathan
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Liste intuitive /// adapatation fonction

Vous mettez à la place de ActiveSheet le nom de l'objet Worksheet qui la représente.
Pour connaître son nom vous pouvez l'activer puis exécuter une procédure qui fait :
MsgBox Activesheet.CodeName
N'oubliez pas de mettre aussi ce nom devant les Cells, sinon il continuera de les prendre de la feuille active.
Sauf si vous décidez de d'abord charger sa UsedRange dans un tableau en mémoire.
 
Dernière édition:

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Dranreb,

Là je bloque, enfin mes compétences :confused: j’arrive à modifier certains fonctions mais là je ne comprends pas trop comment m’y prendre avec la fonction en place. Auriez-vous la possibilité de m’aider sur cette ligne de code qui semble être à votre portée d’un point de vue modif ?

Jonathan
 

Dranreb

XLDnaute Barbatruc
Re : Liste intuitive /// adapatation fonction

Dans le classeur joint il n'y a qu'une feuille. Son nom Excel est "Feuil1". Le nom de l'objet Worksheet qui la représente est Feuil1 aussi (mais il pourrait être différent). Pour que les données soient toujours prises de cette feuille même si les contrôles étaient dans une autre, il faudrait mettre :
VB:
Private Sub ChargeListbox(ByVal sFiltre As String) ' Rechargement du ListBox avec filtrage
Dim L As Long
ListBox1.Clear
For L = 1 To Feuil1.UsedRange.Rows.Count
    If Feuil1.Cells(L, 1).Text Like "*" & sFiltre & "*" Then
        ListBox1.AddItem Feuil1.Cells(L, 1).Text
        End If
    Next L
End Sub
Ou mieux :
VB:
Private Sub ChargeListbox(ByVal sFiltre As String) ' Rechargement du ListBox avec filtrage
Dim T(), L As Long
ListBox1.Clear
T = Feuil1.UsedRange.Columns(1).Value
For L = 1 To UBound(T, 1)
    If T(L, 1) Like "*" & sFiltre & "*" Then ListBox1.AddItem T(L, 1)
    Next L
End Sub
 

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Merci ca fonctionne très bien :) Y a du niveau :cool:

Par contre, dans votre 2ème proposition, pour que je comprenne bien et ne repose pas la questioon si j'ai besoin d'adapter votre function, où et comment est define qu’il faut prendre la colonne B à partir de B2 ?

Avec vos explications complémentaires, je saurai comment coder pour faire partir la liste de A1 ou C3 par exemple.

Jonathan
 
Dernière édition:

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Merci ca fonctionne très bien :) Y a du niveau :cool:

Par contre, dans votre 2ème proposition pour que je comprenne bien et ne repose pas la question si j'ai besoin d'adapter votre fonction :

- Où et comment est define qu’il faut prendre la colonne B à partir de B2 ? Avec vos explications complémentaires, je saurai comment coder pour faire partir la liste de A1 ou C3 par exemple.

- Comment faire que la fonction ne s'applique que quand je je clique dans une cellule de la colonne B ?

Jonathan
 

Dranreb

XLDnaute Barbatruc
Re : Liste intuitive /// adapatation fonction

On peut faire :
VB:
T = Feuil1.[B2].Resize(Feuil1.[B5000].End(xlUp).Row - 1).Value
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Sélection d'une cellule
If Target.Rows.Count = 1 And Target.Columns.Count = 1 And Target.Column = 2 Then
 
Dernière édition:

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Parfait !

J'ai essayé de modifier différents paramètres pour comprendre, cela me servira dans le futur.

Par contre, quand je change le nom de l'onglet et que je le modifie dans la partie suivante ( Feuil1 en Feuil2 par ex. ) :

Code:
Private Sub ChargeListbox(ByVal sFiltre As String) ' Rechargement du ListBox avec filtrage
Dim T(), L As Long
ListBox1.Clear
T = Feuil1.UsedRange.Columns(1).Value
For L = 1 To UBound(T, 1)
    If T(L, 1) Like "*" & sFiltre & "*" Then ListBox1.AddItem T(L, 1)
    Next L
End Sub

Cela ne fonctionne plus, j'ai l'erreur suivante "erreur d'execution 424 objet requis ". J'ai regardé partout dans le code et je ne vois pas d'autre endroit où est mentionné Feuil1. Comment cette erreur peut s'expliquer ?

Merci.

J.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Liste intuitive /// adapatation fonction

Le texte qui identifie l'onglet dans la collection Sheets n'a rien à voir avec les noms des objets Worksheet qui les représentent. Si en changeant Feuil1 en Feuil2 cela provoque cette erreur c'est que la rubrique Microsoft Excel Objets du projet VBA ne comporte pas de module objet Feuil2.
Remarque: Dans la dite rubrique, le nom Excel de la feuille qu'il représente y est rappelé entre parenthèses à sa droite.
 
Dernière édition:

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Bonsoir Dranreb,

J'ai pris en compte vos conseils mais n'ai pas réussi à identifier quelle est l’erreur … tout me semble bien nommé et rappelé dans les fonctions. Peut-etre que votre oeil d’expert verra ce que je n’ai vu.

Merci encore.

Jonathan
 

Pièces jointes

  • jonleboss_essai_2.xls
    52.5 KB · Affichages: 31

Dranreb

XLDnaute Barbatruc
Re : Liste intuitive /// adapatation fonction

La Sub ChargeListBox a disparu ?
L'ensemble du code doit être dans le module de la feuille où ça doit fonctionner. J'aurai donc plutôt cru Feuil2 (Data) puisque les données qui devront alimenter la liste quand vous l'aurez remise me semblent toujours en Feuil1 ?
 

jonleboss

XLDnaute Junior
Re : Liste intuitive /// adapatation fonction

Bonsoir,

Je me suis trompé d'upload :) Il s'agissait d'une ancienne version de travail avec laquelle je n'ai rien reussi à faire .... Je vous confirme que les données doivent etre récupérées dans l'onglet "Data" comme illustré par la PJ.

Encore désolé.

J.
 

Pièces jointes

  • jonleboss_essai_3.xls
    50.5 KB · Affichages: 32
  • jonleboss_essai_3.xls
    50.5 KB · Affichages: 39

Discussions similaires

Réponses
1
Affichages
480

Statistiques des forums

Discussions
312 508
Messages
2 089 136
Membres
104 043
dernier inscrit
SpideyCodeWarrior