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

Bonjour à vous deux,

Le problème dans vos codes, c’est qu’a aucun moment le combobox Nom complet et initialisé avec les noms et prénoms
Et je dis bien avec le prénom, car si je recherche le nom THERIEUR, il y a Alain et Alex, donc il faut pouvoir les distinguer

morceau à mettre dans l’userform initialise

With Me.CBox_NomComplet 'Procédure de remplissage du Combobox NomComplet
      .ColumnCount = 2 'qui contient 2 colonnes
      .ColumnWidths = "-1;-1" 'Attribue la largeur (égale)
      CBox_NomComplet.List = f.Range("B3:C" & f.Range("B" & Rows.Count).End(xlUp).Row).Value 'Remplissage du Combobox NomComplet
    End With    

Macro à ajouter pour éviter l’ajout de doublons entre nom et prenom

Private Sub TBox_Prenom_AfterUpdate()

  'Vérification si le Nom & Prénom existe déjà ou pas
  With Feuil1
    Set PlageNom = .Range(.Cells(3, 2), .Cells(.Rows.Count, 2).End(xlUp))
    Set PlagePrenom = .Range(.Cells(3, 3), .Cells(.Rows.Count, 3).End(xlUp))
  End With
  
  'boucle la plage de la feuille "Compte" et cherche chaque valeur
  'en correspondance exacte dans la plage de la feuille "Source"
    For Each Cel In PlageNom
      If UCase(Cel.Value) = UCase(Me.TBox_Nom) And UCase(Cel.Offset(0, 1).Value) = UCase(Me.TBox_Prenom) Then
        Beep
        MsgBox "Attention, le client '" & Cel.Value & " " & Cel.Offset(0, 1).Value & "' est déjà dans la base !"
        Feuil1.Activate
        Me.TBox_Nom = ""
        Me.TBox_Prenom = ""
        Me.TBox_Nom.SetFocus
      End If
    Next Cel
    'Modifie le texte avec la première lettre en Maj
    Me.TBox_Prenom = Application.Proper(Me.TBox_Prenom)
    
End Sub

Re, @Mimimathy

Bonjour

J’ais bien mis le code que vous nous donnez dans l’userform initialise

et j’ais le code erreur variable non définie pour la lettre f

et lorsque je définie la variable j’ais une autre erreur

Cdlt

@kiss6

Re,

Eh bien il suffit de définir la variable “f”
Dim f As Worksheet :wink:

et de l’initialiser
Set f = Feuil1 'Attribue à f le nom de la feuille

Re,

j’ais quand même une erreur

variable%20objet%20

et en suite celle ci

USFClients

Cdlt

@kiss6

Re,

Place plutôt ton classeur plutôt que des images :thinking:

Re,

Ok voici le classeur c’est celui de @mdo100

Exercice N° 3 Partie Ajouter.xlsm (1,6 Mo)

Cdlt

@kiss6

Re

Si tu initialises pas la variable “f” à la feuille :stuck_out_tongue_winking_eye:

Pourtant je le précise dans mon dernier post

Re,

Eh bien il suffit de définir la variable “f”
Dim f As Worksheet :wink:

et de l’initialiser
Set f = Feuil1 'Attribue à f le nom de la feuille

Set f = Feuil1 'Attribue à f le nom de la feuille
    With Me.CBox_NomComplet 'Procédure de remplissage du Combobox NomComplet
      .ColumnCount = 2 'qui contient 2 colonnes
      .ColumnWidths = "-1;-1" 'Attribue la largeur (égale)
      CBox_NomComplet.List = f.Range("B3:C" & f.Range("B" & Rows.Count).End(xlUp).Row).Value 'Remplissage du Combobox NomComplet
    End With

Salut @Mimimathy, @kiss6, :wink:

Bon dimanche à vous deux.

@Mimimathy, merci pour la solution des doublons et l’initialisation, ça fonctionne maintenant pour les modifications d’une où plusieurs lignes.

Je m’attarderai maintenant pour la suppression d’une ligne a moins que @kiss6 ne trouve avant. .

@kiss6, si tu regarde bien dans mon classeur tu verras que j’ai déjà déclaré la variable de la feuille.

Dim FClients As Worksheet

et n’oublie pas de déclarer les variable "cel, PlagePrenom, PlageNom’ de type Range pour que cela fonctionne.

@+

Re,

Moi de mon coté rien ne marche

le mieux c’est que je vous laisse faire car je n’ais pas acer suivi et c’est trop compliquer pour moi

Re @kiss6,

Ne baisse pas les bras, c’est pas marrant pour moi de me retrouver seul a vouloir évoluer en VBA et @Mimimathy, nous aider lorsque nous rencontrons une difficulté.

Je te joins le fichier avec les dernières modifs:

Quand tu choisis l’option “Modifier” tu pourras alors modifier les lignes que tu veux.

Fichier ICI==> Exercice N° 3 Partie Ajouter Vy2.xlsm (1,2 Mo)

@+

Salut MDO :ok_hand:

Donc, il te reste la Suppression, si tu t’aides de ta variable “Modif” pour les modifications, tu as donc le N° de la ligne, il ne reste plus qu’à faire sa suppression :wink:

Pour Kiss, MDO à raison, faut pas baisser les bras, le dernier classeur de MDO est fonctionnel alors part sur cette base

Re @Mimimathy, @kiss6,

Voici ma modif pour la suppression d’une ligne:
J’ai choisi de déclarer une nouvelle variable “Sup%” afin de m’y retrouver.

Le code:

If Btn_Validation.Caption = "Supprimer" Then 'Si le bouton s'appel Supprimer alors
 'Message avant suppression d'un Client
 If MsgBox("Confirmez-vous la suppression de ce Client ?", vbYesNo, "Demande de confirmation de suppression Client") = vbNo Then
 Me.Cbox_Civilite.SetFocus
 Exit Sub
 Else
  Sup = Me.CBox_NomComplet.ListIndex + 3
  'Vide les ComboBox et les TextBox
  For Each Ctrl In Me.Controls
   If TypeName(Ctrl) = "ComboBox" Then Ctrl.Text = ""
   If TypeName(Ctrl) = "TextBox" Then Ctrl.Text = ""
  Next Ctrl
    'Mettre dans la ligne concern?e la valeur vide
    .Cells(Sup, 1) = Me.Cbox_Civilite.Value
    .Cells(Sup, 2) = Me.TBox_Nom.Value
    .Cells(Sup, 3) = Me.TBox_Prenom.Value
    .Cells(Sup, 4) = Me.TBox_DNais.Value
    .Cells(Sup, 5) = Me.TBox_Adresse.Value
    .Cells(Sup, 6) = Me.TBox_CP.Value
    .Cells(Sup, 7) = Me.TBox_Ville.Value
    .Cells(Sup, 8) = Me.TBox_TelFixe.Value
    .Cells(Sup, 9) = Me.TBox_TelPort.Value
    .Cells(Sup, 10) = Me.TBox_Mail.Value
    'Supprime les lignes vides a partir de la colonne 1
    Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
 End If
 End If

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

Maintenant @Mimimathy, comment créer une banque d’image sur une nouvelle feuille que je nommerais “Photo”, j’avoue que je ne sais pas trop comment m’y prendre afin qu’elles aient toutes la même dimension.

Bien sûr il faudra que je modifie encore le code afin d’y associer la photo pour chaque nom et je crois qu’il faut utiliser “Shape”.

Re,

Bon MDO à trouver une solution pour Supprimer

Donc je place dans un lien, le classeur (comme je l’ai créé) avec un dossier contenant des images des clients

Explorer un peu le code afin de voir les erreurs et amélioration que vous pourriez faire en établissant une macro pour la suppression des données dans tous les Textbox et ComboBox, et voir aussi l’ajout d’une fonction pour vérifier la validité d’une adresse Mail

Maintenant, il faut quand vous êtes en Modification ou Suppression, que le contrôle IMAGE affiche l’image correspondante au client
et
Si vous êtes plus balaise, l’afficher sur la feuille CLIENTS quand depuis cette feuille vous cliquez sur sa ligne
https://mon-partage.fr/f/3ZmQ2zkt/

Salut @Mimimathy, :wink:

Ça y est, j’y suis parvenu :yum:. Alors voilà comment j’ai fais:

J’ai nommé mon fichier image " Identité "
J’ai nommé une variable

Dim Identité$

Dans

Private Sub CBox_NomComplet_Click()

J’ai mis ce code:

Identité = ("C:\Users\mdo100\Desktop\Exercice\Exercice N° 3 P3\Avec Images\Identité\")
   
   If Dir(Identité & "\" & Me.TBox_Nom & " " & Me.TBox_Prenom & ".jpg") <> "" Then
      Me.Photo.Picture = LoadPicture(Identité & "\" & Me.TBox_Nom & " " & Me.TBox_Prenom & ".jpg")
   Else
     Me.Photo.Picture = LoadPicture
   End If

Puis dans:

Private Sub OptB_Ajouter_Click()
Private Sub OptB_Modifier_Click()
Private Sub OptB_Supprimer_Click()

J’ai ajouté cette condition pour effacer l’image à chaque clique.

Me.Photo.Picture = LoadPicture 'Vide la photo

Je ne peux pas mettre le fichier, car à la place de mdo100, il y a mon vrai nom de famille.

Mais comme tu le vois dans le code, j’ai rusé encore une fois, car je n’ais pas utilisé " Me.CBox_NomComplet " mais les 2 TexstBox " Me.TBox_Nom & " " & Me.TBox_Prenom "

Peut-être me donneras-tu une solution pus simple ?

Amicalement.

Salut MDO,

Je commençais à perdre espoir, :thinking: Pas de réponse (bon je veux bien que là si tu « farfouilles pas » tu trouves pas)

Alors une astuce, au lieu de mettre :

Mettre:

Identité =ThisWorkbook.path & "\Identité"

Explication:
ThisWorkBook.Path est le chemin où se trouve ton classeur Excel sur lequel tu travailles
si tu rajoutes le chemin où se trouve le dossier contenant les images sans oublier les "\" au début et à la fin
tu auras un chemin identique, et surtout, sur n’importe quel PC

Mais tu as bien bossé
J’attend ton final avec la correction sur la macro depuis mes indications.

Et là, il y a une récompense (un EXCEL sans formule, tout en VBA, pour vos RdV et/ ou Fêtes - Anniv utilisable de 1900 à 2100 ( Après, je ne serai plus là pour les modifs. ) :cold_face:

Re @Mimimathy,

Faut pas perdre espoir, déjà que @kiss6 m’a lâché en rase campagne. :face_with_raised_eyebrow:

Voici le final avec tes macros.
https://www.cjoint.com/c/HJdlE0Ak8bu

Prends soin de toi :woozy_face:

Amicalement.

Re,

Bonsoir @Mimimathy , @mdo100

Non @mdo100 je ne vous est pas lâché c’est que la semaine je n’ais pas le temps :wink:

mais beau travail @mdo100 je ne pense pas que j’en aurais pas fait autant encore :clap: :clap: :clap:

@Mimimathy pour la récompense vous auriez pu prévoir le :champagne: :champagne: :champagne:

car avec le travail fourni il le mérite bien :wink:

sur ce je vais me coucher demain je me lève tôt

Bonne nuit a vous deux et si @mdo100 n’a pas tout fini j’essaierais de venir lui prêter main forte ce Week-

End :wink:

Cdlt

@kiss6

Salut @Mimimathy, @kiss6, :wink:

Merci pour ta solution et merci pour le calendrier agenda.

Re,

Bonsoir @Mimimathy , @mdo100

Toute mes ficelles de caleçon @mdo100 :wink: très beau travail

C’est dommage que les exercices de @Mimimathy arrive au moment ou je ne suis pas libre c’est la faute

a pas de chance

@Mimimathy j’ais télécharger votre calendrier mais je n’ais pas l’userform lorsque je double clic sur les

cellules des jours fériés c’est voulue ou pas

:champagne: :champagne: :champagne: pour @mdo100 et la récompense bien mérité

Cdlt

@kiss6

Bonjour Kiss
Il y a du avoir un bug dans la transmission.

Tu sélectionnes toutes les colonnes de A à AK par exemple et tu les supprimes

En suite, tu tapes l’année voulue en A1 et cela doit repartir