Togglebutton

Y compris Power BI, Power Query et toute autre question en lien avec Excel
f
fabguilb
Jeune membre
Jeune membre
Messages : 33
Inscrit le : 6 décembre 2018
Version d'Excel : 365

Message par fabguilb » 12 février 2019, 17:17

Bonjour,

Dans un userform d'un ficher client, j'ai 2 tooglebutton
Tooglebutton 1 = création (de la fiche client)
Tooglebutton 2 = modifier (la fiche client)

Comment faire lorsque
1/l'on créé la fiche client, pour empecher d'appuyer sur le tooglebutton 2 => obliger la personne à faire clic sur bouton création
2/ l'on modifie la fiche client pour empecher d'appuyer sur le tooglebutton 1 = Obliger la personne à faire clic sur bouton modification


Merci de vos réponses
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'716
Appréciations reçues : 333
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 12 février 2019, 17:27

Bonjour,

à tester,
Private Sub ToggleButton2_Click()
If Not ToggleButton1.Value Then
   MsgBox ("Vous devez dabord ....")
   Exit Sub
Else

'suite de la macro

End If
End If
End Sub
Vive ces nouvelles saisons qui nous colorent.
isabelle
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'882
Appréciations reçues : 182
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 12 février 2019, 17:30

Bonjour Fabguilb, bonjour le forum,

Je ne comprends pas l'intérêt de 2 ToggleButtons dans ton cas. Il sont plutôt utilisés pour faire/défaire comme un interrupteur marche/arrêt.
Soit un seul Togglebutton qui ne fait que créer au premier clic et ne fait que modifier au second.
Soit deux CommandButtons, le premier crée, se désactive et active le second, Le second modifie.
Enfin, c'est comme ça que je verrai les choses...

[Édition]
Bonjour I, nos posts se sont croisés.
1 membre du forum aime ce message.
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
f
fabguilb
Jeune membre
Jeune membre
Messages : 33
Inscrit le : 6 décembre 2018
Version d'Excel : 365

Message par fabguilb » 12 février 2019, 17:42

Merci
f
fabguilb
Jeune membre
Jeune membre
Messages : 33
Inscrit le : 6 décembre 2018
Version d'Excel : 365

Message par fabguilb » 12 février 2019, 18:18

a priori ca bugg
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'910
Appréciations reçues : 693
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 12 février 2019, 18:35

et à posteriori ?  :P :lol:  sérieusement, je crois que tu devrais suivre cette piste : ne pas séparer la création et la modification, dans ce sens précis : on remplit les données d'une fiche client, dont le code client ; puis on regarde si ce code client existe déjà ou non.

* si c'est non, la fiche client n'a pas été déjà créée, donc on en crée une nouvelle en remplissant les champs avec ceux de la fiche de saisie.

* si c'est oui, la fiche client existe déjà, et on va en modifier les champs selon les données de la fiche de saisie.

dit autrement, ça peut être ainsi : tu remplis le formulaire de ta fiche de saisie du client ; si le code client existe déjà dans ta base de données « clients », ça va modifier cette ligne ; sinon, ça va créer une nouvelle ligne ; « ligne » étant un enregistrement de la base de données.

dhany
f
fabguilb
Jeune membre
Jeune membre
Messages : 33
Inscrit le : 6 décembre 2018
Version d'Excel : 365

Message par fabguilb » 12 février 2019, 18:44

Merci Dhany
je comprends ce que tu veux dire..donc je refais mon fichier...d'hier que tu as eu ....
Super
f
fabguilb
Jeune membre
Jeune membre
Messages : 33
Inscrit le : 6 décembre 2018
Version d'Excel : 365

Message par fabguilb » 12 février 2019, 18:59

Bon je ne vois pas comment je fais...
en fait il me faudrait un seul bouton avec choix :
- soit création reponse oui e
- ou soit modification seulement de la fiche si déjà créée ?
Mais je ne sais pas faire
Avatar du membre
dhany
Passionné d'Excel
Passionné d'Excel
Messages : 6'910
Appréciations reçues : 693
Inscrit le : 3 octobre 2017
Version d'Excel : 2007 FR

Message par dhany » 12 février 2019, 23:28

* pour l'instant, ne parlons pas encore de bouton, quel qu'il soit : tu as simplement ton formulaire Client affiché à l'écran.

* imagine ce formulaire Client, avec toutes les infos du Client ; et la 1ère donnée est le Code Client ; si tu as déjà utilisé une Base de Données telle que Access, ce Code Client est la clé primaire, qui doit obligatoirement être unique : un autre client ne peut pas et ne doit pas avoir le même code.

* tu saisis le Code Client, et tu appuies sur la touche Entrée ; là ça va automatiquement chercher ce code dans la colonne "Code Client" de la feuille "Clients" (= ta Base de Données de tous les Clients) ; c'est le résultat de cette recherche qui va déterminer si c'est la création d'une nouvelle fiche (= Ajout d'une fiche Client) ou une Modification (et c'est ce qui évite de mettre 2 boutons différents).

* si la recherche n'a pas trouvé le Code Client : y'a aucune donnée à afficher dans les autres champs (Nom, Prénom, Adresse...) ➯ ils restent vides ; l'utilisateur va saisir les nouvelles données du client, et le bouton OK du formulaire va enregistrer ce nouveau Client : une ligne de plus dans la feuille "Clients", ajoutée sous les données déjà existantes (= mode Création ou Ajout).

* si la recherche a trouvé le Code Client, elle va afficher toutes les données de ce Client dans les autres champs : jusqu'ici, c'est donc idem que si tu avais simplement demandé une consultation de la fiche Client dont tu as saisi le Code Client ; et c'est déjà très bien comme ça vu que ça te permet de faire une Consultation ; maintenant, tu as 2 possibilités :

- tu voulais faire une Consultation, et c'est fait, donc ferme le formulaire, ou saisis un autre Code Client si tu veux consulter une autre fiche Client.

- tu voulais faire une Modification, donc fais tes modifs pour les autres champs, puis un clic sur le bouton OK va faire la Modif (et pas la Création) : ça va remplacer les données déjà existantes par les nouvelles, sur la ligne du Client déjà existante sur la feuille "Clients" ; la ligne n'est pas la 1ère ligne vide sous les données déjà existante (comme c'était le cas pour l'ajout d'une fiche) ; cette fois, la ligne est celle qui a été trouvée par la recherche du Code Client.

attention : selon ce qui précède, note bien que tu ne peux pas modifier le Code Client d'une fiche existante, car ça lance la recherche d'un autre Client pour pouvoir consulter la fiche de cet autre Client ; si tu as besoin de modifier un Code Client, tu ne le feras pas dans le formulaire de saisie Clients mais directement dans la Base de Données, donc sur la feuille "Clients", colonne A ; mais en principe, une fois un Code Client unique déjà attribué, il n'y a pas de raison de le modifier par la suite.

après une Consultation, tu fermes le formulaire en cliquant sur la croix du coin supérieur droit de la fenêtre du formulaire, ou sur le bouton Annuler, ou par appui sur la touche Echap ; le bouton OK sert donc pour valider les infos saisies ; et c'est le code VBA qui fera un Ajout ou une Modif comme ça a été décrit plus haut.

conclusion : soit un seul bouton OK ; soit un bouton OK et un bouton Annuler ; et l'essentiel du mécanisme est ici :
Option Explicit

'la Base de Données est la feuille "Clients", et la colonne A est pour le Code Client ;
'la recherche d'un Code Client se fera donc en colonne A.

Dim lig&

Private Sub UserForm_Initialize()
  lig = 0
End Sub

Private Sub CodeClient_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  'en sortie de la TextBox nommée "CodeClient" :
  '   * si CodeClient est vide, retourner sur le même champ : CodeClient.SetFocus
  '   * sinon, continuer : faire la recherche du CodeClient dans la Base de Données
  '   * si trouvé : affichage des infos, pour Consultation et éventuelle Modif
  '   * si non trouvé : ne rien afficher, mais ce sera une Création (Ajout)
  Dim cel As Range
  'ci-dessous, lig = 0 est obligatoire car s'il y a eu une précédente recherche, il a été affecté ;
  'or lig = 0 permettra de ne rien faire en sub cmdOK_Click() si y'a pas eu de Code Client saisi.
  If CodeClient = "" Then lig = 0: CodeClient.SetFocus: Exit Sub
  Set cel = Worksheets("Clients").Columns(1).Find(CodeClient, , xlValues, xlWhole, xlByRows)
  If cel Is Nothing Then
    'lig = n° dernière ligne utilisée + 1 => c'est la 1ère ligne vide
    lig = Worksheets("Clients").Cells(Rows.Count, 1).End(xlUp).Row + 1
    'aucune info client à afficher ; l'utilisateur devra saisir dans les champs vides
    'toutes les nouvelles données du Client (sauf pour les données facultatives)
  Else
    'lig = n° de la ligne du Code Client trouvé par Find()
    lig = cel.Row
    'ici, ajouter le code VBA pour afficher toutes les infos du Client : copie de
    'la feuille "Clients" (ligne lig), dans les différents champs du formulaire
    '=> c'est ok pour une simple Consultation.
  End If
End Sub

Private Sub cmdOK_Click()
  If lig = 0 Then Exit Sub 'sortie sub si on clique sur OK sans avoir saisi de Code Client,
  'ou si on n'a même pas appuyé sur Entrée quand le curseur de texte était sur CodeClient.
  
  'bouton OK qui valide les infos présentes dans les champs du formulaire, donc
  'ajouter ici le code pour écrire les infos du formulaire sur la ligne lig
  '(valeur de lig selon la sub ci-dessus) ; c'est pour cela que la variable
  'lig est déclarée en début de module.
End Sub

'uniquement si tu ajoutes un bouton Annuler :

Private Sub cmdAnnuler_Click()
  Unload Me 'ferme le formulaire
End Sub
dhany
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message