Re :RESOLU cbxliescpville de dranreb a intégré dans classeur clients?? MERCI DRANREB

grisan29

XLDnaute Accro
bonjour a vous tous du forum

j'ai essayer d'intégrer le classeur cbxliescpvilles de dranreb sur mon fichier clients mais sans succes
il est vrai que les 2 sont a base de modules de classe
en fait je voudrais remplacer les combobox de mon classeur client par ceux du classeur de dranreb
voici l'essai puis le classeur de dranreb et celui que j'utilise
il sont tous sous .xls et je suis sous 2013 donc .xlsm

merci de vos réponses

Pascal
j' ai oublier de dire que c'est pour les combobox d'ajout clients
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxliescpville de dranreb a intégré dans classeur clients??

Certes. Ça avance à part ça ? Avancez, mais pas trop trop loin pour ne pas vous engager dans une voie où CL aurait encore pu vous apporter une simplification. Par exemple évitez d'utilisez une expression classique genre Feuil4.[B2:N2].Resize(Feuil4.[B60000].End(xlUp).Row - 1) car il y a plus court du coup partout dans votre Userform: CL.PlgTablo.Resize(, 14) et ça garantit de prendre exactement les lignes de la bonne feuille dans lesquelles CL a cherché les infos des ComboBox !
re et ben je n'avais compris cela dans ce post
je viens d'essayer un "spinbutton" qui fonctionne sur les textbox mais pas essayer avec les comboboxs pour ne pas perturber le reste voici le code (vulgaire copie d'un classeur)
Code:
Private Sub SpinButton1_Change()
Dim i As Integer
i = SpinButton1.Value
    'Empêche de trop remonter
    If i < 2 Then
        i = 2
        SpinButton1.Value = i
    End If
    'récup les infos
    If i > 1 Then
        
        TBattention = Feuil4.Cells(i, 6)
        TBadresse = Feuil4.Cells(i, 7)
        TBcomplement = Feuil4.Cells(i, 8)
         TBtele = Feuil4.Cells(i, 11)
        TBport = Feuil4.Cells(i, 12)
        TBfax = Feuil4.Cells(i, 13)
        TBmail = Feuil4.Cells(i, 14)
    End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : cbxliescpville de dranreb a intégré dans classeur clients??

Ben là il faudra agir sur LCou tout simplement, mais veiller à garnir les ComboBox aussi, pas seulement GarnirChamps. Il est possible d'écrire une boucle qui garnit les comboBox gérés par CL :
VB:
For I = 1 To CL.Count: With CL.Item(I): .CBx.Text = VLgn(1, .Col): End With: Next I
Préférable de Stopper CL d'abord. En utilisant CL_Résultat au lieu de CL_BingoUn, il serait possible de naviguer parmi les lignes sélectionnées en gardant tout Lignes() dans un TLgnSél etc.
Mais je vous conseille de laisser tout ça de coté pour le moment. Finalisez d'abord l'essentiel. Vous risquez d'installer des dispositifs qui au bout du compte ne serviront jamais.
 

Dranreb

XLDnaute Barbatruc
Re : cbxliescpville de dranreb a intégré dans classeur clients??

Bonsoir.
Un up de quoi ? Comme vous n'aviez plus de question depuis un bon bout de temps, je pensais que c'était fini depuis longtemps de votre coté moi ! Avez vous avancé depuis votre dernier fichier ? (sur l'essentiel je veux dire)
 

grisan29

XLDnaute Accro
Re : cbxliescpville de dranreb a intégré dans classeur clients??

bonjour dranreb

c'est pas le bon fichier que j'ai joint au dernier post, j'ai été absent quasi toute la semaine c'est la raison du up
donc dans le fichier qui va etre joint
j'ai essayer de mettre des codes derrière les boutons ajouter , modifier, supprimer, et ajout sur feuille
il n'y a que le dernier qui fonctionne(ajout sur feuille) mais a l'ancienne méthode
pour ajouter un client les combobox nom et prénom sont en trop car pas possible d'ajouter un nom et prénom

bon dimanche

Pascal
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : cbxliescpville de dranreb a intégré dans classeur clients??

Rebonjour
Ben non, les ComboBox nom et prénom ne sont pas en trop: ils servent à entrer le nom et le prénom !
Vous ne devriez pas mettre les boutons tout à droite comme ça et dans un Frame séparé appelé Option. On dirait vraiment qu'ils n'ont aucun rapport avec le client affiché. Mettez les plutôt à l'horizontale juste en dessous des autres contrôles avec seulement un mot à chaque fois : Effacer, Devis, Modifier, Supprimer.
Je viens seulement de regarder le code, ce n'est pas vraiment dans l'esprit prévu. Alors j'explique.
On commence d'abord par taper son client en mettant la fiche dans l'état désiré. Après seulement on engage l'action définitive finale. Ça peut consister soit à le modifier ou le supprimer, soit à l'ajouter s'il n'existait pas.
Pour la suppression, c'est simple, il suffit de faire un CL.PlgTablo.Rows(LCou).Delete
Pour la validation (un bouton BtnValider ayant pour caption soit "Ajouter" soit "Modifier") il faut garnir le tableau VLgn d'après les contrôles puis l'affecter à CL.PlgTablo.Rows(LCou).Value. En somme comme dans GarnirChamp puis dans CL_BingoUn mais en faisant les affectations dans l'autre sens. Si LCou est à 0, il faut préalablement lui assigner une nouvelle ligne. Je conseille de dupliquer la dernière ligne et de réécrire par dessus l'original repoussé d'une ligne plus bas. Pour cela il faut mettre LCou à CL.PlgTablo.Rows.Count, puis copier sa dernière ligne, l'insérer devant elle même, puis ajouter 1 à LCou. Toujours refaire un CL.Actualiser à la fin, après toute modification apportée dans la base.

P.S. Mais d'abord, il manque dans CL_Change du code qui devrait s'exécuter si NbrLgn <> 1: Mettre LCou à 0 et fabriquer un VLgn vide, sauf en ce qui concerne les valeurs à reprendre des ComboBox, puis appeler GarnirChamps.

P.S.2 Il pourrait être possible de se passer du bouton Devis, le bouton de validation pouvant aussi jouer ce rôle dans le cas où aucune modification n'a été apportée à une fiche existante. Écrivez donc une procédure HabiliterBoutons et appelez la systématiquement à la fin de chaque autre procédure, y compris des _Change pour chaque TextBox.
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxliescpville de dranreb a intégré dans classeur clients??

bonjour dranreb
ecrit comme ceci
Code:
Private Sub sup_cli_Click()
CL.PlgTablo.Rows(LCou).Delete
End Sub
c'est sur une ligne dans la feuille client est effacée, et si rien rempli efface l'entête de feuille

Pascal
 

Dranreb

XLDnaute Barbatruc
Re : cbxliescpville de dranreb a intégré dans classeur clients??

La procédure HabiliterBoutons aura entre autre pour rôle de faire:
VB:
BtnSupprimer.Enabled = LCou > 0
Au minimum. Car je pense qu'il vaudrait mieux l’interdire aussi si au moins un champ aura été modifié, afin d'être sûr de bien supprimer une fiche dont on a l'image exacte sous les yeux.

Évitez de mettre des blancs soulignés dans des noms. Réservez cela comme séparateur dans les procédures évènements entre le nom de l'objet et le nom de l'évènement. Lorsque vous voulez mettre un nom composé, collez tout ensemble mais en mettant une capitale au début de chaque mot.
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxliescpville de dranreb a intégré dans classeur clients??

re
donc j'ai mis
-Private Sub BtnAjout_Click()
-Private Sub BtnModif_Click()
-Private Sub BtnEffacer_Click()
-Private Sub BtnDevis_Click()
voila pour le nom des boutons reste la procédure HabiliterBoutons
 

Dranreb

XLDnaute Barbatruc
Re : cbxliescpville de dranreb a intégré dans classeur clients??

Ne mettez qu'un seul bouton et donc une seule procédure BtnValider_Click au lieu des 3 BtnAjout_Click, BtnModif_Click et BtnDevis_Click(). La HabiliterBoutons y mettra le bon Caption en fonction des circonstances.
Manque un bouton BtnSupprimer. Le bouton BtnEffacer pourrait aussi avoir deux rôles et donc deux captions: "Effacer" ou "Rétablir" (si on a engagé des modification dans un contrôle, "Rétablir" remettra les valeurs d'origine (simple appel à GarnirChamps) et se transformera en "Effacer", qui lui fera un simple CL.Nettoyer)

Je pense qu'il vaut mieux ne pas effacer d'office après une validation, pour deux raisons:
1) - Il serait logique d'avoir souvent à la mettre en tête d'un devis juste après l'avoir créée ou modifiée.
2) - Il vous arrivera peut être plus souvent que vous ne le croyez de vous apercevoir en validant même que vous avez oublié ou mal tapé quelque chose !
Non, non, gardons la affichée, mais, dans la fenêtre de propriétés, mettons à True la propriété Cancel du bouton d'effacement/annulation ce qui l'affecterait à la touche Echap. Le BtnValider, lui, pourrait être Default = True ce qui l'affecterait à la touche Entrée.
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxliescpville de dranreb a intégré dans classeur clients??

re
concernant les boutons j'ai mis un effacer mais pourquoi car supprimer est plus logique
enfin faut 'il qu'il soit enable entre eux
autrement j'ai essayer ceci

Code:
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
If NbrLgn <> 1 Then LCou = 0 'et fabriquer un VLgn vide??
End Sub
pour la fin c'est le trou

Pascal
 

Dranreb

XLDnaute Barbatruc
Re : cbxliescpville de dranreb a intégré dans classeur clients??

J'ai fait des édits dans mon poste précédent. Mettez plutôt autre chose alors (R à Z ?) si vous voyez une confusion entre l'effacement des contrôles seulement, en vue de travailler sur un autre client, et la suppression de celui ci.

Solution du CL_Change :
VB:
Private Sub CL_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
Dim I As Long
If NbrLgn = 1 Then Exit Sub
LCou = 0
ReDim VLgn(1 To 1, 1 To 14)
For I = 1 To CL.Count: With CL.Item(I): VLgn(1, .Col) = Trim$(.CBx.Text): End With: Next I
VLgn(1, 2) = WorksheetFunction.Max(CL.PlgTablo.Columns(2)) + 1 ' Ce N° est-il toujours d'actualité ?
GarnirChamps
End Sub
 

grisan29

XLDnaute Accro
Re : cbxliescpville de dranreb a intégré dans classeur clients??

re
pour la gestion des boutons, est ce que le code du classeur client que j'ai mis en début de post ferai en partie l'affaire
Code:
Private Sub GroupeBouton_Click()    'cet evenement concerne tout les commandbuttons de l'userform
  Dim Page, combo, i, ctrl, e
  With Uclient
    Page = .MultiPage1.Value
    Select Case Left(GroupeBouton.Name, 7)

    Case "valider"
      'bouton valider les modifications


      Set combo = .Controls("combonom" & Page)
      i = combo.List(combo.ListIndex, 2)
      For Each ctrl In .Controls("Frame" & Page).Controls
        If TypeName(ctrl) = "TextBox" And ctrl.Tag <> "" And ctrl.Name <> "oldbouton" Then WsClient.Range(ctrl.Tag & i).Value = ctrl.Value
      Next

      'ici on vire le userform pas la peine de le garder en memoire
      Unload Uclient

      'tout les boutons annuler
    Case "Annuler"
      Unload Uclient
      'bouton ajouter dans le listing Uclient
    Case "ajouter"
      With WsClient
        i = .Range("B65536").End(xlUp).Row + 1
        For Each ctrl In Uclient.Frame0.Controls
          If TypeName(ctrl) <> "CommandButton" And ctrl.Tag <> "" Then
            .Range(ctrl.Tag & i) = ctrl
            ctrl = ""
          End If
        Next
      End With
      Workbooks(WsClient.Parent.Name).Save
      'ici on vire le userform pas la peine de le garder en memoire
      'Unload Uclient    'a la place de UserForm1.Hide
      'bouton ajouter au devis
    Case "ajoudev"
      With wsFacture
        .Range("DOC_CLIENT").Resize(6, 1).ClearContents
        .Range("B2:I300").Interior.Color = xlNone
        .Range("A5").Value = Uclient.Combonom2.List(, 0)
        With .Range("DOC_CLIENT")
            .Value = Uclient.Combocivil2.Value & " " & Uclient.Combonom2.List(, 0)
            .offset(1).Value = Uclient.PRENOM2
            '==================modif pour ajout à l'attention de: réussie ========================
            If Uclient.ATTENTION2.Value <> "" Then
              .offset(2).Value = "à l'attention de : " & Uclient.ATTENTION2.Value
              .offset(3).Value = Uclient.ADRESSE2
              .offset(4).Value = Uclient.COMPLEMENT2
              .offset(5).Value = Uclient.cp2 & " " & Uclient.VILLE2
            Else
              .offset(2).Value = Uclient.ADRESSE2
              .offset(3).Value = Uclient.COMPLEMENT2
              .offset(4).Value = Uclient.cp2 & " " & Uclient.VILLE2
            End If
        End With
        '=================================================================
      End With
      MsgBox "la case client a duement été remplie!"
      Unload Uclient
      wsFacture.Activate

    Case "Supprim"
      Set combo = .Controls("combonom" & Page)
      e = combo.List(combo.ListIndex, 2)
      WsClient.Rows(e).Delete Shift:=xlUp
      MsgBox "Le client a bien été supprimé du listing client"
      remplinom

    End Select
  End With
End Sub
le n° peux etre zappé si nécéssaire,des commentaires ne serait pas superflu
Pascal
 

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000