Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 9
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonsoir jean-marie
cela est fait me semble t il
et puis comme je dis dans la video le bouton sauvegarde il le fait tout seul
@piga25
ben c'est simple dans le bouton sauvegarder
tu récupère( lig) qui est l'index de ligne dans le tableau
parti de la en 4 /5 lignes tu modifie ton tableau avec
VB:
Private Sub CommandButton2_Click() 'Bouton Sauvegarder
    lig = Val(Label11.Caption)
    With [A6].ListObject.DataBodyRange

        '.Cells(lig, 11) = CDate(TextBox3)
        '.Cells(lig, 5) = ComboBox5
        '.cells(lig,colonne que tu veux)=le control que tu veux'
        'pas compliqué:):)'
        'etc...'
    End With
End Sub

à moins que j'ai zappé un detail
avec cette méthode tu n'a pas besoins de (do while etc... et autres cochonneries )pour chercher ta ligne puisque tu l'a déjà
 

piga25

XLDnaute Barbatruc
RE,
Pour la sauvegarde j'ai un peu simplifié le code mais on peu mieux faire (pour trouver la colonne de l'année en cours).
VB:
Private Sub CommandButton2_Click() 'Bouton Sauvegarder
Dim ts As Range
Dim ws As Worksheet
Dim stRech As String
Dim c As Range
Dim Col As Integer

    stRech = Year(Date)
    lig = Val(Label11.Caption)
    With [A6].ListObject.DataBodyRange
            Set ws = ActiveSheet
            ' Trouver la colonne de l'année courante dans la ligne 3 de la feuille
            Set c = ws.Rows(3).Find(stRech, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                Col = c.Column
                Set c = Nothing
        .Cells(lig, Col) = CDate(TextBox3)
        .Cells(lig, Col + 1) = ComboBox5
        .Cells(lig, Col + 2) = ComboBox6
            End If
    End With
        CommandButton1_Click
End Sub

Oups pas rafraichie:
Il faut que je trouve le numéro de la colonne de l'année en cours qui est située sur la ligne 3 de la feuille.
 

TooFatBoy

XLDnaute Barbatruc
Tant que tu en es à écrire des trucs un pneu bancals, essaye ceci ça devait te plaire :
VB:
Set c = [m3].Offset(0, 3 * (Val(TextBox2) - [m3]))

(ça fonctionne à condition de défusionner les cellules contenant les années car la fusion c'est la Mal !)
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Enfin, il me semble qu'il y a un "s" en trop dans ce code :
Enrichi (BBcode):
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim tbl As ListObject
Dim strPlage As String

    ' Supposons que votre tableau est nommé "Tableau2"
    Set tbl = Range("Tableau2").ListObjects

    ' Récupérer la plage du tableau
    strPlage = tbl.Range.Address

    ' MsgBox "La plage du tableau est : " & strPlage ' Pour vérifier la plage calculée

    If Not Intersect(Target, Range(strPlage)) Is Nothing Then
        ' Copier la valeur de la cellule cliquée dans une autre feuille
        'Sheets("Feuil2").Range("A1").Value = Target.Value
        Else
        Exit Sub
    End If

    UserForm1.Show

End Sub
 

piga25

XLDnaute Barbatruc
Bonsoir,
La partie mise à jour d'une vérification EPI est réalisée et cela grasse à vous, un grand merci à tous les participants.
Reste à faire pour ajouter des nouveaux EPI.
 

Pièces jointes

  • Registre EPI version 2.xlsm
    281.8 KB · Affichages: 5

TooFatBoy

XLDnaute Barbatruc
Set tbl = Range("Tableau2").ListObjects
il me semble qu'il y a un "s" en trop dans ce code
Sans le S il y a une erreur.
Je n'y crois point.

D'ailleurs, cette ligne n'est plus dans ton code. C'est certainement parce qu'elle te posait un problème. Sinon, pourquoi être revenu en arrière.

Je trouve dommage de revenir en arrière sur tout ce qui utilisait les spécificités des TS.
Le pire étant "With [A6].ListObject.DataBodyRange" qui fait saigner mes yeux qui piquent et qui pleurent.



Je ne pige pas un truc : il faut cliquer sur une ligne pour vérifier un EPI, mais quand le UserForm s'ouvre il n'est pas initialisé avec les données de la ligne cliquée.
Ca ne me semble pas normal, mais peut-être me trompé-je.



Bon, le principal est que tu arrives à faire ce que tu voulais.


Bonne continuation
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@TooFatBoy
VB:
With [A6].ListObject.DataBodyRange
je vois ,pas ce qui te fait saigner des yeux
c'est pas mieux que
Code:
Set tbl = Range("Tableau2").ListObject
si deux classeurs sont ouverts et que le name est sur l'autre ça plantera
au moins ma version appartient implicitement a l'activesheet de l'activeworkbook
 

patricktoulon

XLDnaute Barbatruc
re
bonjour à tous
punaise c'est incroyable les sornettes que je lis
ho!!!!! les gars!!!! jusqu'a preuve du contraire le userform est affiché au selection_change de la feuille "habit" et pas des autres
avant de parler réfléchissez au contexte(tout !!!!!!!le contexte)
maintenant si dans le code du userform on se ballade de feuille en feuille pour inscrire ou lire des données peut être qu'il va falloir se rappeler que pour lire ou inscrire une donnée il n'est pas nécessaire d'activer une feuille

je dis ça je dis rien hein

 

patricktoulon

XLDnaute Barbatruc
Bonsoir,
La partie mise à jour d'une vérification EPI est réalisée et cela grasse à vous, un grand merci à tous les participants.
Reste à faire pour ajouter des nouveaux EPI.
par définition
le mode ajouter/ sauvegarder pourrait être automatique
en effet si tu tape dans les 3 combo et que celle des numero de serie (qui par définition sont unique) ne figure pas dans la liste son index sera à-1
parti de là on ajoute simplement un bouton ajouter qui sera visible si dans la combo n serie on est a index-1 et inversement pour le bouton sauvegarder



te reste plus qu'a mettre ton code d'ajout dans l'event du "BoutonAjouter"
 

Pièces jointes

  • Registre EPI version 2.xlsm
    265.7 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
Re
pas de sornette , heeuu de problème !
il m'arrive de lancer , le Userform depuis VBE c'est peut être pour ça !
Bonne fin de journée
Jean marie
re
c'est bien ce que je dis "Le Contexte dans le quel il doit être lancé"
mais si vous y tenez mettez votre Range("tableau2").value

j'etait juste intervenu pour dire que faire une usine a gaz pour si peu
du genre des vlooup pour aller chercher une ligne correspondante et j'en passe et des meilleures ( qui là oui ME!! saignent les yeux) n’était pas forcement la meilleure façon de faire
et làc'est moi qui le dit "toutafé" pour développer il faut une vue d'ensemble et non ajouter des petits bouts de code par ci par là
 

patricktoulon

XLDnaute Barbatruc
re
Non surtout pas !
Alons !!!! c'est un TS .
alors tu n'a rien compris à la démarche
c'est un ts oui mais je travaille dans le userform une variable tableau me suffit
qio que vous en disiez
si vous voulez travaillez avec le listobject il vous faudra le chemin complet du ts si l'on doit prendre en compte l’éventualité de la mauvaise feuille active ou même le classeur
je parles en connaissance de cause
pour info
listobject est un membre de range comme l'inverse
listobjects (qui est une collection) est un membre de feuille pas du classeur ou de l'application

conclusion vous faites couler de l'encre pour rien
 

Discussions similaires

Réponses
0
Affichages
271
Réponses
1
Affichages
327
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…