Alimenter bdd client et produits

doudygirl

XLDnaute Nouveau
Bonjour,

J'en appel a votre aide car je suis complètement bloquée par mes faibles connaissances vba, et j'ai eu beau chercher je n'est pas trouvé de fichiers qui correspondent à mon besoin.

J'ai adapté un fichier posté par un utilisateur et scindé la base princiaple en 2 feuilles (clients et produits).
Tout marche (ajout, modif et suppression) mais le problème c'est qu'un client peut avoir plusieurs produits.

Ainsi si vous pouviez m'aider sur ces 2 points :

1) Comment faire pour que lorsque le client a plusieurs produits ceux-ci soient afficher dans la liste "Select_SiteClient" et cliquable pour que les informations correspondante au produit apparaissent dans la page 2 du userform?

2) Comment faire si je souhaite ajouter un nouveau produit pour ce client?

Merci d'avance et bonne année...
 

Pièces jointes

  • Sauvegarde de clients_modif_double_liste-2fichiers_V6.xls
    169 KB · Affichages: 119
C

Compte Supprimé 979

Guest
Re : Alimenter bdd client et produits

Salut Doudygirl,

J'ai effectués "quelques" modifications dans ton fichier ;)

1) ton problème de "Select_SiteClient" est réglé

2) Pour ajouter un nouveau produit à un client, il suffit
a) d'aller modifier sa fiche
b) de saisir un nouveau produit dans la combobox et de valider​
Là une question te sera posée pour savoir si tu veux vraiment l'ajouter​
si tu répond "oui" une ligne produit sera ajoutée pour le client​


3) j'ai modifié le fonctionnement de tes boutons et ajouter "Annuler"
a) confirmer et annuler sont masqué au départ et s'affichent quand tu cliques sur l'une des 3 autres
b) quand tu cliques sur l'un des 3 boutons, les 2 autres sont masqués et celui qui reste est verrouillé
c) pourquoi le bouton "Annuler" et bien tu peux avoir envie d'annuler une opération, plus besoin de quitter​


4) j'ai changé la façon de calculer l'ID client, maintenant par fonction avec NB.SI() car l'ancienne était erronée. En effet comme ta base est triée alphabétiquement si B est le client C017 et que tu supprime le client A C016, lorsque tu ajoutais un nouveau client, celui-ci se retrouvait avec l'ID C017

Voili, voilà, à toi de découvrir les modifs ;)

A+

 

Pièces jointes

  • Clients_modif_double_liste-2fichiers_V6.1.xls
    196.5 KB · Affichages: 90

doudygirl

XLDnaute Nouveau
Re : Alimenter bdd client et produits

Merci, merci, merci beaucoup!
C'est exactement ce que je désespérais de faire.

Je vais essayer de bien regarder le code pour comprendre le fonctionnement, car le but pour moi est aussi d'apprendre par ce cas pratique.

Encore merci pour ton aide.
 

doudygirl

XLDnaute Nouveau
Re : Alimenter bdd client et produits

C'est très gentil de ta part.

Si je n'abuse pas trop, effectivement j'ai quelques questions:

1) J'ai un message d'erreur qui apparait lors du choix du site (Select_site)
Message "erreur d'execution '91'
Variabke objet ou variable de bloc With non définie"

D'ou cela provient-il?


2) Pour IdNewClt()
Si je comprend bien, il regarde le dernier numéro enregister ex: 18 pour C018 et créer un id avec un numéro de plus. C'est bien cela?

3) Pour essayer de comprendre, je voudrais bien avoir l'explication de ce code:
On Error Resume Next
For Each Ctrl In Me.MultiPage1.Pages(0).Controls
If TypeOf Ctrl Is MSForms.TextBox _
Or TypeOf Ctrl Is MSForms.ComboBox Then Ctrl.Value = ""
Next Ctrl
For Each Ctrl In Me.MultiPage1.Pages(1).Controls
If TypeOf Ctrl Is MSForms.TextBox _
Or TypeOf Ctrl Is MSForms.ComboBox Then Ctrl.Value = ""

If TypeOf Ctrl Is MSForms.CheckBox Then Ctrl.Value = False
Next Ctrl
On Error GoTo 0

4) J'ai remarquer le code
'Penser à effacer les variables objets
Set ShtC = Nothing: Set ShtP = Nothing
Quel est son but?

Merci beaucoup, le fonctionnement est super!!
 
C

Compte Supprimé 979

Guest
Re : Alimenter bdd client et produits

Re,
C'est très gentil de ta part.
J'assure toujours le SAV lorsque je code ;)

1) J'ai un message d'erreur qui apparaît lors du choix du site (Select_site)
Message "erreur d’exécution '91'
Variable objet ou variable de bloc With non définie"
C'est un problème de récurrence et d'effacement des variables objet, lorsque tu remplies les Combo avec la donnée récupérée. Pour éviter cela, j'ai ajouter une variable : FlgStop

C'est réglé dans la version ci-dessous 6.2

2) Pour IdNewClt()
Si je comprend bien, il regarde le dernier numéro enregister ex: 18 pour C018 et créer un id avec un numéro de plus. C'est bien cela?
Presque ;)
Dans la fonction :
1)je récupère les 3 chiffres de la partie de droite de l'ID client de la dernière ligne
2) je vérifie avec la fonction NB.SI() - COUNTIF() en VBA si l'ID n'existe pas
3) s'il existe j'incrémente le numéro et je revérifie, etc ...

3) Pour essayer de comprendre, je voudrais bien avoir l'explication de ce code:
On Error Resume Next
For Each Ctrl In Me.MultiPage1.Pages(0).Controls
If TypeOf Ctrl Is MSForms.TextBox _
Or TypeOf Ctrl Is MSForms.ComboBox Then Ctrl.Value = ""
Next Ctrl
For Each Ctrl In Me.MultiPage1.Pages(1).Controls
If TypeOf Ctrl Is MSForms.TextBox _
Or TypeOf Ctrl Is MSForms.ComboBox Then Ctrl.Value = ""

If TypeOf Ctrl Is MSForms.CheckBox Then Ctrl.Value = False
Next Ctrl
On Error GoTo 0
Ce code balaye tous les contrôles de tes 2 multipages
Code:
For Each Ctrl In Me.MultiPage1.Pages(0).Controls
Et selon son type
Code:
If TypeOf Ctrl Is MSForms.TextBox
Efface ou non son contenu
Ou si c'est un CheckBox, le met à Faux

4) J'ai remarquer le code
'Penser à effacer les variables objets
Set ShtC = Nothing: Set ShtP = Nothing
Quel est son but?
En fait quand tu déclares des variables Objet : Set VarObj =
Cela prend de la place dans la pile mémoire et peux au bout de multiples manipulations,
te faire planter ton application.
C'est pour cela que l'on vide ces variables

Merci beaucoup, le fonctionnement est super!!
Tant mieux, heureux que cela te plaise ;)

A+
 

Pièces jointes

  • Clients_modif_double_liste-2fichiers_V6.2.xls
    193.5 KB · Affichages: 91

doudygirl

XLDnaute Nouveau
Re : Alimenter bdd client et produits

Bonjour,

Je reviens à nouveau vers toi car j'ai encore un petit bug et une autre question cerveau est un peu lent!!!)

Le Bug:
1) Quand on choisi un client (Select_Client) l'actualisation Select_site et Select_SiteClient est nickel, par contre quand on choisit un site (Select_site), la liste Select_SiteCient n’est pas actualisée.

2) Quand on sélectionne une info dans Select_SiteCient, par exemple Site 2 Essai 3 (après avoir sélectionné le client Essai 3), et que l’on choisit un autre site dans Select_Site, la liste Select_Site n’est pas actualisée (et Select_SiteClient non plus mais cela doit être lié au point numéro 1).

Est-ce que cela vient de ce bout de code?
Select_SiteClient qui ne serait liée qu’à la liste Select_Client

'On recharge la CBox selon le choix du client
With Sheets("Produits")
For Y = 2 To .Cells(Rows.Count, 2).End(xlUp).Row
' Ajouter le site s'il appartient au client
If .Range("A" & Y) = IdClient Then
' On ajoute le site à la liste des sites
Me.Select_SiteClient.AddItem .Cells(Y, 2)
End If
Next Y


La question:
Peux-tu me donner plus de précisions sur « FlgStop ». Si je comprends bien cela permet d’arrêter une instruction. Mais j’ai du mal à saisir pourquoi…
 
C

Compte Supprimé 979

Guest
Re : Alimenter bdd client et produits

Bonjour Doudygirl ;)

Le Bug:
1) Quand on choisi un client (Select_Client) l'actualisation Select_site et Select_SiteClient est nickel, par contre quand on choisit un site (Select_site), la liste Select_SiteCient n’est pas actualisée.

2) Quand on sélectionne une info dans Select_SiteCient, par exemple Site 2 Essai 3 (après avoir sélectionné le client Essai 3), et que l’on choisit un autre site dans Select_Site, la liste Select_Site n’est pas actualisée (et Select_SiteClient non plus mais cela doit être lié au point numéro 1).

Est-ce que cela vient de ce bout de code?
Select_SiteClient qui ne serait liée qu’à la liste Select_Client
Cela venait du code des 2 sub suivantes
VB:
Private Sub Select_site_Click()
  Dim Y As Long
  ' Si le choix n'est pas fait sur le client
  If FlgStop = False Then
    ' On sélectionne le site
    Call Selection_Site
    ' Mettre à jour les sites du client
    IdClient = IdClientFind(Me.Select_Client)
    Call ComboMajSiteClient
  Else
    ' Mettre le FLAG à FAUX
    FlgStop = False
  End If
End Sub


Private Sub Select_siteClient_Click()
  Dim Y As Long
  ' On sélectionne le site
  Call Selection_SiteClient
  ' Mettre à jour les sites du client
  IdClient = IdClientFind(Me.Select_Client)
  Call ComboMajSite
End Sub
Je ne faisait pas la mise à jour de l'autre Combo grace à l'ID client


La question:
Peux-tu me donner plus de précisions sur « FlgStop ». Si je comprends bien cela permet d’arrêter une instruction. Mais j’ai du mal à saisir pourquoi…
Cette variable booléenne permets d'empêcher le code de reboucler
Exemple dans la Sub
Code:
Sub Selection_Client()
Lorsque tu mets à jour le contenu de la combo Select_Client
Code:
.Select_Client.Value = ShtC.Cells(Pointeur_Client, 2)
L'évènement
Code:
Private Sub Select_site_Click()
se met en route et si tu ne mets pas de FLAG d'arrêt, relance une
Code:
Call Selection_Site

Tu peux le voir en mettant un point d'arrêt (F9) sur la ligne
Code:
.Select_Client.Value = ShtC.Cells(Pointeur_Client, 2)
Ensuite F8 pour avancer pas à pas

J'espère avoir été assez clair ;)

A+
 

Pièces jointes

  • Clients_modif_double_liste-2fichiers_V6.3.xls
    199.5 KB · Affichages: 95
Dernière modification par un modérateur:

doudygirl

XLDnaute Nouveau
Re : Alimenter bdd client et produits

Merci beaucoup pour tes explications et ta patience...
Je vais reprendre toutes les explications et me les détailler dans le fichier en commentaire!

Par contre, sur ce dernier fichier, lorsque l'on selectionne Select_SiteClient, la donnée n'est pas reprise dans Select_site donc on ne peut plus enregistrer ce produit.
 

jlp035

XLDnaute Occasionnel
Re : Alimenter bdd client et produits

Bonjour doudygirl et BrunoM45,
Je suis intéressé par votre projet car je cherche en réaliser un sur la même base .
Je vais essayer de comprendre la logique utilisée pour les pointeurs des 2 fichiers,je m'explique.

J'ai actuellement réalisé une application ou je créer une liste de clients( Fichier appelé "Clients").
Je souhaiterai que si je déclare un client avec l'option astreinte via une combobox à oui.
On me demande son numéro d'identifiant d'astreinte: exemple "2300"et que ce numéro me créer une liaison avec le fichier ( appelé Astreinte ), ou je pourrai créer automatiquement le site N°1 ( exemple 2300_01 )associer à ce client et ensuite créer d'autres sites associer à ce client si nécessaire( exemple 2300_02 ensuite 2300_03 ect....)

Jean-Luc
 

doudygirl

XLDnaute Nouveau
Re : Alimenter bdd client et produits

Bonjour,

Je reviens a nouveau dans la discussion pour re-demander de l'aide.

Sur le dernier fichier, lorsque je modifie le nom du client, il y a une erreur qui provient de la fonction :

Function IdClientFind(NomClt As String)
Dim LigFind As Long
' Initialiser le numéro de ligne trouvée
LigFind = 0
' Avec la feuille Clients
With Sheets("Clients")
' En cas d'erreur on continue
On Error Resume Next
' Trouver la ligne correspondante
LigFind = .Range("B:B").Find(What:=NomClt, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row
' réactiver les erreurs
On Error GoTo 0
' Retourner le numéro d'ID du client
IdClientFind = .Range("A" & LigFind).Value
End With
End Function

Comment est ce que l'on peut corriger cela?

Merci beaucoup

Ps: jlp035, il serait interressant de voir le document une fois avancé, cela peut donner des idées de gestion!!
 
C

Compte Supprimé 979

Guest
Re : Alimenter bdd client et produits

Bonjour doudygirl

Ce message d'erreur est dû au fait que le nom du client n'est pas trouvé dans la feuille "Clients"

Tout dépend ensuite ce que tu souhaitais faire ?

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 224
Messages
2 086 410
Membres
103 201
dernier inscrit
centrale vet