XL 2016 Erreur dans code VBA

piga25

XLDnaute Barbatruc
Bonjour,
Dans le fichier joint, en cliquant dans une cellule du tableau cela ouvre un Userform. C'est là que j'ai un problème, après avoir renseigné les 3 combobox de l'EPI concerné, le code suivant devrait normalement me renseigner les 2 label (dernière vérification) - Je n'arrive pas a afficher la ligne qui correspond au critères des 3 combobox.
VB:
Private Sub RenseignerLabels()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Dim rowNum As Long

    ' Boucle à partir de la ligne 6 jusqu'à la dernière ligne non vide de la colonne A
    For rowNum = 6 To ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        ' Vérifie si les valeurs des cellules correspondent aux ComboBox 1, 3 et 4
        If ws.Cells(rowNum, 1).Value = Me.ComboBox1.Value And _
           ws.Cells(rowNum, 3).Value = Me.ComboBox3.Value And _
           ws.Cells(rowNum, 4).Value = Me.ComboBox4.Value Then
          
            ' Remplir Label10 avec la valeur de la colonne 11 (date de vérification)
            Me.Label10.Caption = ws.Cells(rowNum, 11).Value ' Date de vérification

            ' Remplir Label11 avec la valeur de la colonne 5 (statut)
            Me.Label11.Caption = ws.Cells(rowNum, 5).Value ' Statut

            ' Afficher le numéro de la ligne dans un label (par exemple Label12)
            'Me.Label12.Caption = "Ligne correspondante : " & rowNum

            ' Quitter la boucle une fois la ligne correspondante trouvée
            Exit For
        End If
    Next rowNum
End Sub
 

Pièces jointes

  • Registre EPI V01pour forum.xlsm
    245.9 KB · Affichages: 10
Dernière édition:

piga25

XLDnaute Barbatruc
Re
dans ton ancien système pour répertorie tes matériels , tu avais quoi comme ligne de données ?
un numéro de série (premier) et le Nombre d'éléments dans la Série ?
Non juste un numéro de lot, aucun n° de série (on mettait la facture comme justificatif). Ce qui veut dire que l'on connait aucun n° de série, il faudra les lire un par un.
 

ChTi160

XLDnaute Barbatruc
Re
je pense que tu vas avoir un gros travail de préparation avant la saisie !
tu tries en fonction des Numéros de série , tu auras ainsi des suites et après tu peux saisir!
car les entrer un par un ça t'oblige des que tu commence a rechercher la même série dans ton lot de 200 lol etc etc
Bon courage
jean marie
 

ChTi160

XLDnaute Barbatruc
Re
une fois le travail de tri fait tu pourrais utiliser la méthode que je t'ai présenté , il faut adapter pour prendre en compte l'ensemble des éléments d'un enregistrement , mais c'est possible !
Bon courage
n'hésite pas à revenir lorsque que tu auras fais le tri Lol
à moins que tu ais une réponse qui te permette de faire ce que tu veux !
Bon courage
Jean marie
 

TooFatBoy

XLDnaute Barbatruc
Soit tu ajoutes un bouton "Ajouter même EPI", qui n'efface que le numéro de série, voire rien.

Soit tu fais tout simplement une copie d'une ligne du tableau que tu insères dans ce même tableau, le tout à l'ancienne, à la main, sans passer par ton UserForm.
 

ChTi160

XLDnaute Barbatruc
Re
Patrick , le problème,c'est que piga a des objets avec des références dont il ne connait pas les limites ce n'est qu'après un tri qu'il pourra savoir combien il a de tel objet et autant de tel autre . Il pourra alors utiliser la solution avec boucle qu'il voudra .
Actuellement ,il entre une par une les numéros de série par références d'objet.
Bonne fin de soirée
Jean marie
 

patricktoulon

XLDnaute Barbatruc
re
jean-marie
le problème,c'est que piga a des objets avec des références dont il ne connait pas les limites ce n'est qu'après un tri qu'il pourra savoir combien il a de tel objet et autant de tel autre . Il pourra alors utiliser la solution avec boucle qu'il voudra .
et ben alors on le fait par clicks successifs dans mon bouton c'est tout et on enlève le input box
c'est pas compliqué ;)
VB:
Private Sub ajouter_lot_Click()
    Dim nb&, i&
         With Range("tableau2").ListObject.ListRows.Add.Range
            .Cells(1) = ComboBox1 'Description
            .Cells(2) = ComboBox2 'Marque
            .Cells(3) = ComboBox3 'Modèle
            .Cells(4) = Val(ComboBox4)  'N° de série
            .Cells(6) = CDate(TextBox6) 'Date de fabrication
            .Cells(9) = CDate(TextBox7) 'Date de mise en service
            'etc..
            'etc...
        End With
    ComboBox4.Value = Val(ComboBox4) + 1
End Sub
demo1.gif
 

piga25

XLDnaute Barbatruc
Re
Merci pour toutes ces explications qui me sont très instructives.
J'ai un petit soucis lorsque j'ajoute un lot, cela ne recopie pas la totalité de la combobox4 (N° de série) dans le tableau, cela prends uniquement les deux premiers chiffres.
1726772020366.png
 

Pièces jointes

  • Registre EPI version 2-4 patricktoulon.xlsm
    304.2 KB · Affichages: 1

ChTi160

XLDnaute Barbatruc
Re
Ça semble simple dit comme cela ! Mais d'après ce que j'ai compris , il y a un travail de tri à faire avant d'enregistrer .Exemple
200 objets de même nature " boucle " .par exemple 3 fournisseurs différents, 2 types ,3 types 1 type selon fournisseur.
Puis des séries différentes de x objets.
Mais tu as trouvé la solution ,c'est super pour piga25.
As tu regardé le type de N°de Série #49
Bonne continuation
Jean marie
 

patricktoulon

XLDnaute Barbatruc
@piga25
tout simplement par ce que tes numéros de séries ne sont pas des numériques
il te faut décanter la chaine et additionner a la partie concernée (la dernière je suppose)
exemple comme ceci
tes numeros de series peuvent être des nombre
ou des chaines du genre "1623 - 456 - 835
VB:
Private Sub ajouter_lot_Click()
    Dim nb&, i&
    With Range("tableau2").ListObject.ListRows.Add.Range
        .Cells(1) = ComboBox1 'Description
        .Cells(2) = ComboBox2 'Marque
        .Cells(3) = ComboBox3 'Modèle
        .Cells(4) = Val(ComboBox4) 'N° de série
        .Cells(6) = CDate(TextBox6) 'Date de fabrication
        .Cells(9) = CDate(TextBox7) 'Date de mise en service
        'etc..
        'etc...
    End With
    chaine = ComboBox4
    t = Split(chaine, " - ")
    If UBound(t) > 0 Then
        t(UBound(t)) = t(UBound(t)) + 1
        chaine = Join(t, " - ")
    Else
        chaine = Val(chaine + 1)
    End If

    ComboBox4.Value = chaine
End Sub
 

piga25

XLDnaute Barbatruc
Re,
Merci à vous tous avec un plus pour patricktoulon pour ses explications vidéo.
Pour moi le fichier est maintenant fonctionnel. Il me reste à le soumettre à mes camarades qui sont habilités pour la vérifications. Mais là je n'ai aucun doute sur leur accord.
A l'ensemble des contributeurs merci 😁😁😁

Pour info: si la spéléologie vous intrigue un peu, sachez que notre fédérations FFS organise les journées nationale de la spéléologie les 5 et 6 octobre 2024. Dans tous les départements il y aura des visites accompagnées et tout cela est gratuit.
 

TooFatBoy

XLDnaute Barbatruc

Discussions similaires

Statistiques des forums

Discussions
314 698
Messages
2 112 019
Membres
111 399
dernier inscrit
KDM