Userform excel

Résolu
Gourbi -  
 gourbi -
Bonjour,
J'ai de grande lacune en VBA, je cherche à mettre en place un fichier excel pour la gestion de demande de câblage avec une saisie depuis un formulaire.
Le but à travers ce formulaire, une foi toutes les cellules renseignées on doit retrouver les données dans la feuille "BD" (base de données).

Les listes déroulantes sont alimentées par la feuille "Param", se sont des données fixes.

Les CheckBox (case à cocher) doivent s'enregistrer dans le fichier "BD" dans les cellules appropriées.

Les boutons
- Nouvelle demande
- Enregistrer un nouveau dossier
- Sélecteur de dossier
- Modifier un dossier non terminé
- Recherche multi critères
- Imprimer la feuille
- Quitter "fermeture du formulaire"

La partie modélisation formulaire ne pose pas de problème, mais le VBA par contre elle un véritable enfer quand on ne maitrise pas.

Si une personne pouvait m'aider cela serait merveilleux, par avance merci.

10 réponses

Résumé de la discussion

L'interface VBA d'un formulaire UserForm dans Excel sert à saisir des demandes de câblage et à enregistrer les données dans la feuille BD, avec des listes déroulantes alimentées par la feuille Param et des CheckBox. Pour le volet recherche multi critères, la solution recommandée repose sur une boucle qui passe en revue les boutons d'option et utilise la propriété Tag pour assigner la colonne correspondante dans BD. Il faut ajuster les Tags des OptionsButton pour les colonnes, optimiser la vérification des saisies et le formatage monétaire afin d'éviter les blocages, et prévoir des tests pour éviter l'enregistrement quand certains champs restent vides.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Avant toutes choses, nous avons besoin du classeur avec l'UserForm tel que tu l'as conçu, sans données confidentielles...

    Pour joindre un fichier sur les forums de ccm il faut :
    > se rendre sur le site : https://www.cjoint.com/
    > cliquer sur "Parcourir"
    > rechercher le fichier
    > cliquer sur "Ouvrir"
    > cliquer sur "Créer le lien Cjoint"
    > copier le lien
    > revenir ici le coller dans une réponse

    0
    1. Gourbi
       
      Bonjour,
      Merci pour la réponse, je met le lien du fichier:
      http://www.cjoint.com/c/FHlhzaWyxrH
      Merci pour votre aide
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    On va y aller par étapes.
    Commençons par le remplissage des listes déroulantes.
    Pour les listes Site et Sociétés pas de souci, elles sont remplies des données de la feuille Param, col A et C.

    Mais comment remplir les autres listes?
    Chef de projet, validation, SFT, GDP, Etat????
    0
    1. Gourbi
       
      Bonjour pijaku,

      Merci pour ta réponse, les explications:
      CDP dans le formulaire donne le choix de sélection du Chef de Projet (CDP) de la cellule G de la feuille Param.
      Validation = choix "Oui ou Non"
      Société = choix " presta1, presta2, presta3, presta4"
      SFT = choix "Ok ou Ko"
      Etat = choix "Oui ou Non"
      GDP = choix "Oui ou Non"
      Etat = Choix "En cours, Reporté, Terminé
      0
  3. Gourbi
     
    Petit oubli, Etat = choix "Oui ou Non" (supprimer)
    Priorité = (1 urgent, 2 Assez urgent, 3 normal)
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Tous ses "paramètres" servant à remplir tes combobox doivent être mis dans la feuille Param.
      Je te laisse faire cette partie, pendant ce temps je fais le code de remplissage.
      Envoie moi un nouveau classeur modifié.
      0
  4. Gourbi
     
    le fichier modifié est ici:
    http://www.cjoint.com/c/FHljOOGpEgH
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Ci-joint ton fichier : https://www.cjoint.com/c/FHljTij5Z3E

      Tu peux continuer le code dans la procédure Userform_Initialize afin de compléter tous tes combobox, je l'ai fait pour les trois premiers.
      On continue dès que tu m'auras retourné le fichier dûment complété.
      Si tu as une question sur le remplissage, n'hésite pas.
      0
    2. Gourbi
       
      pijaku, voila le fichier avec les modif demandés
      http://www.cjoint.com/c/FHlnfPVvZCM
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    J'ai un peu avancé, le bouton nouveau permet d'effacer tout, le bouton quitter de quitter...

    Maintenant à toi.
    Pour charger les données de la feuille BD dans l'userform, je t'ai fait une procédure : Private Sub Charge_Donnees()
    Tu la trouveras dans le code de l'userform, à toi de la compléter.
    https://www.cjoint.com/c/FHln5CR47VE

    Ne te préoccupe pas trop des fonctions dans le module1. Elles servent à traiter des données en mémoire (récolter les données, filtrer, etc)
    0
    1. Gourbi
       
      Merci, je vais passer le week end pour essayer d'avancer tout en essayant de comprendre.
      Merci pijaku pour ta précieuse aide
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      Alors à mardi, mais avant deux choses :
      > dans la feuil BD, les infos doivent être rigoureusement identiques à celles que l'on trouve feuil Param

      > je te livre de suite le code permettant de "voyager" d'un dossier à l'autre en cliquant sur le scrollbar :
      Private Sub ScrollBar1_Change()
          On Error GoTo PasDeDonnees
          If ScrollBar1.Value + 1 > UBound(DonneesFiltrees) Then 
              ScrollBar1.Value = i: Exit Sub
          End If
          i = ScrollBar1.Value + 1
          Charge_Donnees
          Exit Sub
      PasDeDonnees:
          ScrollBar1.Value = 0
      End Sub

      Code à intégrer à l'userform, bien entendu.

      Mardi renvoie moi ton fichier modifié.
      Bon weekend
      0
    3. Gourbi
       
      Bonjour pijaku,
      J'ai cru être déjà en week end, le fichier est complété et joint.
      http://www.cjoint.com/c/FHmgLuy43XH

      Est-il possible de mettre
      - la valeur monétaire dans la cellule O (montant)?
      Masque de saisie date aux cellules H, M, N et X?
      exemple:
      Private Sub TextBox1_Change()
      'exemple pour format xx/xx/xxxx
      Dim Valeur As Byte
      TextBox1.MaxLength = 10 'nb caracteres maxi dans textbox

      Valeur = Len(TextBox1)
      If Valeur = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/"
      End Sub

      et la vérif:
      Private Sub CommandButton1_Click()
      If Not IsDate(TextBox1.Value) Then
      MsgBox "Format incorrect"
      TextBox1 = ""
      Exit Sub
      Else
      MsgBox "Format correct"
      '...la suite de la procedure
      End If
      End Sub
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      Bonjour,

      1- utilise les balises code pour mettre du code sur CCM.
      NB: **** Attention ****
      Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
      Explications disponibles ici :
      https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


      2- Je suis en train d'écrire un tutoriel sur le remplissage d'un UserForm à partir de feuilles Excel. Me permets tu d'utiliser ton fichier?

      3- Oui, il est possible d'utiliser des masques de saisie pour les dates. Mais pas ceux que tu as trouvé sur Développez.com... Il y a bien mieux!

      4- je n'ai pas compris le la valeur monétaire dans la cellule O (montant)?
      Dans les cellules, tu utilises le format que tu souhaites... Après si tu me parles de textbox, c'est également possible, avec un petit ajout.
      Dis moi

      5- je regarde ton fichier et reviens avec la suite, lorsque tu auras répondu à mes 4 points...
      0
    5. Gourbi
       
      Désolé pour la balise, pas de problème pour utiliser mon fichier
      Format monétaire dans le textBox12 le montant esavec le symbole €
      0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Voici ton fichier avec les formats de date :
    https://www.cjoint.com/c/FHmhyjSerHE

    Je t'ai ajouté deux lignes dans la BD. Si tu peux en ajouter encore une vingtaine, avec des sites identiques, cela permettra de mieux tester.

    Fait un test en sélectionnant Boulogne, tu auras donc deux dossiers. Tu peux les visualiser en cliquant sur les boutons de ta scrollbar.
    Tu peux également tester la saisie d'une date dans le champs date de mail du 1er dossier boulogne.

    Fais des tests, en essaie, dans ce textbox, avant d'y saisir quoique ce soit, d'appuyer sur la barre d'espace.....

    Enjoy it!
    ps : c'est tout de même beaucoup mieux que celui de DVP...
    0
  8. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Voici ton fichier avec saisie numérique, monétaire et séparateur de milliers du TextBox12 :
    https://www.cjoint.com/c/FHmhRRjywuE

    Pour la suite, on va passer maintenant aux boutons modifier et enregistrer.
    Perso, je ne vois pas de différence entre les 2 et n'en mettrais qu'un seul, enregistrer. (modifier étant l'enregistrement d'une modification).

    Qu'en penses tu?

    Si tu es ok, il faudrait que tu me dises si les numéros de devis (colonne L) sont unique. Différents sur chaque ligne ou il peut y avoir des doublons???
    0
    1. Gourbi
       
      Encore merci pour ton aide précieuse

      Pour la colonne L (Demande d'Achat) n'est pas identique mais peut être répété x fois en fonction des projets, il peut y avoir des doublons.

      Pour les bouttons
      - Modifer c'est pour reprendre un enregistrement non terminé
      - Enregistrer (on peux le supprimer puisque les données seront dans BD)
      - Chercher (un site, un demandeur, un devis, une date, un chef de projet)
      - Exporter ( on peux le supprimer puisque les données seront dans BD)
      - Imprimer (impression de la feuille)

      Comme toutes les données seront dans la feuille BD, après en créant des filtres je pourrais retrouver mes petits.
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      Pour la colonne L (Demande d'Achat) n'est pas identique mais peut être répété x fois en fonction des projets, il peut y avoir des doublons.
      - Modifer c'est pour reprendre un enregistrement non terminé

      Toute la problématique est là.
      Comment peut-on différencier (en automatique, informatiquement) deux dossiers donc deux lignes de ta BD ?

      Perso, j'ajouterai une colonne n° à ta BD en colonne Z par exemple...
      0
    3. Gourbi
       
      Oui pourquoi pas ou alors il manque une collone "Clos", mais normalment tant que la fiche est different de "Terminer" on peut la rappeler pour la modifier.
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      J'ajoute une colonne.
      Voici le fichier sur lequel j'ai un peu avancé :
      https://www.cjoint.com/c/FHmlRi8PWXE

      Dans le prochain, tu auras la recherche (par tous les critères possibles et imaginables)
      0
    5. Gourbi
       
      Je viens de tester supper travail, franchement merci il ne me restera qu' a interpréter tes codes depuis le site, pour enrichire mon cerveau.
      Petite question, lorsque l'on ouvre le formulaire,tu ne peux accèder aux feuilles tu es obliger de le fermer pour y accèder.
      0
  9. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Allez hop hop hop! On enchaîne...
    Voici le Gourbi V2 :
    https://www.cjoint.com/c/FHmmwGS7RpE

    Tu as toutes tes fonctionnalités, sauf Imprimer...
    Tu veux imprimer qu'elle feuille, quoi????
    0
    1. Gourbi
       
      Impression de la feuille.
      Je viens de faire le test sur la recherche , il me trouve une erreure
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      Maintenant, nous entrons en phase dite de débugage.
      Il faut être plus précis que cela.
      il me trouve une erreur
      Qu'elle erreur?
      Impression de la feuille. Laquelle???
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      J'ai pu corriger trois erreurs...
      Effectivement, la recherche remontait 2 erreurs. Si on cherche une date ou un chiffre.
      C'est corrigé.
      J'ai également viré le séparateur de milliers qui foutait le boxon (montant)...

      Il faudrait que tu complètes la fonction : Private Function VerifSaisie() As Boolean
      dans le userform...

      https://www.cjoint.com/c/FHmm1qrZrqE
      0
    4. Gourbi
       
      Lors de la création d'un enregistrement, il se copie dans BD à la première ligne et ne lui attribu pas de N° dossier
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      Quand la BD est vide ou tout le temps???
      0
  10. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Voici avec un abandon possible par l'utilisateur (clic non sur le message)

    https://www.cjoint.com/c/FHmnLFuEtsE

    Pas la peine d'ajouter If Labelnumero = "" Then Exit Function à la fonction Private Function VerifSaisie() je l'ai fait dans le bouton d'enregistrement...

    Teste....
    0
    1. Gourbi
       
      Splendide la fonction "Recherche", tout foncfionnent à merveil, la partie N° Dossier, les derniers enregistrement se font sur 5 caractères.encore merci
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      ne dis pas encore merci, teste encore en réel.....

      Bon courage pour la suite.
      0
    3. Gourbi
       
      Un petit soucis lorsque je rempli le formulaire, avec les données que j'ai, je suis dans l'obligation de replir toutes les cellules si non j'ai le message incomplet, alors que je dois attendre la fin des travaux pour pouvoir renseigner certains chapms.
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Gourbi
       
      Tout se passe dans la fonction que je t'ai dit d'adapter :
          Private Function VerifSaisie() As Boolean
              VerifSaisie = False
              'A compléter de tous les champs obligatoires
              If ComboBox1.Value = "" Then Exit Function
              If TextBox1.Value = "" Then Exit Function
              If ComboBox8.Value = "" Then Exit Function
              If ComboBox2.Value = "" Then Exit Function
              'ajoute ici tous les champs que tu souhaites voir "non vide" pour enregistrer
              'cette ligne doit être la dernière de la fonction :
              VerifSaisie = True
          End Function

      Tu ne doit y trouver que les champs obligatoire, que je ne connais pas!
      0
    5. Gourbi
       
      Ok Merci, maintenant j'ai tout le week end pour réaliser mes tests. Encore merci pour l'aide que tu m'a apporté car je ne savait pas par quel bout commencé.
      Mille merci, bon week End
      0
  11. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,

    Voici ton fichier corrigé :
    https://www.cjoint.com/c/FHqiMPhWexE
    il y avait bien une erreur dans l'enregistrement quand aucun montant n'est saisi...
    Corrigé.
    Reste un problème avec les checkbox qui enregistrent systématiquement non dans la BD lors d'une nouvelle demande...
    Teste et dis moi
    0
    1. gourbi
       
      Salut,
      Je n'ai pas eu le temps de tester ce matin (trop de travail).
      Ça fonctionne à merveille je viens de faire plusieurs essaies, peut-on apporter une petite modification, la suppression de "Réparation et Création"?

      En tous les cas chapeau pour la qualité et ta grande disponibilité
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > gourbi
       
      Normalement c'est bon :
      https://www.cjoint.com/c/FHqnNxayN7E
      A tester...
      0
    3. gourbi > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      pijaku,

      marche trés bien, merci mon ami. Il ne me restera qu'a faire un menu exportation avec une sélection des "Terminé, En cours et Reporté" puis puis la gestion budgétaire "FG et CAB2"., quand je recevrai mon livre VBA.

      Merci mon ami pour ta générosité et ton aide.
      0
    4. gourbi
       
      Salut pijaku,

      Je viens de faire le test je rencontre un petit soucis: Après avoir effacé toutes les fiches pour y inserer les autentiques, lorsque je créé une demande (nouveau) le numéro d'enregistrement ne change pas et l'enregistrement se fait sur la même ligne.
      J'ai ajouté DSI - 091 - SE dans param "site".
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > gourbi
       
      Salut,

      Pour que cela fonctionne, tu dois avoir, en dernière colonne (X de mémoire) une liste des numéros des lignes que tu dois saisir sur 6 chiffres. Cette colonne doit être au format texte.

      Pour cela :
      1- sélectionne toute la colonne X en cliquant sur l'entête
      2- clic droit dans une des cellules sélectionnées
      3- format de cellule
      4- choisir "texte" puis valider
      5- en X2 saisir : 000001
      6- en X3 saisir : 000002

      Si la manipulation est bien faite, tu dois voir apparaître en X2 et X3 le petit commentaire vert indiquant une erreur...
      Ne te reste qu'à prolonger vers le bas de ta colonne.

      Si tu as encore un souci, envoie moi ton fichier.
      0