UserForm Concaténation avec condition qui ne fonctionne pas

Joe[PT]

XLDnaute Junior
Bonjour à tous,

Je suis en train d'essayer, depuis plusieurs jours, à me dépatouiller avec une UserForm qui ne réagit pas complétement comme je le voudrai et après plusieurs tentatives, je dois admettre que je suis (très) limité en la matière.

J'ai l'USF6 qui est censé me donner la possibilité de "Créer / Modifier Produits". Il fonctionne en partie. Le problème est que le Code Produit est obtenu par concaténation et que je n'arrive à obtenir le résultat voulu (au mieux j'obtiens une partie et pas toujours la bonne).

La codification produit se fait selon cette logique :
5 premières lettres en majuscules du code fournisseur (dans la fiche fournisseur) OU 5 premières lettre de la Marque (toujours liste fournisseur). Par exemple, un fournisseur qui s'appelle LAFONT et distribue ses produits sous son nom propre, le code produit commencera par LAFON (5 premières en majuscules). Par contre, s'il commercialise ses produits sous une autre marque comme ALLOUETTE : le code produit commencera par ALLOU... Priorité à la marque s'il y en a une !

Après, la formule complète de la concaténation est reprise en B21 de la feuille "Nouveau Produit" (qui deviendra obsolète lorsque l'USF6 fonctionnera correctement).

Voilà, j'espère ne pas avoir été trop ennuyeux ni trop brouillon, non plus :p

PS1 : l'USF4 fonctionne bien
PS2 : l'USF7 fonctionne en partie seulement, je ne parviens pas à remonter les informations en fonction du code produit et de l'année commercial sur les autres onglets, uniquement les infos sur l'onglet "Produits"...

Je continue à chercher, qui sait une idée :)

Bonne fin d'après-midi,

Joe
 

Pièces jointes

  • UserForm_Consultation_Produit_v0.2.xlsm
    116.9 KB · Affichages: 27

vgendron

XLDnaute Barbatruc
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Hello

Voilà, j'espère ne pas avoir été trop ennuyeux ni trop brouillon, non plus

euh.. pour la partie brouillon. si justement un peu.. ;-)
c'est sans doute une raison pour laquelle tu te perds dans ton code

J'ai l'USF6 qui est censé me donner la possibilité de "Créer / Modifier Produits"


à priori le usf6 ne fait pas ce que tu dis. il permet juste de consulter un produit..
donc on va dire que c'est l USF7 qui pose problème..
à l'ouverture de celui ci. tu initialises la liste de recherche avec les éléments de la colonne A de la feuille Produits.
donc à priori AVEC les codes produits que tu dis vouloir créer.. déjà. incohérence..??
ne veux tu pas plutot lister les codes fournisseurs. et à partir de la. selon ta logique, créer le code fournisseur?

ensuite.. toujours dans cette initialisation, tu remplis tous les Textbox (boucle de 1 à 9)
mais dès qu'un de ces textbox est rempli, l'évènement change va faire une action .. et ca revient et ca repart. bref. on a du mal à suivre
il faudrait placer un
application.enableevents=false en début d'initialisation
et
application.enableevents=trus en fin
histoire de laisser l'initialisation se faire sans aller retour ?


autre incohérence observée:
dans ta feuille Produits, tu as des codes fournisseurs (Dalva - CSEUF -Orden) qui n'apparaissent pas dans ton onglet "Fournisseurs"..

une proposition de formule (directement dans ta feuille Produits) pour créer un Code Produit en fonction du code Fournisseur et Marque
en A16
=SI(D16<>"";GAUCHE(D16;5)&"-" &G16&H16;B16&"-"&G16&H16)
 

Joe[PT]

XLDnaute Junior
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Hello



euh.. pour la partie brouillon. si justement un peu.. ;-)
c'est sans doute une raison pour laquelle tu te perds dans ton code

Ben, je m'en doutais un peu :p Désolé !


à priori le usf6 ne fait pas ce que tu dis. il permet juste de consulter un produit..
donc on va dire que c'est l USF7 qui pose problème..

Oui c'est bien l'USF 7 qui sert à "Créer / Modifier un Produit". Quel nul je fais ! Je commence à fatiguer...


il faudrait placer un
application.enableevents=false en début d'initialisation
et
application.enableevents=trus en fin
histoire de laisser l'initialisation se faire sans aller retour ?

Je vais essayer de faire ça... et on verra bien ce que ça donne.


à l'ouverture de celui ci. tu initialises la liste de recherche avec les éléments de la colonne A de la feuille Produits.
donc à priori AVEC les codes produits que tu dis vouloir créer.. déjà. incohérence..??

L'USF sert à "Créer / Modifier Produit" donc il se peut que le produit existe déjà et qu'on ne veuille en changer qu'une seule information (millésime par exemple).

ne veux tu pas plutot lister les codes fournisseurs. et à partir de la. selon ta logique, créer le code fournisseur?
Oui par défaut, c'est ça, seulement si la marque des produits est différentes du nom du fournisseur, il faut oublier le code fournisseur pour prendre l'abréviation de la marque (ex: fournisseur = Quinta Seara d'Ordens produit la marque "Carqueijal", le code produit doit commencer par CARQU-...).


autre incohérence observée:
dans ta feuille Produits, tu as des codes fournisseurs (Dalva - CSEUF -Orden) qui n'apparaissent pas dans ton onglet "Fournisseurs"..
J'ai "allégé" le fichier pour pouvoir le mettre en ligne et je n'ai pas faits attention que j'avais supprimé pratiquement tous les fournisseurs "produits" et gardé les fournisseurs "services"... Quel andouille ! :mad:

une proposition de formule (directement dans ta feuille Produits) pour créer un Code Produit en fonction du code Fournisseur et Marque
en A16
=SI(D16<>"";GAUCHE(D16;5)&"-" &G16&H16;B16&"-"&G16&H16)
[/QUOTE]
L'onglet "Nouveau Produit" me permettait déjà de générer le code produit que je souhaitais obtenir et je le recopiais via une macro dans les onglets concernés par la création d'un nouveau produit ("Produits", "Stocks", "Tarifs fournisseurs", "Coûts d'Achat")... mais avec plus de 130 produits en stocks, 30/40 nouvelles références à venir dans les prochaines semaines, je voulais faciliter la création / modification. Un USF me permettrait d'aller plus vite... Enfin, je pense :confused:

Je vais continuer à chercher...

Merci d'avoir pris le temps de pointer du doigts les problèmes évoqués !

Bonne soirée.

Joe
 

Joe[PT]

XLDnaute Junior
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Re-bonsoir,

Après modification, l'USF fait "presque" ce que j'attends de lui...

Il me reste à concaténer correctement, chose que je n'arrive pas à faire, la TextBox1 qui doit prendre la valeur suivante :

Code:
Private Sub TextBox1_Change()
If ComboBox1 <> "" Then
' La condition est s'il y a une marque, la TextBox5 (Marque en TextBox4) prend l'avantage sur la TextBox2 (Code fournisseur)
    If TextBox4 = "" Then
       TextBox1.Text = TextBox2.Text & "-" & TextBox7.Text & TextBox8.Text
        Else
        TextBox1.Text = TextBox5.Text & "-" & TextBox7.Text & TextBox8.Text
    End If
End If
End Sub

1. lorsque le produit existe dans la base, je suis obligé de faire un "Retour Arrière" sur la TextBox1 pour que le produit s'affiche... :confused:
2. lorsqu'il une "marque" en TextBox4, le code produit est sensé prendre la TextBox5... alors qu'il ne le prend pas... :confused:

ça m'énerve... un peu ! :mad:

Bon j'ai assez transpiré ce soir, on verra demain !

Bonne soirée.

Joe
 

Pièces jointes

  • UserForm_Consultation_Produit_v0.3.xlsm
    134.6 KB · Affichages: 28

vgendron

XLDnaute Barbatruc
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Hello,
Je reviens vers toi..après une bonne douche :)

Ton problème vient, je pense, du fait que les TextBox se mettent à jour au moindre changement des autres Text box.
il faut donc pouvoir les empecher d'interferer avec la Macro "Combobox1_Change"
j'ai pour cela ajouté un boolean ChangeEvent déclaré en public

donc. quand tu lances le USF7, tu sélectionnes un produit déjà existant (je suppose que tu pars de ca pour créer un nouveau produit?)
tous les Textbox sont remplis avec les datas de la feuille Produits
à priori. les infos sont bonnes..
Maintenant, les modif de textbox peuvent etre prises en compte (ChangeEvent repassé à vrai)

c'est la que je ne pige pas la logique:
je me dis qu'a partir des data, tu en modifies quelques unes pour créer un nouveau produit.
SAUF que justement, à la moindre modif, les textbox change remettent des infos existantes dans la feuille Produits.
en gros. toute modif que tu fais est "annulée"...

La question principale (je réfléchis en meme temps que j'écris ;-) est:
Comment créés tu un nouveau produit? quelles sont les infos que tu créés?
vu qu'un code produit, c'est forcément "une abbrev marque ou code fournisseur PUIS style puis millésime..

j'en ai profité pour mettre de l'ordre dans ton code et commenté pour identifier les TextBox.
 

Pièces jointes

  • UserForm_Consultation_Produit_v0.4.xlsm
    106.6 KB · Affichages: 26

Joe[PT]

XLDnaute Junior
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Bonjour vgendron,

Je créé les produits suivants les éléments qui étaient sur la feuille (obsolète, enfin pour l'instant pas encore :p) qui s'appelle "Nouveau Produit".

Quand le produit n'est pas dans la base, la combobox ne peut rien afficher bien sûr, donc la création suit toujours la même logique : "Code Fournisseur" (je ne fais pas de contrôle sur le Code fournisseur pour l'instant, mais en toute logique, le fournisseur devrait être créé pour au moins récupérer son code) OU "Abbrév. Marque" puis style et millésime.

Je souhaiterai automatiser la codification du code produit pour éviter que 2 personnes différentes utilisant l'application n'ait une logique différente et donc rendent les codes produits pas toujours significatifs.

Lorsque le nouveau produit est créé, le copier dans l'onglet "Produits" mais également "Stocks", "Coûts Achats", "Tarifs Fournisseurs"... de cette manière je n'ai pas à créer / modifier un produit sur chaque onglet. J'utilise une macro pour créer mais lorsqu'il faut modifier, je suis obligé de revenir sur tous les onglets, chercher le produit, etc...

Voilà, j'espère que je commence à être clair :p n'étant pas informaticien, j'essaie de me débrouiller...

En attendant, merci et bonne journée.

Joe
 

vgendron

XLDnaute Barbatruc
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Je reviens vers toi dans l'après midi avec un début de proposition qui modifie "sensiblement" ton code
les TextBox deviennent des Combobox pour permettre de sélectionner des data existantes dans tes tableaux

les tableaux deviennent des tables etc etc..
le principe serait:
1) tu sélectionnes un produit existant
2) les datas du formulaires sont remplies
3) si tu modifies une des datas, le nom du produit se met à jour
4) tu valides

à voir
Pour l'instant. bon déjeuner ;-)
 

vgendron

XLDnaute Barbatruc
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Re !!

regarde la PJ
comme je disais

en cliquant sur Nouveau Produit
1) tu sélectionnes un produit existant
2) les datas du formulaires sont remplies
3) si tu modifies une des datas, le nom du produit se met à jour
-->si tu modifies Le code fournisseur, le fournisseur se met à jour automatiquement. et vice versa.
--> le Code Produit et le Nom Produit suivent la mise à jour
-->si tu sélectionnes une autre marque (ici. il n'y en a qu'une) ou une marque vide (=sélection d'une ligne vide)
alors. l'abbréviation marque se met à jour (se vide en cas de marque vide)
--> le Code Produit et le Nom Produit suivent la mise à jour

si tu sélectionnes un autre type ou style ou année, --> le Code Produit et le Nom Produit suivent la mise à jour


comme tu l'as vu, une grosse partie de tes TextBox sont devenus des Combobox.. et j'imagine déjà ta question. "mais comment les remplis tu?"
la intervient le gros interet des tables excel (j'ai bien dit Table. pas tableau..)
une des propriétés du combobox est la propriété "Rowsource"
la. tu peux lui donner directement un nom: ici. la colonne X de la table X
ex:
Pour le combobox2 (Code Fournisseur), il est alimenté par la colonne "Code Fourn." de la table "TabFournisseurs"
ce qui s'écrit: TabFournisseurs[Code Fourn.]
Code Fourn. étant l'entete exacte de la fameuse table (onglet "Fournisseurs")

Maintenant, le souci que j'ai moi. c'est comment alimenter les combobox avec des listes SANS doublons.. je sais que la solution existe. suffit juste de la chercher ;-)

Déjà. dis moi si ca semble répondre à ton besoin.
 

Pièces jointes

  • UserForm_Consultation_Produit_NEWv1.xlsm
    121.2 KB · Affichages: 26

Joe[PT]

XLDnaute Junior
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Je dois avoir un gros coup de fatigue : je n'arrive pas à créer ni à modifier un produit :confused:
J'ai systématiquement un message d'erreur "Variable non définie" sur cette partie là :

Code:
Private Sub CommandButton1_Click() 'Bouton Enregistrements
    Dim col As Integer, derlig As Integer, x As Integer
    Dim ctrl As Control, cel As Range, i As Long
    Dim cde
    
'    If ComboBox1 = "" Then
'        MsgBox "Vous devez saisir un Code Produit.", 16
'        Exit Sub
'    End If
    
    Set cde = Sheets("Produits").Range("A:A").Find(ComboBox1, lookat:=xlWhole)
    If Not cde Is Nothing Then
        MsgBox cde & " existe déjà." & Chr(13) & " Si vous voulez enregistrer des modifications, cliquer sur ''Modifier''", 16
        Exit Sub
    End If
    With Sheets("Produits")
        derlig = .Range("A16").End(xlDown).Row + 1
        
        For Each ctrl In Me.Controls
            col = Val(ctrl.Tag)
            If col > 0 Then
                If Not IsNumeric(ctrl) Then
                    .Cells(derlig, col) = ctrl
                Else
                    .Cells(derlig, col) = CDbl(ctrl)   'format numérique simple ex: 3124
                End If
            End If
        Next ctrl
        '.Range("G16:H65000").NumberFormat = "000 000 00 00"   'Numéro téléphone et fax
        .Range("B:u").Columns.AutoFit
        .Range("A16:Z65000").Sort [A2], xlAscending
 '   End With
    
 '   With Sheets("Produits")
        ComboBox1.Clear
        For x = 2 To .Range("A16").End(xlDown).Row
                ComboBox1 = .Range("a" & x)
                'filtre les doublons
               If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem .Range("a" & x)
        Next x
        ComboBox1.Text = ""
    End With
    
    For i = 1 To 9
    Me.Controls("TextBox" & i).Text = ""
    Next
    TextBox2.SetFocus
End Sub

Je suis nul ! :(
 

vgendron

XLDnaute Barbatruc
Re : UserForm Concaténation avec condition qui ne fonctionne pas

non non tu n'es pas nul.. c'est juste que tu as oublié que j'avais modifié tes textbox en combobox. du coup. ton code qui s'attend à utiliser des textbox ne marche plus..

j'étais justement en train de modifier tout ca

cf PJ version2

pour savoir ou un code plante. lance le en mode pas à pas. (touche F8)

prend le temps de regarder tous les commentaires que j'ai placés dans le code, tu y verras plus clair. enfin. je pense ;-)
 

Pièces jointes

  • UserForm_Consultation_Produit_NEWv2.xlsm
    122.9 KB · Affichages: 33

Joe[PT]

XLDnaute Junior
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Bonsoir vgendron,

Encore une fois, merci pour ton aide... Je viens de parcourir ton code et je suis loin d'en faire autant :p

Apparemment en mode "Création" ça fonctionne, par contre en mode "modification" le code plante à cet endroit :

Code:
Private Sub CommandButton3_Click() 'Bouton Modification

Dim cel As Range, i As Long
'pour modifier, il faut avoir quelque chose à modifier en Recherche
ChangeEvent = False
If ComboBox1 = "" Then
    MsgBox "Vous devez saisir un Code Produit.", 16
    Exit Sub
Else
    With Range("TabProduits[Code Produit]")
        Set cel = .Find(ComboBox1, , xlValues, xlWhole)
        If Not cel Is Nothing Then
            PosProduit = cel.Row

"PosProduit" : Variable non définie, effectivement je ne trouve pas de déclaration pour cette variable. Je ne sais pas trop comment la déclarer d'ailleurs !

Sinon, ça a l'aire de fonctionner pour le reste ;) Je vais pouvoir m'en inspirer et voir comment on fait des recherches de valeurs sur plusieurs feuilles... Bref, j'en encore du pain sur la planche ;)

Bonne soirée,

Joe
 

vgendron

XLDnaute Barbatruc
Re : UserForm Concaténation avec condition qui ne fonctionne pas

Hello

la, c'est moi qui suis fatigué ;-)
j'ai oublié de mettre la dernière modif que j'avais faite
effectivement, il suffit de déclarer la variable juste dans la procédure

Private Sub CommandButton3_Click() 'Bouton Modification

Dim cel As Range, i As Long
Dim PosProduit
'pour modifier, il faut avoir quelque chose à modifier en Recherche
ChangeEvent = False
If ComboBox1 = "" Then
MsgBox "Vous devez saisir un Code Produit.", 16
Exit Sub
Else
With Range("TabProduits[Code Produit]")
Set cel = .Find(ComboBox1, , xlValues, xlWhole)
If Not cel Is Nothing Then
PosProduit = cel.Row

dans la PJ, j'ai essayé de regarder du coté de la création de nouvelles marques.. mais c'est pas convaincant car si je créé une nouvelle marque, le formulaire "Créer/Modifier" ne met pas la liste déroulante à jour..
 

Pièces jointes

  • UserForm_Consultation_Produit_NEWv3.xlsm
    133.9 KB · Affichages: 30

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote