Microsoft 365 résolution erreur d'exécution 5 (argument ou appel de procédure incorrecte)

TCHIS

XLDnaute Occasionnel
Bonjour à tous
Je me tourne vers vous car je suis coincé sur procédure que j'essaie de mettre un place depuis un moment déjà.
Il se trouve que je souhaite mettre en place une fonction qui par l'intermédiaire de ma ListView lorsque je double sur une des lignes ça ailles remplir les textbox(il y en a que deux ) avec les données qui se trouve sur la ligne double cliqué.

Pour cela le bout de code qui me permettrait de réaliser cela est celui-ci tout simple:
VB:
Me.TxB_NameUser = Range("A" & dlign)(NumLig)
Et bien évidement dans l'évènement double clic de ma listview j'ai appelé la macro qui fait le remplissage de textbox après double clique.

Sauf qu ça me ressort erreur d'exécution 5

Pouvez-vous s'il vous plait m'aider à passer ce cap
Je ne peux pas partager avec vous le fichier Excel sur lequel je travaille pour des raisons de confidentialité professionnelle j'espère que vous comprenez 🙏 🥺 🙏 🥺

Et comme autre info j'ajouterai que la feuille sur laquelle se trouve les données est simple je veux dire par là qu'il n'y a pas de tableau
Voici une image du formulaire et derrière ma feuille de calcul
Merci d'avance
1682947785704.png
 
Solution
Re,
Vous appelez une procédure avec un paramètre numlig (sans le typer)
Sub Remplir_Datas_User(NumLig)
Plus loin dans la procédure :
Me.TxB_NameUser.Value = Cells(dlign, 1)(NumLig)
Plante car NumLig contient "TCHIS" alors que l'objet Cells attend un entier ou un long

Je pense que vous attendiez le numéro de ligne censé être conservé au chargement de la LV.
Dans votre boucle de chargement vous avez :
VB:
C = Feuil5.Range("A3:C" & Feuil5.Range("A65000").End(xlUp).Row).Value
    With USF7.LVW_User
        For lg = 1 To UBound(C)
            Set Lst = .ListItems.Add(, , Format(C(lg, 1), ""))
dans laquelle C contient les valeurs de votre tableaux, et la première valeur de chaque ligne est un STRING et non le numéro de...

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
Je ne peux pas partager avec vous le fichier Excel sur lequel je travaille pour des raisons de confidentialité professionnelle j'espère que vous comprenez
Non,
On a pas besoin de tout le classeur, juste un exemple qui reproduise le problème. D'autant que bien souvent, en construisant l'exemple on trouve la solution.

Avec la politesse, c'est la seule chose qui est demandée à ceux qui viennent chercher de l'aide

Pas d'effort, pas de solution.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Vous appelez une procédure avec un paramètre numlig (sans le typer)
Sub Remplir_Datas_User(NumLig)
Plus loin dans la procédure :
Me.TxB_NameUser.Value = Cells(dlign, 1)(NumLig)
Plante car NumLig contient "TCHIS" alors que l'objet Cells attend un entier ou un long

Je pense que vous attendiez le numéro de ligne censé être conservé au chargement de la LV.
Dans votre boucle de chargement vous avez :
VB:
C = Feuil5.Range("A3:C" & Feuil5.Range("A65000").End(xlUp).Row).Value
    With USF7.LVW_User
        For lg = 1 To UBound(C)
            Set Lst = .ListItems.Add(, , Format(C(lg, 1), ""))
dans laquelle C contient les valeurs de votre tableaux, et la première valeur de chaque ligne est un STRING et non le numéro de ligne.
Puisque C est déclaré comme variant (ce n'est pas un objet range), vous ne pouvez pas directement récupérer le numéro de ligne qui correspond à la valeur. Il faut le recalculer à partir de de la variable "lg" et de la première ligne des données du tableau
Ce numéro de ligne est conservé ensuite dans la propriété .Tag du ListItem

Code:
Sub Remplir_LVW_User()    'Macro permettant de charger le contenu des cellules se trouvant sur la feuille BD_User dans la LVW_User

    C = Feuil5.Range("A3:C" & Feuil5.Range("A65000").End(xlUp).Row).Value
    With USF7.LVW_User
        For lg = 1 To UBound(C)
            Set Lst = .ListItems.Add(, , Format(C(lg, 1), ""))
            Lst.Tag = 3 + lg - 1
            With Lst
                .ListSubItems.Add , , C(lg, 2)
                .ListSubItems.Add , , C(lg, 3)
            End With
        Next lg
    End With
End Sub

Puis récupéré dans la procédure qui gère le double-click du LV
Code:
Private Sub LVW_User_DblClick()
'Appelle de la procédure de remplissage des Controles
' controler que l'utilisateur a sélectionné un item
    If Not LVW_User.SelectedItem Is Nothing Then
        Remplir_Datas_User (Me.LVW_User.SelectedItem.Tag)
        DblClic = True
    End If
End Sub
Et passé à la procédure de remplissage
Code:
Sub Remplir_Datas_User(NumLig As Long)
'Macro permettant de remplir les Controles(CheckBox & TextBox) après clique x2 sur ligne ListView (Lvw_User)
    Dim ws As Worksheet
    Dim User As String
    Dim IGG As String
    Dim i As Integer


    Set ws = Sheets("BD_Users")
 
    Me.TxB_NameUser.Value = ws.Cells(NumLig, 1)

Si vous déclarez une variable worksheet ws, servez-vous en, c'est plutôt mieux.
 

TCHIS

XLDnaute Occasionnel
Re,
Vous appelez une procédure avec un paramètre numlig (sans le typer)

Plus loin dans la procédure :

Plante car NumLig contient "TCHIS" alors que l'objet Cells attend un entier ou un long

Je pense que vous attendiez le numéro de ligne censé être conservé au chargement de la LV.
Dans votre boucle de chargement vous avez :
VB:
C = Feuil5.Range("A3:C" & Feuil5.Range("A65000").End(xlUp).Row).Value
    With USF7.LVW_User
        For lg = 1 To UBound(C)
            Set Lst = .ListItems.Add(, , Format(C(lg, 1), ""))
dans laquelle C contient les valeurs de votre tableaux, et la première valeur de chaque ligne est un STRING et non le numéro de ligne.
Puisque C est déclaré comme variant (ce n'est pas un objet range), vous ne pouvez pas directement récupérer le numéro de ligne qui correspond à la valeur. Il faut le recalculer à partir de de la variable "lg" et de la première ligne des données du tableau
Ce numéro de ligne est conservé ensuite dans la propriété .Tag du ListItem

Code:
Sub Remplir_LVW_User()    'Macro permettant de charger le contenu des cellules se trouvant sur la feuille BD_User dans la LVW_User

    C = Feuil5.Range("A3:C" & Feuil5.Range("A65000").End(xlUp).Row).Value
    With USF7.LVW_User
        For lg = 1 To UBound(C)
            Set Lst = .ListItems.Add(, , Format(C(lg, 1), ""))
            Lst.Tag = 3 + lg - 1
            With Lst
                .ListSubItems.Add , , C(lg, 2)
                .ListSubItems.Add , , C(lg, 3)
            End With
        Next lg
    End With
End Sub

Puis récupéré dans la procédure qui gère le double-click du LV
Code:
Private Sub LVW_User_DblClick()
'Appelle de la procédure de remplissage des Controles
' controler que l'utilisateur a sélectionné un item
    If Not LVW_User.SelectedItem Is Nothing Then
        Remplir_Datas_User (Me.LVW_User.SelectedItem.Tag)
        DblClic = True
    End If
End Sub
Et passé à la procédure de remplissage
Code:
Sub Remplir_Datas_User(NumLig As Long)
'Macro permettant de remplir les Controles(CheckBox & TextBox) après clique x2 sur ligne ListView (Lvw_User)
    Dim ws As Worksheet
    Dim User As String
    Dim IGG As String
    Dim i As Integer


    Set ws = Sheets("BD_Users")
 
    Me.TxB_NameUser.Value = ws.Cells(NumLig, 1)

Si vous déclarez une variable worksheet ws, servez-vous en, c'est plutôt mieux.
Waouh merci énormément pour cela en plus avec des explications on comprend mieux 🙏 🙏
 

TCHIS

XLDnaute Occasionnel
Encore désolé je veux pas abuser de ton aide vraiment je tente le coup j'ai deux points qui font défaut le premier est que :
Dans mon fichier Excel que j'ai envoyé j'ai sur mon formulaire des Checkbox que j'ai paramétrer suivant des conditions par exemple certaines checkbox (Site, Métier) se cochent automatiquement si parmi les fonctions (comme Concepteur Coordinateur ;...ont été sélectionné) ça j'ai pu le faire​
Et dans la même approche j'ai voulu conditionner le remplissage des Checkbox (Site et métier ) en fonction de certains checkbox du groupe fonction pour cela j'ai utilisé des conditions if Else mais sans succès​
Par exemple si la fonction est Superviseur quand on sélection une des case à cocher du groupe site le souhait est que les autres deviennent incochables (C'est-à-dire sur mes 5 checkbox en lien avec le groupe site si je coche sur Alima les 4autres deviennent insélectionnable et inversement)​
Tu peux voir cela dans l'évènement click de la case à cocher SIM(Fct8) où j'ai mis ce qui suit​
VB:
'                    If Me.Btn_SaveUser.Value = True Then
'                              For i = 1 To 5
'                                    If Me.Controls("Site" & i) = True Then
'                                        Coché3 = True
'                                    End If
'                                Next i
'                                If Coché3 = False Then
'                                     MsgBox "Veuillez définir le site auquel est affilié l'utilisateur "
'                                     Exit Sub
'                                End If
'                    End If
 ' Création de boucle pour les CheckBox d'attribution de Site aux Users
mon souci est que rien ne se passe aucun débogage rien du tout (NB: Je l'ai mis en commentaire volentairement ) alorsje me demande si c'est parce que dans une condition If-End if j'ai mis d'autres boucles If-End if

Le second point est plus un renseignement je me demande si il est possible d'unifier plusieurs formulaires VBA en un seul et même formulaire question d'avoir une interface commune qui gère tout ?

Vraiment il n'y a que ça qui me bloque jusqu'ici pour avancer sereinement 🙏 🙏 🙏
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin