Concaténer les infos de 2 TextBox et l'enregistrer dans le tableau
Bonjour.
En fait j'ai 3 questions.
1) Comment concaténer les infos de 2 TextBox (TextBoxNom et TextBoxPrenom) pour ne faire qu'1 champs (NomPrenom) dans le TableauClients ?
2) rechercher si dans le TableauClients il existe déjà un client du même nom et prénom .
Si oui, Alors je déclenche l'ouverture d'une MsgBox
3) comment inclure dans la phrase d'une MsgBox le champ [NomPrenom] ?
MsgBox ("Le client [NomPrenom] existe déjà à cette adresse :" & vblf &
[Adresse + CP + Ville], vbyesno, "LE CLIENT EXISTE DÉJÀ")
Merci d'avance.
Soyez indulgent, j'ai écrit tout ça depuis mon smartphone. :)
Salut papicx
Qu'est-ce qui est indiqué dans la charte de ce forum
Un fichier joint vaut mieux que trois milliards d'explications
A la revoyure
Bonsoir,
Salut papicx
Qu'est-ce qui est indiqué dans la charte de ce forum
Un fichier joint vaut mieux que trois milliards d'explications
A la revoyure
J'ai juste cliqué sur "Répondre", et une citation aléatoire...
Bruno, si tu ne veux plus participer à l’entraide, cesse d'essayer de donner des "conseils"...
Tout le monde n'a pas la maîtrise que tu "penses" avoir.... Ils ont aussi le droit de poser des questions, sans avoir des réponses "cash"
Mais bon, tu participes, à ton niveau, à l'extinction des forums, au profit de l'IA
A bon entendeur
Bon, allez, on se calme !
C'est vrai qu'avec un fichier joint, c'est plus clair.
Soyez indulgent, j'ai écrit tout ça depuis mon smartphone. :)
Je vous ai fait donc un petit fichier avec ce qu'il faut pour ma demande.
Comme vous pouvez le voir, la mère Denis à 2 motos à la même adresse.
LAFÉE Clochette a 2 domiciles et 2 motos différentes. (hé oui, le monde change... lol )
Si je ne me suis pas planté, les 2 cas devraient pouvoir être pris en compte.
Évidemment, ce tableau a été rempli à la main, c'est pour illustrer ma demande.
Merci à vous d'avance.
Salut le breton
Bruno, si tu ne veux plus participer à l’entraide, cesse d'essayer de donner des "conseils"...
Tout le monde n'a pas la maîtrise que tu "penses" avoir.... Ils ont aussi le droit de poser des questions, sans avoir des réponses "cash"
Mais bon, tu participes, à ton niveau, à l'extinction des forums, au profit de l'IA
A bon entendeur
Si tu crois que mes petites interventions vont y changer quelques choses... tu te mets le doigt dans l'œil jusqu'au coude
Changes tes pensées également, mais tu ne changera pas le monde... citation d'un mec de 1898...
Bonjour papicx
Voici un exemple pour le code du bouton [Ajouter]
' bouton AJOUTER
Private Sub CB_AjouterClient_Click()
Dim ShClt As Worksheet
Dim Lo As ListObject, NewLig As ListRow
Dim NomPrénom As String
' Définir la feuille de travail
Set ShClt = ThisWorkbook.Sheets("Clients")
' Définir le TS de cette feuille
Set Lo = ShClt.ListObjects("TableauClients")
' Concaténer le nom et prénom
NomPrénom = Me.TextBoxNom & " " & Me.TextBoxPrenom
If ClientExiste(Lo, NomPrénom, Me.TextBoxAdresse, Me.TextBoxCP, Me.TextBoxVille) Then
MsgBox "Le client [" & NomPrénom & "] existe déjà !à cette adresse :" & vbLf _
& "[" & Me.TextBoxAdresse & " " & Me.TextBoxCP & " " & Me.TextBoxVille & "]", vbCritical, "LE CLIENT EXISTE DÉJÀ"
Exit Sub
End If
' Sinon on ajoute les infos
Set NewLig = Lo.ListRows.Add
With NewLig
.Range(Lo.ListColumns("NomPrenom").Index).Value = NomPrénom
.Range(Lo.ListColumns("adresse").Index).Value = TextBoxAdresse.Value
.Range(Lo.ListColumns("CP").Index).Value = TextBoxCP.Value
.Range(Lo.ListColumns("Ville").Index).Value = TextBoxVille.Value
.Range(Lo.ListColumns("Moto").Index).Value = ComboBoxMoto.Value
.Range(Lo.ListColumns("Couleur").Index).Value = ComboBoxCouleur.Value
.Range(Lo.ListColumns("Immatriculation").Index).Value = TextBoxImmatriculation.Value
End With
' // Nous pouvons libérer la mémoire des objects inutiles.
Set NewLig = Nothing: Set Lo = Nothing: Set ShClt = Nothing
MsgBox "Le client" & vbCrLf & "" & TextBoxNom & " " & TextBoxPrenom & " " & vbCrLf & "a été ajoutée à la liste des clients.", vbOKOnly + vbInformation, "CONFIRMATION"
End SubEt la fonction ClientExiste() qui va avec, à mettre dans un module
Function ClientExiste(Ts As ListObject, nomClient As String, Adresse As String, CP As Long, Ville As String) As Boolean
Dim LigTs As Long
' Parcours de la première colonne du tableau
For LigTs = 1 To Ts.ListRows.Count
If StrComp(Ts.DataBodyRange(LigTs, 1).Value, nomClient, vbTextCompare) = 0 And _
StrComp(Ts.DataBodyRange(LigTs, 2).Value, Adresse, vbTextCompare) = 0 And _
CStr(Ts.DataBodyRange(LigTs, 3).Value) = CStr(CP) And _
StrComp(Ts.DataBodyRange(LigTs, 4).Value, Ville, vbTextCompare) = 0 Then
ClientExiste = True
Exit Function
End If
Next LigTs
ClientExiste = False
End FunctionCeci dit, je ne sais pas quoi faire si le client existe déjà, pour l'instant je sors du bouton valider
A+
bonjour papicx, JExcel2fr,
c'est assez facile de trouver ses infos :
Sub Filtrage()
Dim c As Range, Arr, b, b2, Nom, Arr2
For Each c In Range("TableauClients[NomPrenom]").Cells
Nom = c.Value
s = Replace("filter(TableauClients[[moto]:[Immatriculation]], TableauClients[NomPrenom]=@1,""Erreur"")", "@1", Chr(34) & Nom & Chr(34)) 'filtrer les infos de ses motos
Arr = Evaluate(s)
If VarType(Arr) = vbString Then
MsgBox "Ce type n'a aucun moto connu", vbInformation, Nom
Else
On Error Resume Next
b = False: b = (UBound(Arr, 2) = 3) 'si la personne a plusieurs motos, le résultat est une matrice 2D
On Error GoTo 0
If Not b Then motos = Application.Index(Arr, 1) Else motos = Join(Application.Transpose(Application.Index(Arr, , 1)), vbLf)
b2 = False
If b Then
s = Replace("unique(filter(TableauClients[[adresse]:[Ville]], TableauClients[NomPrenom]=@1,""Erreur""))", "@1", Chr(34) & Nom & Chr(34)) 'filtrer les infos de ses adresses
Arr2 = Evaluate(s)
On Error Resume Next
b2 = (UBound(Arr2, 2) = 3) 'si la personne a plusieurs motos, le résultat est une matrice 2D
On Error GoTo 0
End If
MsgBox IIf(b, "ces motos sont ", "Son moto est ") & vbLf & motos & IIf(b2, vbLf & vbLf & "attention, sur plusieurs adresses !!!", ""), vbInformation, Nom
End If
Next
End Subre,
avec l'userform maintenant. Attention, dès que le nom et prénom sont connus, l'adresse sera proposée. Alors, on n'a plus qu'à se demander des choses au moment de l'ajoute.
PS. Pour chaque élément dans le userform, vous verrez une propriété "TabIndex" avec un integer, pour le moment assez aléatoire . Modifiez-les d'une manière ascendant, dans la séquence que vous voulez les choisir. Donc vous commencez avec "1" pour le nom, puis c'est normal quand vous utilisez le bouton "TAB" que vous sautez vers le "prénom", donc son "tabindex" sera le "2". De cette manière vous attribuez le 3, 4, ... à 'l'adresse, code postal, ville, modèle, couleur, immatr., Ajouter, Fermer. Comme ça, votre userform sera plus pratique.
Re,
J'aime bien les mecs qui sortent leur science avec des codes que seul eux peuvent comprendre
Ca sert à quoi du coup
cela concerne quel poste ?
Je suppose que la macro du poste de 12:52 s'explique elle-même quand vous la lancez ...
Bonjour à vous deux.
@JExceL2fr
Ceci dit, je ne sais pas quoi faire si le client existe déjà, pour l'instant je sors du bouton valider
Dans les msgBox que j'avais préparées dans le fichier joint, il y avait 2 msgbox imbriquées l'une dans l'autre.
Quand le Client existe, il était demandé s'il voulait faire une nouvelle fiche et affichait l'adresse complète déjà enregistrée,
si OUI, on continuait avec l'adresse existante et là une seconde msgbox proposait soit de fermer le formulaire (NON) car la moto affichée était la bonne (c'est pour faire des devis dans l'étape suivante), soit (OUI) et on enregistrait une moto supplémentaire.
si NON, on continuait en enregistrant une nouvelle adresse on poursuivait en enregistrant une nouvelle moto.
Ceci dit, je n'ai pas réussi à faire que ton fichier fonctionne, même en corrigeant le NomPrénom par NomClient qui semble être la variable commune entre la fonction et le formulaire.
Il enregistre bien un client supplémentaire, mais ne détecte pas ceux déjà existant, et je n'ai pas trouvé pourquoi.
Merci tout de même de m'avoir soumis cette proposition.
@BsAlv,
votre fichier fonctionne et je l'ai complété pour forcer les majuscules.
Je n'ai pas vu le cas où on a un client qui a plusieurs motos, ni même une, à une adresse.
Je pense que le code n'est pas terminé.
merci d'avance
Bonjour,
J'ai un peu amélioré la saisie des nouveaux Clients.
La moto doit être ajoutée obligatoirement,
La couleur n'est pas obligatoire, on est invité à la renseigner ou pas.
idem pour l'immatriculation.
re,
je pensais que j'avais télécharger un fichier ce matin, apparament non. Donc voilà ...
quelle combinaison se pose une problème ?
Bonjour Bart,
Je vous remercie pour cette nouvelle proposition.
Je vais étudier ce fichier et voir pour une nouvelle demande.
En gros, je voudrais éviter la création de doublons (cas de SANTA Klaus par exemple). Mais aussi permettre la création de nouvelle fiche avec une moto différente.
En fait, dans la petite fenêtre qui propose les adresses existantes, d'afficher les motos qui s'y rapportent.
Ssi la moto existe dans les propositions et que l'opérateur est sur le point de créer un doublon, qu'il puisse sortir de la procédure.
J'ai vu dans le codage que une MsgBox existe et afficherait que "ce type n'a aucune moto" .
Je n'ai pas réussi à créer les conditions pour qu'elle s'affiche.
merci d'avance
Ah oui, merci bien, je vais explorer cette fonctionnalité.
Quand j'ai posté le fichier, je l'ai fait un peu "à la va-vite" d'où je n'ai pas correctement mis les TableIndex dans le bon ordre.
en français, c'est comme ça.
Concernant la fenêtre
En fait, dans la petite fenêtre qui propose les adresses existantes, d'afficher les motos qui s'y rapportent.
mettre les motos serait perturbant en fait.
En fait, il faudrait que les adresses s'affichent comme actuellement, c'est très bien. ne change rien.
La suite serait qu'en ayant sélectionné l'adresse, qu'une msgbox s'ouvre pour indiquer qu'il y a 1 ou plusieurs motos et indiquer lesquelles, immatriculation comprise, puis de proposer soit d'ajouter une moto à cette adresse (la msgbox existe dans le fichier) , soit de sortir de la procédure.
J'ai des Client qui ont plusieurs motos du même type et même couleur, la différence est donc l'immatriculation.
Le but étant d'éviter de pouvoir créer un doublon.
Merci bien.
re,
je montre l'information connu pour ce client dans un listbox en haut, autrement on a le msgbox "ce type n'a aucune moto"
la macro "tableau_Unique" supprime les doublons (=les colonnes B:H identiques!)
Bonsoir,
J'ai transposé les codes dans mon fichier excel et la solution proposée ne fonctionne pas.
La listBox ne s'affiche pas quand on saisi un nom et prénom qui existe déjà.
Comme d'hab, j'ai du zappé un truc. Ça fait 2 heures que je cherche et je ne trouve pas.
J'ai copié les codes des modules ( le module1 de la solution est transposé dans le module8 de mon fichier) et, bien sûr,
J'ai fait un copier-coller de la ListBox1 dans mon fichier. Tout semble s'être bien dupliqué.
je ne comprends pas pourquoi ça ne fonctionne pas.
mon fichier
votre solution (j'ai juste ajusté les largeurs des colonnes dans la ListBox)
Merci d'avance
Bonjour à tous,
J'ai trouvé mon erreur ! Enfin !
La nuit porte conseil...
Comme je le supposais, j'avais oublié une ligne qq part.
En fait, pour la trouver, j'ai d'abord mis la ListBox en visible puis en faisant de multiples tests, j'ai vu qu'aucune information ne s'affichaient dedans.
De là, je me suis posé la question de savoir comment était déclenché cette recherche d'adresse.
La ligne manquante se situait juste dans la saisie du prénom, tout à la fin. (logique quoi.
Du coup, j'ai ajouté un commentaire pour le mettre en évidence.
Private Sub TextBoxPrenom_afterupdate()
.../...
' // recherche les adresses en doublon
RechercheAdresse
End SubVoici mon fichier corrigé donc.

