Modification partielle code client avec Bouton d'option
Bonjour à tous,
J'ai créé un UsF pour rentrer des contacts dans un tableau.
L' UsF créé pour chaque contact, un code Prospect "PR- 001", "PR-002", etc. en fonction de la dernière ligne du tableau et du bouton d'option activé (Prospect ou client). Par défaut prospect est pré-sélectionné à la création d'une nouvelle fiche.
L'UsF me permet également de retrouver et modifier une fiche contact déjà créée.
Je souhaiterais donc dans cette procédure (Private Sub CommandButton3_Click() ' BOUTON MODIFIER) lorsque le bouton d'option 2 est "true"(statut "client") remplacer le code "PR-00X" par "CL-00X". (le prospect devient client, changement du préfixe du code mais pas du numéro déjà créé dans la procédure ajouter).
J'ai essayé pas mal de chose en vba avec "replace" mais je n'arrive pas à garder la fin du code existant.
Dans le tableau:
Sachant que la colonne O contient en toute lettre le statut "CLIENT" ou "PROSPECT" qui lui se met bien à jour j'avais imaginé utilisé une formule sur la colonne N permettant de modifier le code avec la fonction SUBSTITUE, sans plus de succès...
merci pour votre aide
Salut feudeuf.
Avant toute chose, je te conseille fortement de passer mettre sous forme de tableau ta feuille Client et de ne plus utiliser le code
Cells(modif, 1) = ComboBox1.ValueEn effet, le problème en utilisant un numéro fixe de colonne c'est que le jour où tu veux rajouter une colonne, ton VBA ne fonctionnera plus.
Il faut mieux utiliser une variable comme avec "modif".
Ensuite pour ton problème, je vois deux possibilités :
Soit la longueur de ta référence client ne changera pas dans ce cas un code vba peut faire l'affaire (par contre, si tu as plus plus de quartes chiffres à ton code client ça ne fonctionnera plus)
Tu peut utiliser
Cells(modif, 8) = "CL" & TextBox3.Value Right(TextBox3.Value , 5)Soit ton code client se complexifiera et dans ce cas diviser le code client en plusieurs colonnes (une pour le lettrage, une pour ne numéro et une combinant les deux) te permettra des évolutions plus aisées.
Dans ce cas, il faudra juste remplacer le "PR" par "CL".
Bonjour Bouli038,
merci pour ton aide rapide, je suis débutant dans le domaine et j'avoue avoir compilé quelques bouts de codes glanés ça et là sur le net.
Pour ce qui est de la mise en forme tableau, il me semblait l'avoir fait : dans la barre de formule quand je clique sur la liste déroulante de l'indicateur de cellule (en haut à gauche) , si je sélectionne tableau2 il me prend bien toutes les lignes renseignées sauf les entêtes, par contre j'ai désactivé l'affichage des filtres sur chaque colonne. Aurais-je omis quelque chose ?
Si je te comprends bien, si je déclare une variable disons "col " as integer dans mon sub, je peux simplement indiquer Cells(modif, col)= ComboBox1.Value par exemple et les données correspondantes se classeront dans la feuille selon l'ordre dans le code vba, par exemple si j'écris
Cells(modif, col)= ComboBox1.Value 'la valeur va se mettre dans la colonne 1 du tableau
Cells(modif, col)= ComboBox2.Value 'la valeur va se mettre dans la colonne 2 du tableau
etc
si j'insère plus tard une ligne dans le tableau , tout se mettra à jour automatiquement si j'insère une nouvelle ligne de code au bon endroit ?
Concernant la formule que tu me proposes j'ai une erreur de fin d'instruction manquante j'ai donc fait
Cells(modif, 10) = TextBox5.Value
etc... et rajouté
Cells(modif, 14) = "CL" & TextBox8(Right(TextBox8.Value, 5)) ' j'ai rajouté 2 parenthèses
Par contre ça ne fonctionne pas ! j'ai cru que c'était parce que la textbox était locked, je l'ai passé en enable=false (je ne veux pas que l'on puisse modifier le code dans l'UsF) pensant que ça venait de là , mais toujours sans succès.
De plus il se peut que je modifie une fiche prospect sans qu'elle devienne obligatoirement une fiche client, c'est uniquement si l'option button2 est cliqué quand je valide la modification de la fiche.
Bonjour,
Ton code semble fonctionnel
Si option button1 vrai alors ….
Si option button 1 faux alors….
If OptionButton1.Value = True Then
Codeclient = "PR-" & Format(Numclient, "0000") 'construction du code prospect
End If
If OptionButton1.Value = False Then
Codeclient = "CL-" & Format(Numclient, "0000") 'construction du code client
End Ifmerci Xmenpl,
En fait ce n'est pas cette partie du code qui me pose problème même si ta solution parait plus logique effectivement.
Mais c'est dans la partie
Private Sub CommandButton3_Click() ' BOUTON MODIFIER
Quand je veux modifier une fiche existante qui n'est pas forcément sur la dernière ligne du tableau je voudrai pouvoir modifier la structure du code client existant (puisque la fiche existe déjà) et en modifier le préfixe "PR-" en "CL-" si le bouton d'option est modifié. SI par exemple j'ai fait une facture pour le prospect "PR-0006" il devient client avec le code "CL-0006".
et ça je n'y arrive pas
merci Xmenpl,
En fait ce n'est pas cette partie du code qui me pose problème même si ta solution parait plus logique effectivement.
Mais c'est dans la partie
Private Sub CommandButton3_Click() ' BOUTON MODIFIER
Quand je veux modifier une fiche existante qui n'est pas forcément sur la dernière ligne du tableau je voudrai pouvoir modifier la structure du code client existant (puisque la fiche existe déjà) et en modifier le préfixe "PR-" en "CL-" si le bouton d'option est modifié. SI par exemple j'ai fait une facture pour le prospect "PR-0006" il devient client avec le code "CL-0006".
et ça je n'y arrive pas
Il me semblait avoir déjà dit que toutes les infos sont modifiable sauf le Code client. car il est utilisé dans une combobox
pour appeler le dit client.
A toi de ne pas te tromper lors de la création. ou de modifier dans la base.
merci Xmenpl,
En fait ce n'est pas cette partie du code qui me pose problème même si ta solution parait plus logique effectivement.
Mais c'est dans la partie
Private Sub CommandButton3_Click() ' BOUTON MODIFIER
Quand je veux modifier une fiche existante qui n'est pas forcément sur la dernière ligne du tableau je voudrai pouvoir modifier la structure du code client existant (puisque la fiche existe déjà) et en modifier le préfixe "PR-" en "CL-" si le bouton d'option est modifié. SI par exemple j'ai fait une facture pour le prospect "PR-0006" il devient client avec le code "CL-0006".
et ça je n'y arrive pas
Re, voilà le code pour ton boutton 3
Private Sub CommandButton3_Click() ' BOUTON MODIFIER
If ComboBox1.Value = "" Then MsgBox "Veuillez renseigner le champs'Société' ou indiquer 'Particulier' ": Exit Sub
If ComboBox2.Value = "" Then MsgBox "Veuillez renseigner le champs 'Nom' ": Exit Sub
If TextBox10.Value = "" Then MsgBox "Veuillez renseigner le champs 'Mail' ": Exit Sub
Dim modif As Integer
If Not ComboBox1.Value = "" Then
Sheets("Clients").Select
modif = ComboBox1.ListIndex + 5
Cells(modif, 1) = ComboBox1.Value
Cells(modif, 2) = ComboBox3.Value
Cells(modif, 3) = ComboBox2.Value
Cells(modif, 4) = TextBox1.Value
Cells(modif, 5) = TextBox9.Value
Cells(modif, 6) = TextBox10.Value
Cells(modif, 7) = TextBox2.Value
Cells(modif, 9) = ComboBox5.Value
Cells(modif, 10) = TextBox5.Value
Cells(modif, 11) = TextBox6.Value
Cells(modif, 12) = ComboBox4.Value
' Vérifier si option client validé
If Me.OptionButton2.Value = True Then
'Modification du PR el CL
MsgBox Me.TextBox8.Value
Cells(modif, 14) = "CL" & Right(Me.TextBox8.Value, 5)
Else
Cells(modif, 14) = Me.TextBox3.Value
End If
For Each Ctrl In Frame1.Controls
If Ctrl.Value = True Then
Cells(modif, 15) = Ctrl.Caption ' mise à jour de la colonne statut du client
Exit For
End If
Next Ctrl
MsgBox ("Modification effectuée")
End If
Unload UserFormClients
UserFormClients.Show 0
End SubÇa devrait fonctionner
Re,
Autre méthode on ajoute une textbox11 pour récupérer le numéro client quand on utilise ton bouton recherche.
Ensuite on utilise ton code de façon identique mais en utilisant le numéro contenu dans la textbox11.
Nota si cela gène on peut mettre la textbox11 en invisible.
merci infiniment xmenpl et Boulii038
Je n'ai pas réussi à faire fonctionner la solution de Boulii038, quelque chose doit m'échapper.
Cependant la solution de xmenpl fonctionne nickel, j'ai mis un peu de temps avant de trouver les modif de code dans le sub "recherche par société". Il fallait bien remplir cette textbox11.
Du coup j'ai compris le principe de l'index par rapport à la combobox en mode recherche, même si la notion de no-ligne et ligne, m'est encore un peu obscure (j'ai recopié bêtement)
J'ai également modifié le code pour la "recherche par nom" et tout fonctionne nickel.
C'est comme cela qu'on progresse !
Merci encore pour votre temps, je passe le sujet comme résolu