Recherche Ajout et Suppr
Bonjour tout le monde;
Voilà je permets de vous recontacter pour mon fichier de Stock pour effectuer un recherche plus facilement . Cependant, lorsque j'ai supprimer un article - exemple l'article n° 32 . Cela décale toute ma recherche . Auriez-vous une idée Car cela fait une semaine que j'essaye mais rien
Bonsoir,
une question passée inaperçue...
Bon le soucis est simple : votre variable LI qui correspond au numéro de ligne de la feuille Excel, correspond au numéro de la pièce + les 12 lignes se trouvant au dessus du tableau.
Lors d'une suppression de données, ces numéros de pièce ne sont pas "recalculés" on a donc :
pièce 1 en ligne 13 de la feuille (LI = 1+12 = 13)
pièce 2 en ligne 14 de la feuille
pièce 3 en ligne 15 de la feuille [...] tout va bien, on efface la pièce 2 donc la ligne de la feuille correspondante :
Pièce 1 en ligne 13 de la feuille (LI = 1+12 = 13)
pièce 3 en ligne 14 de la feuille (LI = 3+12 = 15 !) voilà le décalage et plus on va vers le bas du tableau et plus il y a eu de suppression et plus le décalage est grand !
Donc pour moi trois solutions :
- Après une suppression ou ajout de pièce => ré numérotation des pièces mais du coup si cela correspond à un numéro associé à une pièce ce n'est pas bon.
- Une fois le numéro de la pièce trouvée, faire un "FIND" sur la colonne B pour trouver la cellule où se trouve ce numéro et ainsi connaitre le numéro de ligne de la feuille : Set Cel = ActiveSheet.Range("B:B").FIND(LI) : LI= Cel.Row
- Simplifier le tout en utilisant un tableau structuré pour votre BDD
@ bientôt
LouReeD
Merci LouReed, pour votre réponse
Petit miracle de cette journée, j'ai a peut prêt tout compris mais je ne sais pas comment structuré ma base de donnée. En fait, ce tableau appartient à mon fichier de Gestion de Stock . Et l'onglet représente le reste des chutes Mais je peut en avoir 300 ou 500 a la fois . Ce qui m'importe c'est d'effectuer une recherche sur la pièce ex : 500 - 400/2 - 4+2 et le nombre de mètres qui reste
Je ne sais pas si j'ai été explicite
Candide
P.S : J'admire votre travail LouReed
Bonsoir,
code modifié avec la recherche "Find" dans la colonne B en fonction du numéro de la pièce sélectionnée dans le UserForm3 :
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'au double-Clic dans la ListBox1
' modification LouReeD
'**********************
Dim Cel As Range
' on récupère la valeur du numéro de la pièce choisie
valeur = Me.ListBox1.Column(0, Me.ListBox1.ListIndex)
Set Cel = ActiveSheet.Range("B:B").Find(valeur)
' s'il y a bien une valeur trouvée
If Not Cel Is Nothing Then
LI = Cel.Row
'With Me.ListBox1 'prend en compte la ListBox1
' LI = CInt(.Column(0, .ListIndex)) + 12 'récupère le numéro de ligne de l'élément double-cliqué
'End With 'fin de la prise en copmpte de la ListBox1
If Action = "Supprimer un article" Then 'condition : si la variable Action est égale à "Supprimer un article"
'si "Oui" au message, supprime la ligne
If MsgBox("Êtes-vous sûr(e) de vouloir supprimer définitivement" & Chr(13) _
& "la ligne sélectionnée ?", vbYesNo, "ATTENTION") = vbYes Then _
O.Rows(LI).Delete
Unload Me 'vide et ferme l'Userform3
Exit Sub 'sort de la procédure
End If 'fin de la condition
With UserForm2 'prend en compte l'UserForm2
.Caption = Action 'définit le titre de l'UserForm2
.Label2.Caption = O.Cells(LI, 2).Value 'récupère le numéro dans la Label2
For I = 1 To 5 'boucle sur les 5 textboxes de l'UserForm2
'récupère dans la TextBox(I) la valeur correspondante ligne LI, colonne I + 2 l'onglet O
.Controls("TextBox" & I).Value = O.Cells(LI, I + 2).Value
Next I 'prochaine tetxbox de la boucle
Unload Me 'vide et ferme l'UserForm3
With .TextBox1 'prend en compte la TextBox1
'sélectionne le texte de la TextBox1
.SelStart = 0 'début de la sélection
.SelLength = .TextLength 'longueur de la séléction
.SetFocus 'place le curseur dans la TextBox1
End With 'fin de la prise en compte de la TextBox1
.Show 'affiche l'UserForm1
End With 'fin de la prise en compte de l'UserForm2
Else
MsgBox ("Il n'y a pas de numéro correspondant à la pièce recherchée !")
End If
End SubPour ne pas à avoir à gérer les différents "LI" dans les différents codes, je lui attribue la valeur de Cel.Row, la modification en est simplifiée.
@ bientôt
LouReeD
Merci LouReed,
Cela marche parfaitement Trop forte - Merci cela va m'être très précieux au quotidien
Merci
Bonsoir,
vous me voyez ravi que cela vous convienne ! Merci @ vous pour vos remerciements !
@ bientôt
LouReeD
