listbox multi base de données

  • Initiateur de la discussion Michel
  • Date de début
M

Michel

Guest
Bonjour à tout le forum,

Tout en gardant la présentation de mon userform, je cherche
à gérer plusieurs base de données dans mon classeur.
C'est à dire par exemple, à l'aide d'un combobox sélectionner la base
de données voulue et la mettre dans la listbox, ensuite la filtrer avec
le textbox.
J'espère que je me suis bien expliquer et je vous remercie du coup
de main que vous m'apportez.
D'avance merci
Michel
[file name=ListBoxMulti_20050314092216.zip size=0]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ListBoxMulti_20050314092216.zip[/file]
 
M

Michel

Guest
re
toujours mon problème avec win zip 9.0
Je renvoie la pièce
D'avance merci
Michel [file name=essai_20050314093124.zip size=46575]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/essai_20050314093124.zip[/file]
 

Pièces jointes

  • essai_20050314093124.zip
    45.5 KB · Affichages: 34

Hervé

XLDnaute Barbatruc
Bonjour

Voir en pièce jointe, j'ai rajouté une combobox, pour sélectionner la base.

Tiens nous au courant [file name=ListBoxMulti_V02_20050314095829.zip size=47295]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ListBoxMulti_V02_20050314095829.zip[/file]

Message édité par: Hervé, à: 14/03/2005 09:58
 

Pièces jointes

  • ListBoxMulti_V02_20050314095829.zip
    46.2 KB · Affichages: 66
M

Michel

Guest
Salut Hervé,
Tout d'abord merci de ta rapidité, la combo marche bien, mais
quand je filtre avec la texbox elle ne filtre pas les autres bases
de données.
Ceci n'étant pas trop important mais un peu embêtant.
Encore merci
Michel
 

Hervé

XLDnaute Barbatruc
re

Je n'étais pas aller voir le reste du code, désolé.


Dans la macro textbox1_change, remplace :

Feuil2.Activate
Feuil2.Range('A1').Select
Ligne = Feuil2.Range('A' & '65536').End(xlUp).Row
Set Plage = Feuil2.Range('A' & '2:' & 'A' & Ligne)

par :

With Sheets(ComboBox1.Value)
Ligne = .Range('A' & '65536').End(xlUp).Row
Set Plage = .Range('A' & '2:' & 'A' & Ligne)
End With

Par contre l'initialisation de la listbox par un déchargement et rechargement de l'userform, c'est pas top.

J'aurais opté pour une routine indépendante pour remplir la listbox, puis j'aurais fait appel à celle-ci lors de l'initialisation du usf, du changement de valeur dans la combobox, et enfin pour le init.

Si ca t'interesse, fait moi le savoir.

A plus...
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Hervé, Michel, le Forum

Quelqu'un pourrait me dire pourquoi tous les deux, vous écrivez :

[li]Ligne = .Range('A' & '65536').End(xlUp).Row [/li]
[li]Set Plage = .Range('A' & '2:' & 'A' & Ligne)[/li]


Au lieu de
[li]Ligne = .Range('A65536').End(xlUp).Row [/li]
[li]Set Plage = .Range('A2:' & 'A' & Ligne)[/li]


Juste pour éviter de laisser des truc zarbis traîner sur le Forum, car certain pourrait multiplier ce genre de syntax en lisant ce Fil...


Bonne Journée
@+Thierry
 

Hervé

XLDnaute Barbatruc
re michel

salut thierry

En pièce jointe la modif, avec une seule macro pour la listbox.

Plusieurs choses :

- Pour effacer une cellule, inutile de la sélectionner avant :

range('a1').select
selection.clearcontents
=
range('a1').clearcontents

- Le code pour renvoyer les données de la listbox, est celui d'une sélection multiple, alors que ton controle est en sélection unique ??? Soit tu peux simplifier ton code pour éviter de boucler sur tous les items de la listbox, soit tu modifies le type de sélection.

- J'ai vu dans le module de la feuille insere les macros pour la gestion des stocks, pourquoi ne gérerais-tu pas tout via le userform ?
je n'ai pas touché à ces codes

- Penses à modifier ces macros pour gérer la bonne database , surement en déclarant public le nom de la feuille de la database.

a plus



[file name=ListBoxMulti_V03.zip size=45817]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ListBoxMulti_V03.zip[/file]
 

Pièces jointes

  • ListBoxMulti_V03.zip
    44.7 KB · Affichages: 45

Hervé

XLDnaute Barbatruc
re

une autre méthode en pièce jointe.

bye [file name=ListBoxMulti_V03_20050314135704.zip size=42939]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ListBoxMulti_V03_20050314135704.zip[/file]
 

Pièces jointes

  • ListBoxMulti_V03_20050314135704.zip
    41.9 KB · Affichages: 69

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Bertarnd, re Hervé, Michel, le Forum

Bertrand, quand j'écrivais au dessous

Au lieu de :
[li]Ligne = .Range('A65536').End(xlUp).Row[/li]
[li]Set Plage = .Range('A2:' & 'A' & Ligne)[/li]

C'était parceque j'écrivais juste avant :

Quelqu'un pourrait me dire pourquoi tous les deux, vous écrivez :
[li]Ligne = .Range('A' & '65536').End(xlUp).Row[/li]
[li]Set Plage = .Range('A' & '2:' & 'A' & Ligne)[/li]

En fait c'est la Syntax en Vert qui est à retenir et pas la Rouge

Mais il n'y a pas de mal à poser la question.

Bon Aprèm
@+Thierry
 
M

Michel

Guest
Bonjour à tous et le forum,
rentrer un peu tard hier soir du boulot. Hervé, dans la dernière démo
il y a un bug, quand je filtre la database1, il me lance une fin
de procédure.
Autrement le reste me va bien.

Je vous remercie de vous être pencher sur mon problème.

Encore merci et @ plus
Michel
 
M

mutzik

Guest
Bonjour à tous, le forum, Thierry,

Thierry, mille pour cent cent d'accord avec toi, ma question portait juste sur le fait qu'on peut également concaténer directement

old version
Set Plage = .Range('A' & '2:' & 'A' & Ligne)

ta version
Set Plage = .Range('A2:' & 'A' & Ligne)

my version
Set Plage = .Range('A2:A' & Ligne)

Bonne journée
Bertrand
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Mutzik, Hervé, Michel, le Forum

Arf Mutzik, Deux Cents Milles fois dacodac avec toi, et même en recopiant/collant cette affreuse concaténation inutile, je n'ai même pas vu !!! (Ce doit être à cause des balises Color et Bold !!! arf) LOL

Donc autant pour moi Mutzik, bien vu !!!

Sinon pour Michel, je ne saisis pas trop ton problème, mais j'en vois un plus sérieux lors du Filtre avec la TextBox1, en fait elle ne ne retourne pas les Stock alors boum ensuite si tu essaies d'enlever une quantité, ça ne passe pas, quelque soit la feuille Database ou Database2....

Donc je te propose dans ton UserForm1 de supprimer et remplacer pûrement et simplement la Procédure 'Private Sub TextBox1_Change()' par celle-ci :

Private Sub TextBox1_Change()
Dim Plage As Range, C As Range
Dim Recherche As String, Adresse As String
Dim Ligne As Integer, X As Integer
Dim Myarray()
Dim Y As Byte

   
If TextBox1 = '' Then
        ListBox1.Clear
       
Exit Sub
   
End If

Recherche = TextBox1.Value

With Sheets(ComboBox1.Value)
    Ligne = .Range('A65536').End(xlUp).Row
   
Set Plage = .Range('A2:A' & Ligne)
End With

   
With Plage
   
Set C = .Find(Recherche)
       
If Not C Is Nothing Then
        Adresse = C.Address
           
Do
               
If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
                   
ReDim Preserve Myarray(10, X)
                       
For Y = 0 To 9
                        Myarray(Y, X) = C.Offset(0, Y)
                       
Next Y
                        X = X + 1
               
End If
               
Set C = .FindNext(C)
           
Loop While Not C Is Nothing And C.Address <> Adresse
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
End With

If X = 0 Then Exit Sub

ListBox1.Column() = Myarray
Feuil1.Activate
End Sub



Je pense que ça ira bien mieux, et aussi dans la Procédure 'Private Sub ListBox1_DblClick' je te conseillle d'utiliser une méthode InputBox, plutôt qu'une Fonction InputBox, car la première offre l'avantage de pouvoir paramatrer la valeur attendue... Ici un nombre... ça t'évitera un autre Bug...

Quant = Application.InputBox('Quelle quantité ?', Type:=1)

et dans la Foulée 'Quant' devient Byte 'Quand' on a pas plus de 255 prévu (Sinon Integer) mais plus Variant...

Pour le reste je n'ai pas vraiment suivi ... mais Michel, tu essaies tout ça et reviens nous dire tes progrès...


Sinon Pour Hervé, Ok pour le DoubleClick dans ce Contexte, pas vraiment d'autre possibilité... Ou alors il faudrait faire comme dans l'exemple que je t'ai donné l'autre fois, sur Evènement Change et faire un scan sur la colonne Stock... 'Quand' les items sélectionné ont une Quantité initiée par la Variable 'Quant' (wouarf)... 'Quant' aux items sélectionnés qui n'ont pas de quantité... 'Quand' le scan passe par là, c'est le moment de lancer une Invite pour en proposer d'initialiser la variable 'Quant'... Bon après ça je vais boire l'apéro !!!

Bon Appétit
@+Thierry

Message édité par: _Thierry, à: 15/03/2005 11:40

Message édité par: _Thierry, à: 15/03/2005 11:41
 

Discussions similaires

Réponses
9
Affichages
828

Statistiques des forums

Discussions
314 017
Messages
2 104 582
Membres
109 083
dernier inscrit
Stef06