Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

listbox avec choix multiple alimentation base de données

20 réponses
Avatar
Alex
Bonjour =E0 tous,

Je rencontre un probl=E8me :

Dans un userform, j'ai une listbox affichant 9 colonnes de ma BDD
"GLC" .
La personne peut s=E9lectionner plusieurs lignes dans le textbox, et =E0
l'aide d'un bouton Validation sur le m=EAme userform, je voudrais pour
les lignes s=E9lectionn=E9es dans le textbox, se mettent sur la colonne J
des m=EAmes lignes s=E9lectionn=E9s la valeur "OK" sur ma feuille "GLC",
mais je n'arrive pas =E0 y parvenir. Quelqu'un aurait il la solution =E0
mon probl=E8me.
Merci par avance de votre aide.
Alex

Mes lignes de commandes de mon Userform sont :

Pour l'activation du UserformForm faisant apparaitre 9 colonnes de ma
feuille "GLC" :
'(ListeBoite =3D Listbox)


Private Sub UserForm_Activate()
With ListeBoite .ColumnCount =3D 9
.ColumnWidths =3D ("30;372;55;30;40;40;40;40;40")
.RowSource =3D Sheets("GLC").Range("B2:J" & _
Sheets("GLC").Range("B2").End(xlDown).Row).Address
End With
End Sub

Est ce que cela vous parait correcte ?

Pour mon bouton Validation :

Private Sub BtnValid_Click()
'Verification de selection Correcte ou pas ???
With ListeBoite
nbboite =3D .ListCount - 1
For i =3D 0 To nbboite
If .Selected(i) =3D True Then
nbboiteselect =3D nbboite + 1
End If
Next
End With
If nbboiteselect =3D 0 Then
MsgBox "Veuillez s=E9lectionner au moins une boite, SVP", vbExclamation,
"Instruction"
Exit Sub
End If
'Si au moins une ligne selectionn=E9e alors en J de la ligne
s=E9lectionn=E9e =3D OK
With ListeBoite
nbboite =3D .ListCount - 1
For i =3D 0 To nbboite
If .Selected(i) =3D True Then
Sheets("GLC").Select
Range("j" & i).Value =3D "OK"
'.Selected(i) =3D False
End If
Next
End With
End Sub

Cela coince sur Range("j" & i).Value =3D "OK"

Mais peut =EAtre qu'il n'est pas possible de faire cela !!!

Merci par avance de votre aide.
Cordialement
Alex

10 réponses

1 2
Avatar
Alex
il faut lire listbox et non textbox
Avec mes excuses
Cdt.
Alex
Avatar
michdenis
Bonjour,

Cela pourrait t'inspirer, un vieux classeur as titre d'exemple : http://cjoint.com/?0lcsYruCbKX


MichD
--------------------------------------------


"Alex" a écrit dans le message de groupe de discussion :


il faut lire listbox et non textbox
Avec mes excuses
Cdt.
Alex
Avatar
Alex
Bonjour Michel,

Merci pour ta réponse, j'ai plusieurs questions, car je n'arrive pas à
tout comprendre avec toutes ces variables :

Tout d'abord, à quoi sert Option Explicit tout en haut des lignes de
macros ?

Dim Tblo () est une variable sans as, c'est la première fois que je
vois ce type de variable, si j'ai bien compris à la lecture complete
de la macro, il s'agit d'une mise en memoire des données ?

Dim A est le nombre de ligne(s) selectionnée(s) dans la listbox ?
Dim T est le compte de ligne A ?
Dim G est le nombre de colonne(s) ?
Dim B ? je comprends pas ce qu'il représente

Et enfin, la ligne de commande suivante :
Sheets("liste2").Range(Cells(5, 3), Cells(5 + UBound(Tblo, 1) - 1, 3 +
NbCol - 1)) = Tblo
remet les données selectionnées sur la feuille à partir de la cellul e
C5, or je voulais faire ajouté en colonne J de ma feuille et des
lignes équivalentes de ma sélection dans la listbox la valeur OK.
Avec ce que j'avais écrit selon ou était placé mon curseur le ok se
mettait un peu n'importe ou.

Merci par avance de ton aide.
Bien cordialement.
Alex
Avatar
michdenis
| à quoi sert Option Explicit

*** Cela force l'usager à déclarer toutes les variables utilisées dans
le module. Cela aide... si le programmeur fait une faute d'orthographe
en utilisant le nom d'une variable, il aura un rappel d'Excel !
*** Tu peux l'enlever si tu désires, ça n'empêche pas le déroulement
de la procédure.

| Dim Tblo () est une variable sans as,

*** C'est une variable un peu spéciale, puisque c'est une variable
contenant un tableau (array) . Dans Excel on utilise habituellement
des tableaux d’une ou 2 dimensions.
Si le type n'est pas déclaré (as ...) le tableau est de type Variant,
il peut contenir ce que tu désires... il n'est pas interdit de définir
le type Tblo() As String ou As Double Ou encore As Date
Si tu définis le type, tu dois t'assurer que toutes les données que tu
mettras dans le tableau correspondent au type que tu as définies
sinon tu auras une erreur 13 (Mismatch)

*** pour ce qui est de la suite, comme le code dans l'exemple est déjà
noté à chaque ligne, ta difficulté provient essentiellement de la notion
de Tableau (array). Je ne peux pas faire ici, le résumé d'un chapitre
complet d'un volume.


MichD
--------------------------------------------


"Alex" a écrit dans le message de groupe de discussion :


Bonjour Michel,

Merci pour ta réponse, j'ai plusieurs questions, car je n'arrive pas à
tout comprendre avec toutes ces variables :

Tout d'abord, à quoi sert Option Explicit tout en haut des lignes de
macros ?

Dim Tblo () est une variable sans as, c'est la première fois que je
vois ce type de variable, si j'ai bien compris à la lecture complete
de la macro, il s'agit d'une mise en memoire des données ?

Dim A est le nombre de ligne(s) selectionnée(s) dans la listbox ?
Dim T est le compte de ligne A ?
Dim G est le nombre de colonne(s) ?
Dim B ? je comprends pas ce qu'il représente

Et enfin, la ligne de commande suivante :
Sheets("liste2").Range(Cells(5, 3), Cells(5 + UBound(Tblo, 1) - 1, 3 +
NbCol - 1)) = Tblo
remet les données selectionnées sur la feuille à partir de la cellule
C5, or je voulais faire ajouté en colonne J de ma feuille et des
lignes équivalentes de ma sélection dans la listbox la valeur OK.
Avec ce que j'avais écrit selon ou était placé mon curseur le ok se
mettait un peu n'importe ou.

Merci par avance de ton aide.
Bien cordialement.
Alex
Avatar
Alex
Merci pour ces précisions.

L'exemple donné semble en faite retenir les données des chaques
"Cellule" des selections dans la listbox.

Je pense que pour ce que je veux faire, il faut que cela retienne
juste les numéros de lignes correspondant à la sélection afin que je
puisse mettre la valeur ok en colonne J de la feuille qui sert aussi à
l'alimentatin de la listbox.

En fait je voulais que les personnes selectionnent via une listbox les
lignes qui les interessent et avoir la valeur OK en colonne J sur le
slignes selectionnées dans la listbox.

Exemple :

Selection de la ligne 1 dans la listbox alors se met en ligne 1 de la
base la valeur OK en J

Merci par avance de votre aide si cela est réalisable
Cordialement
Alex
Avatar
michdenis
Fichier Exemple : http://cjoint.com/?0ldol6NfN7c
(sans la notion de tableau)


MichD
--------------------------------------------


"Alex" a écrit dans le message de groupe de discussion :


Merci pour ces précisions.

L'exemple donné semble en faite retenir les données des chaques
"Cellule" des selections dans la listbox.

Je pense que pour ce que je veux faire, il faut que cela retienne
juste les numéros de lignes correspondant à la sélection afin que je
puisse mettre la valeur ok en colonne J de la feuille qui sert aussi à
l'alimentatin de la listbox.

En fait je voulais que les personnes selectionnent via une listbox les
lignes qui les interessent et avoir la valeur OK en colonne J sur le
slignes selectionnées dans la listbox.

Exemple :

Selection de la ligne 1 dans la listbox alors se met en ligne 1 de la
base la valeur OK en J

Merci par avance de votre aide si cela est réalisable
Cordialement
Alex
Avatar
michdenis
J'ai omis le "+1" dans la ligne de code suivante de la procédure

'le 10 représente 10 colonnes à droite de la colonne A
Rg.Item(A + 1, 1).Offset(, 10) = "Ok" <<<=====
Avatar
Alex
Merci beaucoup Michel
Je suis en train d'adapter par rapport à mon fichier, mais cette fois
ci cela me parait tres bien
Alex
Avatar
Mgr T. Plubanni
heu...et peut-être aussi dans celle-ci de ligne :

With Feuil1
'copie de la ligne du listbox sélectionnée en colonne G
Rg(A + 1, 1).Resize(, Rg.Columns.Count).Copy .Range("G" &
.Range("G65536").End(xlUp).Row + 1)
End With

pardonnez-moi, mon cher michel, de ne pas avoir accepté de voir mes prénom
et nom mêlés à une proc qui fleure bon l'amateurisme.....

Mgr T. P.

"michdenis" a écrit dans le message de news:
iarnhv$tjs$
J'ai omis le "+1" dans la ligne de code suivante de la procédure

'le 10 représente 10 colonnes à droite de la colonne A
Rg.Item(A + 1, 1).Offset(, 10) = "Ok" <<<==== >




Avatar
Mgr T. Plubanni
ah bon....

T. P.

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

Merci beaucoup Michel
Je suis en train d'adapter par rapport à mon fichier, mais cette fois
ci cela me parait tres bien
Alex
1 2