ligne de code de module de classe a modifier

grisan29

XLDnaute Accro
bonjour a tous et toutes

pour faire suite a ce post bien mené par Dranreb

comment puis je modifier cette ligne du module de classe comboboxlies pour quelle soit active pour chercher dans le classeur qui sous D:\Facturation-v1s\base
Code:
CBL.Plage Fclient.[A2].Resize(Fclient.[A65536].End(xlUp).Row - 1)

et aussi celle ci qui est dans l'usf que j'ai essayer de modifier
Code:
CL.Plage Workbooks("test clients.xlsx").Sheets(1).[B2]

cette dernière ligne fonctionne bien quand les 2 classeurs sont ouvert en même temps, mais quand le classeur est sous D:\Facturation-v1s\base

Pascal
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : ligne de code de module de classe a modifier

Bonjour.

Ça semble être l'instruction exemple qui fait partie des explications guides d'utilisation. Elle ne sert à rien, elle n'est pas compilée puisqu'elle est soumise à une directive de compilation #If False Then plus haut. De ce fait elle n'est qu'une sorte de commentaire, mais qui respecte les couleurs VBA pour qu'on voie mieux l'exemple. De toute façon il n'y a rien à changer dans le module de classe.

Il ne peut travailler qu'avec une plage de classeur ouvert.
 

grisan29

XLDnaute Accro
Re : ligne de code de module de classe a modifier

Bonjour
l'instruction fait partie d'un bloc de l’initialisation de l'usf
Code:
Private Sub Userform_Initialise()
Set CBL = New ComboBoxLiés 'Procure une instance à l'objet. Si les modules sont installés hors projet, remplacer New ComboBoxLiés par CbxLiés.
CBL.CouleurSympa          ' Permet de distinguer si les ComboBox contiennent un choix prévu ou non. Peu utile s'ils ont .MatchRequired = True.
CBL.Plage Feuil1.[A2].Resize(Feuil1.[A65536].End(xlUp).Row - 1) ' Indiquer au moins une colonne de la plage du tableau à couvrir.
CBL.Add Me.ComboBox1, "A" ' Enseigne le ComboBox du 1er choix comme devant recevoir des listes de choix prise de la colonne "A"
CBL.Add Me.ComboBox2, "B" ' Enseigne le ComboBox du 2ième choix comme devant recevoir des listes de choix prise de la colonne "B"
CBL.Add Me.ComboBox3, "C" ' Enseigne … etc. Mettez autant de CBL.Add qu'il y a de ComboBox à gérer.
CBL.Actualiser ' Démarre la gestion des ComboBox

End Sub
dont j'ai mis le nom de feuille sur la ligne postée

et pour l'autre ligne elle me permets juste de faire fonctionner l'usf en ayant le classeur ouvert

Pascal
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : ligne de code de module de classe a modifier

C'est complètement le bouquin d'aide de ComboBoxLiés, rédigé dedans, ça.
Si vous le rappatriez dans votre Userform, il faut l'adapter à vos besoins. Déjà on l'appelle en général CL au lieu de CBL, c'est plus court.
Oui, oui, il faut ouvrir le classeur pour pouvoir travailler dessus avec.
 

grisan29

XLDnaute Accro
Re : ligne de code de module de classe a modifier

bonjour dranreb

merci de me dire que ce n'est qu'un fichier d'aide:)
donc si je voudrais ouvrir le classeur client,par le bouton dans l'usf "liste_boutons" pourrai-je le réhabilité grâce a la ligne que j'ai mis en commentaire dans le module des constantes
Code:
'Public Const WB_BASE_CLIENTS As String = DIR_WORKSPACE & "\base\clients.xlsx"
et qui servait a l'ancien classeur client a base de multi-page que tu n'aimes pas
il faudrait quelqe chose comme ceci
Code:
Dim wb As Workbook
    For Each wb In Workbooks
        If wb.FullName = WB_BASE_CLIENTS Then
            Set WbClient = wb
            Exit For
        End If
    Next wb
    
    If WbClient Is Nothing Then
        Set WbClient = Workbooks.Open(WB_BASE_CLIENTS)
    End If
    
    Set WsClient = WbClient.Sheets(WS_CLIENTS)
    ThisWorkbook.Activate
j'arrive avec ce code a ouvrir le classeur client mais l'usf client bug je ne sais ou, mais j'ai du rajouter des variables
Code:
Private WsClient As Worksheet
Private WbClient As Workbook


Pascal
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : ligne de code de module de classe a modifier

Oui c'est quelque chose comme ça, encore que je n'essayerais pas tous les classeurs ouverts: j'essayerais, après un On Error Resume Next, un Set WbClient = Workbooks("clients.xlsx"). Ce qui ne dispense pas d'ailleurs, si ça ne provoque pas d'erreur, de vérifier qu'il a bien le FullName de celui qu'on aurait ouvert.
Pas assez d'information pour savoir ce qui coince après dans l'UsF
 

grisan29

XLDnaute Accro
Re : ligne de code de module de classe a modifier

bonsoir dranreb

justement je viens de faire un message pour voir où en est le FullName et le résultat me dit que c'est pas le bon chemin

voici le message que j'ai mis juste après for each...
MsgBox ActiveWorkbook.FullName
et tout ce qui est derrière un suigne = est soit nothing où variable objet ou bloc non défini et pourtant le message est bon au survol de la souris

voici l'aperçu et sa suite
Pascal
 

Pièces jointes

  • message pour bug.jpg
    message pour bug.jpg
    39.2 KB · Affichages: 16
  • suitebug.jpg
    suitebug.jpg
    83.7 KB · Affichages: 20
Dernière édition:

grisan29

XLDnaute Accro
Re : ligne de code de module de classe a modifier

bonjour dranreb
merci de ta réponse , donc je l'ai mis dans le modules de gestion dans la procédure de remplissage du client et j'ai une erreur9 l'indice n'appartient pas a la sélection
voici le code
Code:
    Public Sub GetClientInfos(Client As InfoClient)
    
    '====================================================================
    Dim wb As Workbook
    For Each wb In Workbooks
    MsgBox ActiveWorkbook.FullName
        If wb.FullName = WB_BASE_CLIENTS Then
            Set WbClient = wb
            Exit For
        End If
    Next wb
    
    If WbClient Is Nothing Then
        Set WbClient = Workbooks.Open(WB_BASE_CLIENTS)
    End If
    Set WsClient = WbClient.Sheets(WS_CLIENTS)
    '======================================================================
            
         With ThisWorkbook.Sheets(WS_FACTURE).Range("DOC_CLIENT")
        Dim Condition As Byte: Condition = verification_de_donnee(0)
        Select Case Condition
        Case Is = 1
              'remplissage simple client"
                Client.Nom = .Value
                Client.Prenom = .offset(1).Value
                Client.adresse = .offset(2).Value
                Client.cp = Left(.offset(3), 5)
                Client.ville = Right(.offset(3), Len(.offset(3)) - Len(Client.cp) - 1)
                
         
        Case Is = 2
         'remplissage complet client"
                Client.Prenom = .offset(1).Value
                Client.Attention = .offset(2).Value
                Client.adresse = .offset(3).Value
                Client.Complement = .offset(4).Value
                Client.ville = Right(.offset(5), Len(.offset(5)) - Len(Client.cp) - 1)
                Client.cp = Left(.offset(5), 5)
        
        
        Case Is = 3
         'remplissage client avec attention de" sans complement
                Client.Nom = .Value
                Client.Attention = .offset(2).Value
                Client.adresse = .offset(3).Value
                Client.cp = Left(.offset(4), 5)
                Client.ville = Right(.offset(4), Len(.offset(4)) - Len(Client.cp) - 1)
               
        
        Case Is = 4
       'remplissage client avec complement d'adresse" sans attention de
        
                Client.Nom = .Value
                Client.Prenom = .offset(1).Value
                Client.adresse = .offset(2).Value
                Client.Complement = .offset(3).Value
               Client.cp = Left(.offset(4), 5)
               Client.ville = Right(.offset(4), Len(.offset(4)) - Len(Client.cp) - 1)
                
        
        Case Else
        Exit Sub
        End Select
        End With
End Sub
et voici le code de l'usf
Code:
Private Sub UserForm_Initialize()

Set CLCPVil = New ComboBoxLiés
'CLCPVil.Plage Feuil3.[A2]
CLCPVil.Plage Fcpville.[A2]
CLCPVil.CouleurSympa &H80000005, &HDDFF&, &H80000005, &H80000005
CLCPVil.Add Me.CBcp, "B"
CLCPVil.Add Me.CBville, "C"
ExécutionIntempestive = True
CLCPVil.Actualiser
ExécutionIntempestive = False
Set CL = New ComboBoxLiés
CL.CouleurSympa
CL.Plage Workbooks("clients.xlsx").Sheets(1).[A2]
CL.Add Me.CBcivil, "B"
CL.Add Me.CBnom, "C"
CL.Add Me.CBprenom, "D"
CL.Actualiser
End Sub

Pascal
 

Dranreb

XLDnaute Barbatruc
Re : ligne de code de module de classe a modifier

Je ne vois pas d'Userform.Show dans votre procédure.
La communication est toujours aussi difficile avec vous, je vois.
Bon. Qu'est ce qu'on peut faire ? Ben j'en sais rien !
Apprenez à déboguer vous même ce que ne faites qu'à votre tête, qu'est-ce que vous voulez que je vous dise…
 

grisan29

XLDnaute Accro
Re : ligne de code de module de classe a modifier

bonjour dranreb
tu me parle de userform.show dans un module, le seul que j'ai trouvé est dans le bouton d'activation de l'userform
Code:
Private Sub CommandButton2_Click()

  Unload Me
   '===============================================
    Dim wb As Workbook
    For Each wb In Workbooks
        If wb.FullName = WB_BASE_CLIENTS Then
            Set WbClient = wb
            Exit For
        End If
    Next wb
    
    If WbClient Is Nothing Then
        Set WbClient = Workbooks.Open(WB_BASE_CLIENTS)
    End If
    
    Set WsClient = WbClient.Sheets(WS_CLIENTS)
    ThisWorkbook.Activate
       '=====================================================
  Uclient.Show
End Sub
mais j'ai le même bug erreur9 l'indice n'appartient pas a la sélection a cette ligne
Code:
Set WsClient = WbClient.Sheets(WS_CLIENTS)

tu dits
La communication est toujours aussi difficile avec vous, je vois.
moi je dirai la compréhension, car depuis https://www.excel-downloads.com/thr...e-dans-classeur-clients-merci-dranreb.221225/
je ne fais qu'essayer et je crois qu'il vaux mieux que j'arrête la non , pas de cet avis

Pascal
 

grisan29

XLDnaute Accro
Re : ligne de code de module de classe a modifier

re
en fait il faut mettre la ligne incriminée en commentaire pour que l'userform client s'ouvre correctement , mais il faut supprimer la colonne A du classeur client pour que cela fonctionne

merci beaucoup de ton implication dranreb :):):) et excuse moi si mon cerveau est lent a comprendre:confused::confused:

Pascal
 

Dranreb

XLDnaute Barbatruc
Re : ligne de code de module de classe a modifier

Essayez dans l'userform
VB:
CL.Plage RG_DÉBUT_BASE_CLIENT
Déclarez cette variable Public RG_DÉBUT_BASE_CLIENT As Range dans un module standard
Essayez comme ça :
VB:
Private Sub CommandButton2_Click()
Dim Clas As Workbook, NomClass As String, Feuil As Worksheet
If WB_BASE_CLIENTS = "" Then MsgBox "Variable Public WB_BASE_CLIENTS As String non initialisée.", vbCritical, Me.Caption: Exit Sub
If WS_CLIENTS = "" Then MsgBox "Variable Public WS_CLIENTS As String non initialisée.", vbCritical, Me.Caption: Exit Sub
If IsEmpty(RG_DÉBUT_BASE_CLIENT) Then MsgBox "Variable Public RG_DÉBUT_BASE_CLIENT non définie As Range.", vbCritical, Me.Caption: Exit Sub
On Error Resume Next
NomClass = Mid$(WB_BASE_CLIENTS, InStrRev(WB_BASE_CLIENTS, "\") + 1)
Set Clas = Workbooks(NomClass)
If Err Then
   Err.Clear: Set Clas = Workbooks.Open(WB_BASE_CLIENTS)
   If Err Then MsgBox "Il n'existe pas de classeur """ & WB_BASE_CLIENTS & """.", vbCritical, Me.Caption: Exit Sub
   ElseIf Clas.FullName <> WB_BASE_CLIENTS Then MsgBox "Un classeur """ & Clas.Name & """ est déjà ouvert mais vient de" _
   & vbLf & Clas.FullName & " et non de" & vbLf & WB_BASE_CLIENTS, vbCritical, Me.Caption: Exit Sub
   End If
Set Feuil = Class.Worksheets(WS_CLIENTS)
If Err Then MsgBox "Le classeur """ & Clas.Name & """ ne contient pas de feuille """ & WS_CLIENTS & """.", _
   vbCritical, Me.Caption: Exit Sub
Set RG_DÉBUT_BASE_CLIENT = Feuil.[A2]
Unload Me
Uclient.Show
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg