Selection dans listbox et modifications

JONEY76

XLDnaute Occasionnel
Bonjour à tous,

Je suis sur la dernière étape de mon fichier et je bloque !!!

Explications:

il y a 3 feuilles : ACCUEIL / BD (base de données) / RECHERCHE dans la BD

Lorsqu'on ouvre au niveau de la page accueil, un userform appararait

1) Nouvelle saisie : cela agrémente la base de données
2) Recherche : Recherche suivant un numéro article (CA)
3) Visualisation/ Modification : Voir toutes les entrés de BD

Le but du jeu, là je sèche..

étape 1 et 2 = ça marche nickel !!

Etape 3 : Le but est de sélectionner une ligne dans la listbox, que les données de la listbox remplissent les 7 textbox et si je viens modifier une valeur dans une des 7 textbox alors la donnée sera modifiée dans la feuille BD donc en même temps dans la listbox

J'ai commencé avec listbox.index mais je coince..
Ce type de code me servira pour pas mal d'autres fichiers du même style





Au fait, merci d'avance :)
 

Pièces jointes

  • boites.zip
    22.7 KB · Affichages: 84

Excel-lent

XLDnaute Barbatruc
Re : Selection dans listbox et modifications

Bonsoir JONEY76,

JONEY76 à dit:
Etape 3 : Le but est de sélectionner une ligne dans la listbox, que les données de la listbox remplissent les 7 textbox

Pour que cela se fasse, voici les macros que tu dois avoir dans ton UserForm4 (visualisation)
(annule et remplace tout le code que tu avais mis)
Code:
Private Sub ListBox1_Click()

Dim DernièreLigneBD As Long

DernièreLigneBD = Sheets("bd").[A65536].End(xlUp).Row

With Sheets("bd")

    For i = 7 To DernièreLigneBD
        If .Cells(i, 1) = ListBox1.Value Then
          For j = 1 To 7
              Controls("TextBox" & j).Value = .Cells(i, j)
          Next j
        End If
    Next i

End With

End Sub
Private Sub UserForm_INITIALIZE()

Sheets("bd").Activate
With ListBox1
  .RowSource = ("A6:F" & [A65536].End(xlUp).Row)
  .ColumnCount = 7
End With


End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

Sheets("accueil").Activate

End Sub

J'ai remplacé ton code :
Code:
.RowSource = ("A6:F4000")

Par le code suivant :
Code:
.RowSource = ("A6:F" & [A65536].End(xlUp).Row)

Cela permet que la liste de ta BD présente dans ta ListBox1 fasse exactement le même nombre de ligne que ta base de donnée, et non pas qu'il y ait plusieurs millier de lignes vide!

Je regarde pour la seconde partie de ta question : si je viens modifier une valeur dans une des 7 textbox alors la donnée sera modifiée dans la feuille BD

(code testé : ok)

Bonne soirée
 

JONEY76

XLDnaute Occasionnel
Re : Selection dans listbox et modifications

Salut EXcel-lent

Je viens de mettre à jour mon fichier, c'est tout simplement nickel chrome !!!

Je rame avec les i= ; les For

Excel, c'est ton job ou ta passion???


Au fait, un grand merci pour cette première réponse !
 

Excel-lent

XLDnaute Barbatruc
Re : Selection dans listbox et modifications

Hello JONEY76,

J'aime bien apprendre de nouvelles choses sur Excel. Donc j'essaye de me perfectionner aux travers des réponses que je donne et en regardant les réponses des autres!

Pour la seconde partie de ta question, quelqu'un avait trouvé une astuce sympa, mais je n'ai pas trop la tête à décortiquer et reproduire cela ce soir!

En résumé, il récupérait le numéro de la ligne où tu avais cliqué dans ta ListBox (avec index),et après roulé jeunesse! Le reste n'est plus qu'une partie de rigolade!

JONEY76 à dit:
Je rame avec les i= ; les For

Voici une partie du code expliqué

Code:
Private Sub ListBox1_Click()

Dim DernièreLigneBD As Long
[COLOR="Green"]' Définition de la variable DernièreLigneBD. Long cela signifie que la variable va contenir des nombres entier compris entre -2.147.483.648 à 2.147.483.648
[/COLOR]
DernièreLigneBD = Sheets("bd").[A65536].End(xlUp).Row
[COLOR="Green"]' Aller sur l'onglet "bd", se mettre sur la cellule A65536, puis se déplacer vers le haut jusqu'à la première cellule pleine,
' et prendre le numéro de la ligne qu'on place dans la variable DernièreLigneBD
' en partant du principe que la cellule A65536 soit vide et qu'il n'y a pas d'autres lignes remplis en dessous du tableau

[/COLOR]With Sheets("bd")

    For i = [COLOR="Gray"][B]7[/B][/COLOR] To [COLOR="Gray"][I]DernièreLigneBD[/I][/COLOR]
    [COLOR="Green"][B]' Début de la première boucle For ... To ... Next[/B][/COLOR]
        If .Cells(i, 1) = ListBox1.Value Then
          [COLOR="Green"][B][i]' Début de la seconde boucle For ... To ... Next[/i][/B][/COLOR]
          [COLOR="Green"]' Boucle qui se trouve à l'intérieur de la première[/COLOR]
          For j = 1 To 7
              Controls("TextBox" & j).Value = .Cells(i, j)
          Next j
          [COLOR="Green"][B][i]' Fin de la seconde boucle For ... To ... Next[/i][/B][/COLOR]
        End If
    Next i
    [COLOR="Green"][B]' Fin de la première boucle For ... To ... Next[/B][/COLOR]

End With

End Sub

La première boucle balaye ta BD de la ligne 7 (-> i), jusqu'à la dernière ligne de ta base de donnée (-> DernièreLigneBd)

Il regarde si la cellule "A+numéro de la ligne" (7 -> "A7" puis 8 -> "A8"puis ... jusqu'à la dernière ligne de ta BD)
est égale au contenu de la valeur se trouvant dans la ListBox1

Si oui : deuxième boucle : la cellule "A+numéro de la ligne" prend la valeur de la TextBox1, la cellule "B+numéro de la ligne" prend la valeur de la TextBox2, ...

Plus clairement :
Code:
For [COLOR="Blue"][B]j[/B][/COLOR] = [COLOR="Blue"][B]1[/B][/COLOR] To [COLOR="Blue"][B]7[/B][/COLOR]
              Controls("TextBox" & [COLOR="Blue"][B]j[/B][/COLOR]).Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]j[/B][/COLOR])
Next [COLOR="Blue"][B]j[/B][/COLOR]

est exactement la même chose que :
Code:
TextBox[COLOR="Blue"][B]1[/B][/COLOR].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]1[/B][/COLOR])
TextBox[COLOR="Blue"][B]2[/B][/COLOR].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]2[/B][/COLOR])
TextBox[B][COLOR="Blue"]3[/COLOR][/B].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]3[/B][/COLOR])
TextBox[COLOR="Blue"][B]4[/B][/COLOR].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]4[/B][/COLOR])
TextBox[COLOR="Blue"][B]5[/B][/COLOR].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]5[/B][/COLOR])
TextBox[COLOR="Blue"][B]6[/B][/COLOR].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]6[/B][/COLOR])
TextBox[COLOR="Blue"][B]7[/B][/COLOR].Value = .Cells([COLOR="Red"][B]i[/B][/COLOR], [COLOR="Blue"][B]7[/B][/COLOR])

Une variable pour le numéro de la ligne, une variable pour le numéro de la colonne, une boucle, et on raccourcis le code de x lignes!

Avec au passage la fonction Controls pour concaténer le "TextBox" et la variable, et ainsi obtenir les noms de chaque TextBox, les unes après les autres!

J'utilise la même variable pour le numéro des TextBox et le numéro des colonnes, car comme par hasard, le contenu de la TextBox 1 va dans la première colonne, le contenu de la TextBox 2 va dans la seconde colonne, ...

(je n'y suis pour rien, c'est toi qui sans le savoir, en nommant tes TextBox et en disposant l'ordre de tes colonnes qui m'a facilité la vie!!!! Merci à toi ;)).

C'est plus clair? Assez détaillé?

A+
 
Dernière édition:

JONEY76

XLDnaute Occasionnel
Re : Selection dans listbox et modifications

Merci pour ces explications, c'est beaucoup plus clair !!

Par contre pour le 2ème point, je continue mes essais mais je ne suis pas a l'aise avec l'exploitation des listbox

Je vais chercher un peu avec le INDEX
 

Excel-lent

XLDnaute Barbatruc
Re : Selection dans listbox et modifications

Bonsoir JONEY76,

Si cela peut t'aider voici ci-joint le fichier de ...

L'UserForm1 contient une ListeBox : "LstCat" (Catégorie), dans laquelle l'utilisateur choisi la catégorie voulu, et en fonction de la valeur sélectionné, Excel alimente la seconde ListBox en fonction de la valeur sélectionné!

(seul différence, pour toi, au lieu d'être une ListBox, c'est des TextBox)

Voici les deux macro contenu dans l'UserForm ("UserForm1") a décortiquer et adapter à ton cas de figure :
Code:
Private Sub ListBox1_Click()

With Sheets("ListePlantes")
  TxtNomC = .Cells(ListBox1.List(ListBox1.ListIndex, 1), 4)
  TxtProv = .Cells(ListBox1.List(ListBox1.ListIndex, 1), 6)
  TxtAn = .Cells(ListBox1.List(ListBox1.ListIndex, 1), 5)
End With

End Sub
Private Sub LstCat_Change()
Dim Index&, V$, Cel As Range
  With LstCat
    Index = .ListIndex + 1
    V = .List(.ListIndex)
      Set Cel = RgCat.Columns(2).Cells.Find(V, , , xlWhole)
      With Cel
       LabID = .Cells(1, 0)
      End With
   End With
  AjCat
End Sub

A+
 

Pièces jointes

  • Formulaire position du clic dans userform.zip
    17.3 KB · Affichages: 133

Excel-lent

XLDnaute Barbatruc
Re : Selection dans listbox et modifications

Re-bonsoir,

Plus précisement, toujours dans le même fichier, même UserForm : lorsqu'on clic sur la première ListBox : Catégorie, la seconde ListBox se rempli en fonction.

En fonction de la valeur sélectionné dans la seconde listBox : "Nom Latin", les TextBox : "nom commun", "provenance", ... s'alimente automatiquement! Bref exactement ce que tu cherche à faire!

Le code remplissant les TextBox :
Code:
Private Sub ListBox1_Click()

With Sheets("ListePlantes")
  TxtNomC = .Cells(ListBox1.List(ListBox1.ListIndex, 1), 4)
  TxtProv = .Cells(ListBox1.List(ListBox1.ListIndex, 1), 6)
  TxtAn = .Cells(ListBox1.List(ListBox1.ListIndex, 1), 5)
End With

End Sub

Sur ce, je vais rejoindre Morphée.

A+
 

JONEY76

XLDnaute Occasionnel
Re : Selection dans listbox et modifications

Je suis sure qu'il n'y a pas grand chose à modifier

La listbox remplit bien les 7 textbox mais dès que je change une valeur et que j'appuie sur MODIFIER, il envoie les nouvelles données dans la bonne feuille:) mais pas sur la bonne ligne:rolleyes:
 

Pièces jointes

  • boites1.zip
    22.7 KB · Affichages: 68

Robert

XLDnaute Barbatruc
Repose en paix
Re : Selection dans listbox et modifications

Bonsoir le fil, bonsoir le forum,

En pièce jointe ton fichier modifié et commenté.
 

Pièces jointes

  • Joney_v01.xls
    61.5 KB · Affichages: 180
  • Joney_v01.xls
    61.5 KB · Affichages: 150
  • Joney_v01.xls
    61.5 KB · Affichages: 163

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 321
Membres
102 862
dernier inscrit
Emma35400