Exercice N° 3 - Partie 3 (Ajouter depuis un USF)

Re,

Ce que j’ais rajouter pour que toutes les lettres de TBox_Nom soit en MAJUSCULE

Private Sub TBox_Nom_Change()
TBox_Nom = UCase(TBox_Nom)
End Sub

Cdlt

@kiss6

Re,

Déjà mieux

peut-être rajouter (ce n’est pas obligatoire si c’est un fichier perso) mais si c’est pour des versions Excel antétieure, il ne reconnait pas le “UCase” d’où le fair de mettre " VBA.UCase (blabla)" qui sera reconnu
j’ai déjà eu ce piège :wink:

Bien vérifier que les nom des contrôles correspondent à leurs actions (je crois que le bouton de validation…)
ensuite vérifier que les données ailles sur la bonne feuille

Bonjour tout le monde les gens,
Salut @Mimimathy, @kiss6, :wink:

@kiss6 et bien dit donc, c’est la forme aujourd’hui :clap:

Du coup j’ai avancé de mon côté aussi.

@Mimimathy, j’ai des difficultés pour le ComboBox Civilité, j’ai mis un range A3:A500 mais je sais qu’il faudrait que j’utilise Dl, seulement j’y arrive pas !
Autre chose qui me bloque c’est la date de naissance valide “pas supérieur à la date du jour”
Je pense qu’il faut que je mette une condition If TBox_DNais >= aujourd’hui Then “Erreur de saisie” mais je n’arrive pas a l’exprimer.

@Mimimathy, En attendant regarde si ce qui ai déjà fait correspond au cahier des charges avant que je m’enfonce dans des erreurs trop graves.

Le code:

Option Explicit
'D?claration des variables pour tout le module
Dim Lig%, Dl%
Dim Espace$
Dim Slash As Byte
Dim Civ As Range
Private Sub Btn_Quitter_Click()
  'Ferme l'USF
  Unload Me
End Sub
Private Sub Cbox_Civilite_Change() 'S?lection civilit?
    '?criture en nom propre
    Cbox_Civilite = Application.Proper(Cbox_Civilite.Value)
End Sub

Private Sub TBox_Nom_Change() 'S?lection NOM
    '?criture en majuscule
    TBox_Nom.Value = UCase(TBox_Nom.Value)
End Sub
Private Sub TBox_Prenom_Change() 'S?lection Pr?nom
    '?criture en nom propre
    TBox_Prenom.Value = Application.Proper(TBox_Prenom.Value)
End Sub
Private Sub TBox_DNais_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection N? le
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
     KeyAscii = 0
    End If
End Sub
Private Sub TBox_DNais_Change() 'S?lection N? le
    'Mettre un Slash de s?paration style 01/01/2018
    Slash = Len(TBox_DNais)
     If Slash = 2 Or Slash = 5 Then TBox_DNais = TBox_DNais & "/"
End Sub

Private Sub TBox_Adresse_Change() 'S?lection adresse
    '?criture en nom propre
    TBox_Adresse.Value = Application.Proper(TBox_Adresse.Value)
End Sub
Private Sub TBox_CP_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection code postale
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
     KeyAscii = 0
    End If
End Sub
Private Sub TBox_Ville_Change() 'S?lection Ville
    '?criture en majuscule
    TBox_Ville.Value = UCase(TBox_Ville.Value)
End Sub
Private Sub TBox_TelFixe_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection t?l?phone fixe
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
     KeyAscii = 0
    End If
End Sub
Private Sub TBox_TelFixe_Change() 'Mettre un espace tout les 2 chiffres
    Espace = TBox_TelFixe.Text
    Select Case Len(Espace)
    Case 2, 5, 8, 11
    Espace = Espace & " "
    End Select
    TBox_TelFixe.Text = Espace
End Sub
Private Sub TBox_TelPort_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection t?l?phone portable
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then
     KeyAscii = 0
    End If
End Sub
Private Sub TBox_TelPort_Change() 'Mettre un espace tout les 2 chiffres
    Espace = TBox_TelPort.Text
    Select Case Len(Espace)
    Case 2, 5, 8, 11
    Espace = Espace & " "
    End Select
    TBox_TelPort.Text = Espace
End Sub
Private Sub TBox_Mail_Change() 'S?lection mail
    '?criture en minuscule
    TBox_Mail.Value = LCase(TBox_Mail.Value)
End Sub


Private Sub UserForm_Initialize()

  'Liste Civilit? sans doublon
  With Cbox_Civilite
   .Value = ""
   For Each Civ In Worksheets("Clients").Range("A3:A500")
     Me.Cbox_Civilite = Civ
      If Me.Cbox_Civilite.ListIndex = -1 Then Me.Cbox_Civilite.AddItem Civ
    Next Civ
  End With
    
  'Max 5 chiffres dans code postale
  With TBox_CP
   .MaxLength = 5
   .Value = ""
  End With
  'Max 10 chiffres dans t?l?phone fixe + 4 espaces
  With TBox_TelFixe
  .MaxLength = 14
  .Value = ""
  End With
  'Max 10 chiffres dans t?l?phone portable + 4 espaces
  With TBox_TelPort
  .MaxLength = 14
  .Value = ""
  End With
  'Max 8 chiffres dans N? le + 2 Slashs
  With TBox_DNais
  .MaxLength = 10
  .Value = ""
  End With
End Sub

Private Sub Btn_Validation_Click() 'Appui sur le bouton Ajouter
 With Feuil1 'Dans la feuille Clients
  '?crire les donn?es dans la derni?re ligne non vide ? partir de la colonne A
  Dl = Range("A" & Rows.Count).End(xlUp).Row + 1
  
   .Cells(Dl, 1).Value = Me.Cbox_Civilite.Value
   .Cells(Dl, 2).Value = Me.TBox_Nom.Value
   .Cells(Dl, 3).Value = Me.TBox_Prenom.Value
   .Cells(Dl, 4).Value = Me.TBox_DNais.Value
   .Cells(Dl, 5).Value = Me.TBox_Adresse.Value
   .Cells(Dl, 6).Value = Me.TBox_CP.Value
   .Cells(Dl, 7).Value = Me.TBox_Ville.Value
   .Cells(Dl, 8).Value = Me.TBox_TelFixe.Value
   .Cells(Dl, 9).Value = Me.TBox_TelPort.Value
   .Cells(Dl, 10).Value = Me.TBox_Mail.Value
   
 End With
End Sub

Le fichier: Exercice N° 3 Partie Ajouter VEssai.xlsm (1,2 Mo)

@+ et bon dimanche à toutes et tous.

1 J'aime

Re,

Bonjour @mdo100

Je vient de regarder votre classeur chapeau @Mimimathy avait raison lorsqu’il disait que c’la seras du gâteau

pour vous il avais raison :clap:

Ce que je ne comprend pas c’est le combobox votre choix a quoi c’la sert

Cdlt

@kiss6

Re,

Kiss à raison sur ce point, il avait déjà une partie sur le fichier qui a aidé, mais le fichier ne fait que AJOUTER.
C’est pour cette raison qu’il y a le Combobox Votre Choix, qui, dans la prochaine demande sera invisible quand on Ajoute, et visible pour la Modification ou la Suppression, avec l’utilisation des boutons d’options.

AH AH, il est pas fini celui là, mais je vous ferai cadeau de certaines macro, trop trop Hard.

Salut MDO

Bon, c’est plus que bien:
Alors pour le CBox_Civilité

'Liste Civilité sans doublon
  With Cbox_Civilite
   .Value = ""
   For Each Civ In Worksheets("Clients").Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row) 'au lieu de mettre 500, tu remplaces comme pour trouver la Dl
     Me.Cbox_Civilite = Civ
      If Me.Cbox_Civilite.ListIndex = -1 Then Me.Cbox_Civilite.AddItem Civ
    Next Civ
  End With
  Me.Cbox_Civilite.ListIndex = -1 'Pour mettre le Combo au début càd vide

Pour la Date de Naissance, il y a deux choses à voir pour être propre
1 - Que la date ne soit pas supérieure à la date du jour

assez simple avec une condition IF sur une autre macro de sortie TBox_DNais_Exit par exemple
qui envoi un message si la date de la TextBox est sup a la date du jour

2 - Vérifier que la date soit correcte

ex: 30/02/2018 if not exist…
que l’on peut mettre dans cette même macro

Re @kiss6, :wink:

Je suis parti avec un avantage, car j’avais déjà une petite expérience et j’en avais fait part ICI: Exercice N° 3- Partie 1 (Création Userfom ) avec un fichier dans ma première réponse.

Donc je n’ai que peu de mérite et détrompe-toi, ce n’ai pas du gâteau pour moi, car comme je connais pas où peu les instructions en VBA, il faut constamment que je fasse des recherches, la galère quoi et comme je parle Anglais comme une vache Espagnole, j’te raconte même pas la double galère.

Mais ses Exercices, me permettent au fur et à mesure de mémoriser les instructions, bien que ma matière grise soit pleine de trous.

Pour le moment, je n’ais pas utiliser le ComboBox “CBox_NomComplet” en face du Label “Votre Choix”, celui-ci servira plus tard pour faire les recherches avec le Nom et Prénom afin de modifier et où de supprimer des lignes dans la feuille “Clients”.

Je n’en suis pas là ! En attendant, c’est cool de travailler à plusieurs, ça permet d’avancer bien que je n’ai pas encore pris le temps de voir ce que tu avais fait, surtout pour les Msgbox ou tu es très fort. :muscle:

Bon je vais regarder la réponse que @Mimimathy m’a fait, afin de voir ce qui ne va pas avec mon fichier.

@+

Re @Mimimathy,

Petit problème encore avec “CBox_Civilité”

'Liste Civilité sans doublon
  With Cbox_Civilite
   
   For Each Civ In Worksheets("Clients") _
   .Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row)
     Me.Cbox_Civilite = Civ
      If Me.Cbox_Civilite.ListIndex = -1 Then Me.Cbox_Civilite.AddItem Civ
    Next Civ
  End With
     Me.Cbox_Civilite.ListIndex = -1 

Voila ce que j’obtiens !

Capture

Ça ne me décompte pas les 2 premières lignes de la colonne “A”

@+

Re,

@Mimimathy pourriez-vous m’expliquez ou nous expliquer pourquoi dans le

Private Sub TBox_DNais_Change() de @mdo100 il n’y a pas de End if et que c’la fonctionne sans

alerte de débogage

Private Sub TBox_DNais_Change() 'Sélection Né le
'Mettre un Slash de séparation style 01/01/2018
Slash = Len(TBox_DNais)
If Slash = 2 Or Slash = 5 Then TBox_DNais = TBox_DNais & “/”
End Sub

Cdlt

@kiss6

Re MDO
remplace le -1 par 0

Re Kiss

dans son IF il met la suite du THEN à la suite, donc pas de End If

1 J'aime

@kiss6,

Il s’agit de la continuité de la formule après le Then.

Par exemple si tu écris le code comme ça, il faudra le End If à la fin

Private Sub TBox_DNais_Change() 'Sélection Né le
'Mettre un Slash de séparation style 01/01/2018
Slash = Len(TBox_DNais)
If Slash = 2 Or Slash = 5 Then 
TBox_DNais = TBox_DNais & “/”
End If
End Sub

Re,

Et bien il est vraiment caller ce @mdo100 car ca il faut le savoir et surtout le comprendre

Cdlt

@kiss6

Re,

Ok @mdo100 mais quand on ne le sais pas c’est pour ca que j’ais du mal a vous suivre dans vos dialogue

car vous vous comprenez c’la prouve bien la différence de niveau :exploding_head:

cdlt

@kiss6

Re,

C’est pareil pour cette citation

TBox_DNais = TBox_DNais &amp ;"/"

ce amp ou l’avez-vous trouver et Quesque c’la veut dire tous ca il faut le savoir

Alors lorsque vous dite @mdo100 que votre matière grise est troué alors la mienne c’est un tamis pour

agrégats

cdlt

@kiss6

@kiss6,

amp n’existe pas, c’est du a un mauvais copier / coller quand j’ai répondu.

Il faut lire:

Private Sub TBox_DNais_Change() 'S?lection N? le
    'Mettre un Slash de s?paration style 01/01/2018
    Slash = Len(TBox_DNais)
     If Slash = 2 Or Slash = 5 Then
     TBox_DNais = TBox_DNais & "/"
     End If
End Sub

@+

Salut @Mimimathy, @kiss6, :wink:

@Mimimathy,
Ça y est enfin, ma liste sans doublon dans “Cbox_Civilite” de la feuille “Clients” fonctionne.
En fait cela venait de la priorité dans “Private Sub Btn_USF_Click()” j’appelais en premier “USFClients.Show 0” et aprés “Sheets(“Clients”).Activate”

Il fallait faire l’inverse:

'Appel formulaire Nouveau Client
Private Sub Btn_USF_Click()
Sheets("Clients").Activate
USFClients.Show 0
End Sub

Une bonne nuit de repos a éclairée un nouveau jour de réflexion, voilà ce post, était juste pour partager cette bonne nouvelle. :yum:

Maintenant, je vais voir pour “TBox_DNais”, mais ça va pas être de la tarte.

@+

1 J'aime

Salut le “futur PRO” du VBA

Cela me réconforte de voir des inscrits comme toi, Kiss, Nono, de suivre les exercices, plutôt pas pour du débutant, mais comme dans les solutions, il y a quand même pas mal de commentaires pour suivre avec plusieurs façons de procéder, j’aurais pensé que les autres inscrits qui demandait des formations VBA serait de la partie,
Apparemment, il n’ont plus de PC, ou sont en hibernations :wink:

C’est vrai que la difference entre EXCEL pur et VBA n’est pas systématique, mais si tu as de bonne connaissance en EXCEL, le VBA au bout d’un moment coule tout seul.
Je ne suis pas un Pro, moi non plus, mais quand on veut aboutir à la solution, GOOGLE est bien fourni, le but après est de bien comprendre le pourquoi du comment avec tel ou tel fonction, et surtout penser à la progression du programme. Sur Excel, tu ajoutes des colonnes ou lignes pour aboutir au résultat, en VBA, il faut pouvoir justement mettre des conditions sur chaque condition pour obtenir le bon résultat, qui entraine des autres conditions, d’où le fait de créer un cahier des charges avec les ouvertures et fermetures :wink:

1 J'aime

Re,

Bonjour @Mimimathy , @mdo100

Excuser moi mais je ne comprend pas ce que @mdo100 a posté

Il faut mettre dans le code VBA de la “Cbox_Civilite”

Mais il y a déjà un code VBA ou faut-il le mettre en dessous :thinking:

Cdlt

@kiss6

Salut @kiss6, :wink:

Dans la feuille “Accueil” commande des 2 boutons

'Appel liste des Clients
Private Sub Btn_Clients_Click()
Sheets("Clients").Activate
End Sub

'Appel formulaire Nouveau Client
Private Sub Btn_USF_Click()
Sheets("Clients").Activate
USFClients.Show 0
End Sub

Dans la feuille “Clients” commande du bouton

'Appel la page d'accueil
Private Sub Btn_Accueil_Click()
'Page d'accueil appel?e
Sheets("Accueil").Activate
End Sub

Le code de USFClients

Option Explicit
'D?claration des variables pour tout le module
Dim Lig%, Dl%, i%
Dim Espace$
Dim Slash As Byte
Dim Civ As Range
Private Sub Btn_Quitter_Click()
  'Ferme l'USF
  Unload Me
End Sub
Private Sub Cbox_Civilite_Change() 'S?lection civilit?
    '?criture en nom propre
    Cbox_Civilite = Application.Proper(Cbox_Civilite.Value)
End Sub
Private Sub TBox_Nom_Change() 'S?lection NOM
    '?criture en majuscule
    TBox_Nom.Value = UCase(TBox_Nom.Value)
End Sub
Private Sub TBox_Prenom_Change() 'S?lection Pr?nom
    '?criture en nom propre
    TBox_Prenom.Value = Application.Proper(TBox_Prenom.Value)
End Sub
Private Sub TBox_DNais_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection N? le
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Private Sub TBox_DNais_Change() 'S?lection N? le
    'Mettre un Slash de s?paration style 01/01/2018
    Slash = Len(TBox_DNais)
     If Slash = 2 Or Slash = 5 Then TBox_DNais = TBox_DNais & "/"
End Sub

Private Sub TBox_Adresse_Change() 'S?lection adresse
    '?criture en nom propre
    TBox_Adresse.Value = Application.Proper(TBox_Adresse.Value)
End Sub
Private Sub TBox_CP_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection code postale
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Private Sub TBox_Ville_Change() 'S?lection Ville
    '?criture en majuscule
    TBox_Ville.Value = UCase(TBox_Ville.Value)
End Sub
Private Sub TBox_TelFixe_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection t?l?phone fixe
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Private Sub TBox_TelFixe_Change() 'Mettre un espace tout les 2 chiffres
    Espace = TBox_TelFixe.Text
    Select Case Len(Espace)
    Case 2, 5, 8, 11
    Espace = Espace & " "
    End Select
    TBox_TelFixe.Text = Espace
End Sub
Private Sub TBox_TelPort_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'S?lection t?l?phone portable
    'Uniquement des chiffres
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
Private Sub TBox_TelPort_Change() 'Mettre un espace tout les 2 chiffres
    Espace = TBox_TelPort.Text
    Select Case Len(Espace)
    Case 2, 5, 8, 11
    Espace = Espace & " "
    End Select
    TBox_TelPort.Text = Espace
End Sub
Private Sub TBox_Mail_Change() 'S?lection mail
    '?criture en minuscule
    TBox_Mail.Value = LCase(TBox_Mail.Value)
End Sub


Private Sub UserForm_Initialize()
  
  'Liste sans doublons colonne A
  
   For Each Civ In Worksheets("Clients") _
   .Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row)
     Me.Cbox_Civilite = Civ
      If Me.Cbox_Civilite.ListIndex = -1 Then Me.Cbox_Civilite.AddItem Civ
    Next Civ
  
  Me.Cbox_Civilite.ListIndex = -1 'Pour mettre le Combo au d?but c?d vide
     
  'Max 5 chiffres dans code postale
  With TBox_CP
   .MaxLength = 5
   .Value = ""
  End With
  'Max 10 chiffres dans t?l?phone fixe + 4 espaces
  With TBox_TelFixe
  .MaxLength = 14
  .Value = ""
  End With
  'Max 10 chiffres dans t?l?phone portable + 4 espaces
  With TBox_TelPort
  .MaxLength = 14
  .Value = ""
  End With
  'Max 8 chiffres dans N? le + 2 Slashs
  With TBox_DNais
  .MaxLength = 10
  .Value = ""
  End With
End Sub

Private Sub Btn_Validation_Click() 'Appui sur le bouton Ajouter
 With Feuil1 'Dans la feuille Clients
  '?crire les donn?es dans la derni?re ligne non vide ? partir de la colonne A
  Dl = Range("A" & Rows.Count).End(xlUp).Row + 1
  
   .Cells(Dl, 1).Value = Me.Cbox_Civilite.Value
   .Cells(Dl, 2).Value = Me.TBox_Nom.Value
   .Cells(Dl, 3).Value = Me.TBox_Prenom.Value
   .Cells(Dl, 4).Value = Me.TBox_DNais.Value
   .Cells(Dl, 5).Value = Me.TBox_Adresse.Value
   .Cells(Dl, 6).Value = Me.TBox_CP.Value
   .Cells(Dl, 7).Value = Me.TBox_Ville.Value
   .Cells(Dl, 8).Value = Me.TBox_TelFixe.Value
   .Cells(Dl, 9).Value = Me.TBox_TelPort.Value
   .Cells(Dl, 10).Value = Me.TBox_Mail.Value
   
 'Ferme l'USF
  Unload Me
 End With
End Sub

Voila ou j’en suis actuellement, je n’ais pas fait grand chose depuis ce matin.

@+

Bonjour Kiss
Une macro, tu là place ou tu veux dans un module, dessus dessous, n’a rien à voir, c’est l’instruction première qui compte

la cette macro sert à ouvrir un USF, activer la feuille Clients et ouvrir l’userform :wink: