Premier programme Excel VBA userform

bonjour,

je suis en train de faire un programme Excel userform qui s'adresse au enfants de 3 à 16 ans à des fins d'évaluation de leur développement neuropsychologique.

en fait, je veux faire un fichier qui serait capable de lire plusieurs fichier audio (juste un mot par fichier) et qui dans le même temps prend en compte la pression ou non d'une case colorée tout en chronométrant le temps de réaction.

j'ai commencé à faire un fichier Excel, mais je me suis vite aperçu que ça serait plus compliqué que prévu.

en cherchant des réponses sur YouTube j'ai vu que Excel était capable de faire des userform.

j'ai donc approfondi un peu pour voir comment il fallait procédé mais maintenant je bloque. j'ai téléchargé votre pack de fonctions supplémentaire, il est bien installé mais je n'arrive pas à faire fonctionner les nouvelles fonctions.

donc pour faire simple :

- ouverture du fichier (fonctionne à moitié)

- lancement du programme à l'ouverture du fichier (ne fonctionne pas)

- protection par mot de passe de la base de données (fonctionne je pense)

- récupération des données et écriture dans la base (fonctionne)

- obligation de remplir toutes les informations demandées et met en surbrillance les cases à remplir (ne fonctionne pas)

- lancement du calendrier datePicker pour la date de naissance (ne fonctionne pas)

- menu déroulant ComboBox pour le choix du sexe (masculin/féminin) (ne fonctionne pas comme je voudrais)

- changement de page userform (fonctionne)

-boucler jusqu'à la fin de la liste audio (pas encore cherché)

- lecture de fichier audio (pas encore trouvé la solution)

- chronomètre (pas encore trouvé la solution)

- récupération de la case touchée (pas encore trouvé la solution)

- enregistre toute les secondes le bouton touché ou non dans la base (pas encore trouvé la solution)

- copie de la base de données vers un autre fichier Excel et vidage de la base (pas encore cherché)

- fermeture du userform à la fin du test (pas encore cherché)

voila c'est pour la première partie du test mais comme la deuxième partie est similaire à la première, quand une partie fonctionnera je devrais réussir à faire fonctionner la deuxième.

comme vous pouvez le voir, je suis encore loin du résultat escompté, c'est pour cela que je fait appels à votre aide.

pour le moment j'avais réussi à me dépanner avec les tutos sur YouTube et un site suisse qui as pour but d'écrire le code sans rien y connaitre

je vous met le fichier XLSM en pièces jointe :

81-test.xlsm (116.82 Ko)

pour debloquer la base :

login et mdp

n'oubliez pas de cliquer sur le bouton "attention auditive".

je voulais mettre les fichier audios mais il semble que je ne puisse pas, ils sont trop lourd.

j'ai aussi essayé de mettre le lien vers mon drive mais impossible, je n'ai pas posté assez de messages.

(à vrai dire c'est mon premier)

je vous remercie pour toute l'aide que vous pouvez m'apporter.

Bonjour

lancement du programme à l'ouverture du fichier (ne fonctionne pas)

1. Pouvez-vous expliquer ce que vous entendez par programme à lancer. C'est l'USF Accueil que vous voulez afficher en premier à l'ouverture ?

2. Déjà une chose que vous pouvez faire dans la feuille Choix
- Ajoutez "Sexe" en A1
- Mettez le tableau de données au format Structuré. cela va créer un nom (--> Tableau2) dans le gestionnaire de noms
- Supprimez le nom "sexe" et renommez le nom "Tableau2" créé par ceci par exemple --> "Tab_Sexe" (ce sera plus lisible)

Rem : Pouvez-vous confirmer que vous n'allez pas utiliser ce fichier sur MAC mais uniquement sous Windows

Cordialement

Bonjour,

Avant de rentrer dans le vif du sujet il est primordial de bien commencer.

  • Nommer explicitement les contrôles des formulaires (Ceux-ci peuvent portés un même nom sur des formulaire différents)
    • Exemple Formulaire Accueil TextBox1 : Nom
  • Dans le code mieux vaut ne pas utiliser les accents (Pour la portabilité) Mais c'est possible sur le nom des tableaux structurés et le noms de leurs colonnes.
    • Exemple Tableau de données colonne prénom.
  • Une fonction a pour vocation de renvoyer un résultat à l'inverse d'une procédure.
    • Exemple Function Ajoute(Byval Nombre1, Byval Nombre2) As Long : Msgbox "2 plus 3 font : " & Ajoute(2, 3) renverra : 2 plus 3 font : 5
    • La fonction username_and_password_from_code() devrait par exemple renvoyer True si le mot de passe et le nom sont bon.
    • En passant il faut éviter les Underscores sur les noms de fonctions préfère lui : UsernameAndPasswordFromCode.
  • Dans la fonction copy_with_repeat tu dois utiliser les tableaux structurés le code sera plus lisible, et plus facile à maintenir.

Voilà pour un premier jet.

Bonne programation,

bonjour Dan, et merci d'avoir répondu.

donc oui, je voudrai qu'a l'ouverture du fichier, on ne voie pas le classeur Excel, mais juste la page userform "acceuil".

je sait que c'est faisable j'ai vu une vidéo YouTube traitant du sujet mais je n'arrive pas a le mettre en place.

2. Déjà une chose que vous pouvez faire dans la feuille Choix

- Ajoutez "Sexe" en A1

je l'avais fait au départ, mais ça ne faisait pas très beau et surtout, la case du questionnaire étant déjà remplie avec ce mot, je ne suis pas sur qu'au moment du contrôle des cellules vide, elle ne soie pas traité comme remplie.

ce que je cherche à faire, c'est que le menu se déroule automatiquement quand on arrive dessus au fur et à mesure qu'on rempli le formulaire.

- Mettez le tableau de données au format Structuré. cela va créer un nom (--> Tableau2) dans le gestionnaire de noms

ce que vous appelez format structuré, c'est un tableau avec une petite flèche a coté des entêtes, comme j'ai fait sur la feuille "base", c'est bien ça ?

excusez moi, je suis vraiment débutant, je suis mécanicien à la retraite et j'apprend par moi même, donc je vais certainement poser des questions qui vous sembleront bête.

- Supprimez le nom "sexe" et renommez le nom "Tableau2" créé par ceci par exemple --> "Tab_Sexe" (ce sera plus lisible)

donc je tape "sexe" en A1, je converti en tableau, je renomme A1 en "Tableau2", c'est bien ça ?

par contre, "Tab_Sexe" je ne voie pas du tout ce que vous voulez dire.

Rem : Pouvez-vous confirmer que vous n'allez pas utiliser ce fichier sur MAC mais uniquement sous Windows

oui, c'est prévu d'être juste sur Windows, au départ je voulais le faire sur google Sheets pour exécuter le programme en ligne, mais comme apparemment les formulaires userform et les macros ne fonctionnent pas en ligne, le programme sera sur une tablette fonctionnant sous Windows.

cordialement.

re

Pour répondre à votre post

ce que je cherche à faire, c'est que le menu se déroule automatiquement quand on arrive dessus au fur et à mesure qu'on rempli le formulaire.

Heu quel menu ?

donc oui, je voudrai qu'a l'ouverture du fichier, on ne voie pas le classeur Excel, mais juste la page userform "acceuil".

- Allez dans l'éditeur VBA
- Menu Affichage --> choisir Explorateur de projet (cela affiche une fenetre à gauche elle n'y est pas par défaut)
- Double click sur Thisworkbook
- Collez ce code dans la fenêtre

Private Sub Workbook_Open()
Application.WindowState = xlMinimized
accueil.Show
End Sub

- enregistrez le fichier et fermez-le
A la réouverture l'USF sera affichée

NB :
- L'instruction "minimized" vous permettra de réafficher excel en cliquant sur l"icone de la barre des taches windows.
- Pensez à corriger l'inversion dans le nom de l'USF acceuil .... --> ACCUEIL


donc je tape "sexe" en A1, je converti en tableau, je renomme A1 en "Tableau2", c'est bien ça ?

oui et non...
- En A1, mettez SEXE
- Cliquez sur une cellule dans le tableau des données
- Menu Accueil --> icone "Mettre sous forme de tableau"
- cochez la case "mon tableau a des entêtes" puis OK
- allez dans le menu "Formule" --> "gestionnaire de noms"
- là vous verrez "Tableau2"
- Cliquez sur "Modifier"
- Modifiez "Tableau2" en "Tab_sexe" ou ce que vous voulez. Le but final est d'avoir un nom compréhensible au lieu de TableauX qui ne permet pas de savoir facilement de quoi on parle


ce que vous appelez format structuré, c'est un tableau avec une petite flèche a coté des entêtes, comme j'ai fait sur la feuille "base", c'est bien ça ?

excusez moi, je suis vraiment débutant, je suis mécanicien à la retraite et j'apprend par moi même, donc je vais certainement poser des questions qui vous sembleront bête.

Exact. Vous avez compris
Ne vous excusez pas. Si vous venez ici c'est que vous voulez apprendre

Jean-Paul et Dan, je vous remercie du temps que vous passez à m'expliquer les problèmes et surtout à m'aider à les résoudre.

donc J'ai attentivement lu vos réponses et j'ai appliqué les corrections que vous m'avez suggérées.

Pour Jean-Paul, j'ai renommé toutes les fonction et j'ai retiré tous les Under scores, j'ai aussi renommé tous les textbox avec des noms un peu plus parlant.

pour Dan, j'ai essayé ton code pour cacher la base, mais il ne fonctionne pas :

Private Sub Workbook_Open()
Application.WindowState = xlMinimized
accueil.Show
End Sub

démarre juste Excel en réduit, pour y avoir accès je doit aller dans la barre de tache pour agrandir mais la base en arrière plan est toujours visible et si je ferme le userform avec la croix rouge, Excel reste ouvert et on as accès à la base.

j'avais trouvé la bonne fonction mais je l'avais mal placé c'est pour cela que ça ne fonctionnait pas.

Private Sub Workbook_Open()
'Application.Visible = False
FormAcceuil.Show
End Sub

je l'avais mis dans accueil au lieu de workbook et maintenant ça fonctionne comme je voulais.

pour le moment j'ai désactivé le masquage de la base, parce que mon login mot de passe est pas au point, quand je me logue pour avoir accès à la base j'ai des écrans avec rien dessus d'exploitable pour moi.

excel bloque vba bloque

et j'ai passé toute l'après midi a débloquer la base, j'y suis heureusement parvenu mais je ne sais pas comment, un coup de chance peu être mais pour le moment c'est pas le plus important.

ce que je cherche à faire, c'est que le menu se déroule automatiquement quand on arrive dessus au fur et à mesure qu'on rempli le formulaire.

Heu quel menu ?

en fait, quand on remplis le formulaire, lorsqu'on fait entrer on change de textbox automatiquement, et quand on arrive sur le choix du sexe, j'aimerai que ça se déroule tout seul sans avoir besoin de cliquer pour dérouler mais je ne sais pas si c'est faisable

menu visible

surtout que le remplissage n'est pas dans le bon ordre, il fait les 3 premières textbox puis passe à la 5ème pour enfin revenir à la 4ème.

pour vous deux, j'ai fait des tableaux avec des flèches en entête et j'ai supprimé toutes les tables que j'avais crées. de plus j'ai divisé le tableau des bases en trois plus petit avec des bases séparées et j'ai renommé les tableaux de façon compréhensible.

je vous joint le fichier à jour :

51-test.xlsm (119.16 Ko)

1. Bon vous n'avez pas fait ce que j'ai écrit dans mon message ou en tout cas rien n'est fait dans le fichier joint.

2. Pour ce qui concerne l'instruction "Application.visible", je ne vous l'ai pas donnée car je déconseille vraiment de l'utiliser. Si votre fichier plante ou que vous fermez votre fichier (par CTRL + W par exemple ou un mauvais code de fermeture), on ne sait même plus qu'excel est ouvert à l'arrière plan.
Là vous faites comme vous voulez bien entendu.

3. Votre combobox fait référence à la propriété Rowssource. A éviter cela provoque des soucis quelques fois. Il faut lui préférer la méthode ADDITEM ou LIST

4. Pour l'ordre de remplissage, vous devez sélectionner la 1er textbox puis allez dans la propriété TABINDEX de l'objet et vous changez le 9 actuel par 1. Idem pour les suivants en mettant 2 puis 3 etc...

5. pour l'affichage de la combo, vous devez sélectionner la Combo puis allez dans la propriété STYLE et dans la liste choisir l'option 2 ( par défaut cette option est toujours sur 0)

bonjour Dan,

1. Bon vous n'avez pas fait ce que j'ai écrit dans mon message ou en tout cas rien n'est fait dans le fichier joint.

j'ai cherché un moment parce que je ne trouvai pas , mais c'est normal que vous ne voyez pas de différences, je me suis trompé de fichier.

je vous mets le bon cette fois ci.

4test1-copie.xlsm (139.81 Ko)

en fait je gardai tous les fichiers dans le même répertoire, et je travaille sur 1 fichier que je copie avant modifications au cas ou ça tournerai mal sans devoir rester bloqué comme hier avec avec des l'instructions dangereuses comme "Application.visible" ou d'autre que je ne connais pas.

mes fichiers sont affichés par ordre de modifications et je me suis trompé donc je vous ai envoyé le premier au lieu du dernier. désolé de vous avoir fait perdre votre temps avec cet incident, ça n'arrivera plus, j'ai fait le ménage et j'ai gardé seulement le dernier que j'ai copié pour les modifications futures.

4. Pour l'ordre de remplissage, vous devez sélectionner la 1er textbox puis allez dans la propriété TABINDEX de l'objet et vous changez le 9 actuel par 1. Idem pour les suivants en mettant 2 puis 3 etc...

c'est fait et ça fonctionne mais c'est pas les même numéros, de 1 à 8 c'est les noms visible, et de 9 à 15 les cases à remplir

5. pour l'affichage de la combo, vous devez sélectionner la Combo puis allez dans la propriété STYLE et dans la liste choisir l'option 2 ( par défaut cette option est toujours sur 0)

c'est fait

3. Votre combobox fait référence à la propriété Rowssource. A éviter cela provoque des soucis quelques fois. Il faut lui préférer la méthode ADDITEM ou LIST

j'ai bien trouvé Rowssource mais je ne trouve pas ni ADDITEM ni LIST. à moins que ce ne soit des instructions à mettre dans le code mais je ne sait pas où.

2. Pour ce qui concerne l'instruction "Application.visible", je ne vous l'ai pas donnée car je déconseille vraiment de l'utiliser. Si votre fichier plante ou que vous fermez votre fichier (par CTRL + W par exemple ou un mauvais code de fermeture), on ne sait même plus qu'excel est ouvert à l'arrière plan.

Là vous faites comme vous voulez bien entendu.

ça serai juste pour moi, ça ne me dérangerai pas de voir la base, mais la c'est pour ma belle fille qui commence à travailler, et comme elle doit respecter le secret médical, cacher la base est obligatoire afin que ses patients ne puissent pas y accéder.

c'est pour cela qu'a la fin des tests, je vais faire une sauvegarde de la base dans un autre fichier extérieur au classeur ou se trouve l'userform, comme ça, si ça plante et qu'elle perd l'utilisation de l'userform ou de la base, il suffira de copier la sauvegarde de l'userform en remplaçant celui qui est compromis, et de redémarrer Windows. enfin c'est ce que je pense, c'est ce qui me semble logique.

d'ailleurs, théoriquement je pense que les premières feuille du classeur ne sont pas indispensable, je peut les supprimer et garder uniquement les feuilles ou il y as les tableaux ?

j'avais fait un petit organigramme avant de commencer quand elle m'as donné les explications du fonctionnement de son test.

mais je ne peut pas le mettre pour le moment le site me dis service indisponible quand j'essaie de joindre un PDF ou un docx.

cordialement.

Bonjour à tous,

Petit retour sur le classeur :

je ne trouve pas ni ADDITEM ni LIST

Tu as raison c'est au niveau du code. Par exemple quand le formulaire se charge après la méthode Show par exemple. L'évènement Initialize est lancé, donc tu peux dans cet évènement, initialiser les contrôles du formulaire. Voici quelques exemples:

Private Sub TestInitControls()
    With AccueilComboBoxSexe ' // Evite de réécrire le nom du contrôle
        ' // Méthode AddItem
        .AddItem "Masculin"
        .AddItem "Féminin"
        .Clear
        ' // Méthode avec un Array
        .List = VBA.Array("Masculin", "Féminin")
        .Clear
        ' // Méthode avec List et une plage de cellules
        .List = Feuil6.Range("A2:A3").Value 'C'est la feuille choix
        .Clear
        ' // Méthode List avec une colonne d'un tableau structuré.
        .List = Range("Tab_Sexe[Sexe]").Value
        .Clear
        ' // Idem mais avec le listObject
        .List = Worksheets("Choix").ListObject(1).Columns(1).DataBodyRange ' // La méthode avec le Range est à préférer.
        ' // Méthode avec Evaluate, pour ceux qui ont une version récente d'Excel
        .List = Evaluate("=SORT(UNIQUE(Tab_Acceuil[prénom]))") ' // Minimal syndical qui charge les valeurs uniques triées,de la colonne prénom, dans la list déroulante
    End With
End Sub

Revenons sur les noms de contrôles, nul besoin de référencer le nom du formulaire et le type de contrôle ça ne fait qu'alourdir le code

Exemple pour AccueilTextBoxDateNaissance DateNaissance fait très bien l'affaire.

cacher la base est obligatoire afin que ses patients ne puissent pas y accéder.

D'abord s'occuper des fonctions primordiales de ton application puis tu fera les finitions, une fois que le classeur fonctionne comme tu le veux.

d'ailleurs, théoriquement je pense que les premières feuille du classeur ne sont pas indispensable, je peut les supprimer et garder uniquement les feuilles ou il y as les tableaux ?

Pour ma part, je pense qu'une feuille pour l'accueil, une ou plusieurs pour les datas, une pour les paramètres du classeur sont le minimum syndical.

mais je ne peut pas le mettre pour le moment le site me dis service indisponible quand j'essaie de joindre un PDF ou un docx.

Fait un test en passant par une archive WinZip par exemple.

Bonjour,

j'ai bien trouvé Rowssource mais je ne trouve pas ni ADDITEM ni LIST. à moins que ce ne soit des instructions à mettre dans le code mais je ne sait pas où.

Comme jean paul vous a écrit, ce sont des instructions VBA. Rowsource est une propriété de l'objet

d'ailleurs, théoriquement je pense que les premières feuille du classeur ne sont pas indispensable, je peut les supprimer et garder uniquement les feuilles ou il y as les tableaux ?

Là il faudrait comprendre le pourquoi des feuilles

mais la c'est pour ma belle fille qui commence à travailler, et comme elle doit respecter le secret médical, cacher la base est obligatoire afin que ses patients ne puissent pas y accéder.

Vous n'êtes pas obligé d'être sur la feuille reprenant les informations sensibles lorsque vous affichez l'USF.


dans votre fichier,

1. sur la feuille Choix, vous avez mis des bordures sur toutes les cellules de la colonne 1, soit 1048576 cellules !. Vous n'en utiliser que 3... Eviter de remplir ou formater des cellules non utilisées. Cela peut alourdir inutilement le fichier et excel le lira chaque fois.
Sélectionnez A4 à la dernière lige et supprimez toutes les bordures
2. Pour l'ouverture de l'USF Formaccueil,
-- Cliquez sur la AccueilComboBoxSexe
-- allez dans la propriété Rowssource et supprimez la valeur TAB_Sexe
-- dans votre USF, ajouter un code comme ceci par exemple (ou une autre ligne telle que décrite par Jean paul)

Private Sub UserForm_Initialize()
AccueilComboBoxSexe.List = Sheets("Choix").ListObjects(1).DataBodyRange.Value
End Sub

NB :
- etes-vous sûr de vouloir ouvrir l'USF Accueil à chaque ouverture du fichier ?
- Gardez en mémoire qu'avec excel et VBA on a vite une "usine à gaz". Donc mon conseil est de rester simple.

Crdlt

bonjour,

Déjà j'aimerai m'excuser auprès de Jean-Paul, de ne pas avoir répondu plus tôt.

j'ai essayé toutes ses commandes, je n'ai pas réussi à obtenir le menu déroulant mais je ne savais pas qu'il fallait mettre dans

UserForm_Initialize

je mettait le code dans

Private Sub AccueilComboBoxSexe_Change()

j'ai bien compris que

Private Sub TestInitControls()
With AccueilComboBoxSexe

c'était pour éviter de réécrire le nom du contrôle et qu'il fallait mettre le reste de la commande derrière, mais pour le moment je vais rester simple et taper la commande complète.

d'ailleurs je pense que le

.clear

sert à vider la case du ComboBox et donc qu'il n'est pas indispensable dans mon cas puisque le nettoyage de toutes les cases fonctionne déjà mais c'est toujours bon à savoir.

d'ailleurs, théoriquement je pense que les premières feuille du classeur ne sont pas indispensable, je peut les supprimer et garder uniquement les feuilles ou il y as les tableaux ?

Là il faudrait comprendre le pourquoi des feuilles

en fait au départ je faisait un simple formulaire sous excel et en cherchant des informations sur les macros que j'ai connu userform et comme çà me semblai mieux visuellement que le formulaire excel de base j'ai décidé d'essayer.

donc les 5 feuilles avant "choix" sont les reliques du fichier de départ.

mais la c'est pour ma belle fille qui commence à travailler, et comme elle doit respecter le secret médical, cacher la base est obligatoire afin que ses patients ne puissent pas y accéder.

Vous n'êtes pas obligé d'être sur la feuille reprenant les informations sensibles lorsque vous affichez l'USF.

ce n'est pas bien grave, j'ai trouvé des instruction pour démarrer l'userform en plein écran donc le problème de la base visible n'en est plus vraiment un,

je vais créer une page d'accueil et masquer les pages de la base.

- etes-vous sûr de vouloir ouvrir l'USF Accueil à chaque ouverture du fichier ?

- Gardez en mémoire qu'avec excel et VBA on a vite une "usine à gaz". Donc mon conseil est de rester simple.

oui, c'est la page d'accueil du test afin de collecter les informations sur le patient pour traiter les résultats par la suite et aussi qui as réalisé le test.

c'est pour cela que la base doit être copiée dans un autre fichier à la fin du test, et aussi pour ne pas perdre la base si quelque chose tourne mal.

de plus, je pense que pour limiter les temps d'accès il serai peut être bien de vider la base de l'userform régulièrement puisque de toutes façons elle sera sauvegarder dans un fichier externe.

mais je ne peut pas le mettre pour le moment le site me dis service indisponible quand j'essaie de joindre un PDF ou un docx.

Fait un test en passant par une archive WinZip par exemple.

j'ai recopié le fichier Word avec Excel, comme ça il n'y aura plus de problèmes pour l'uploader.

il est composé de 4 feuilles,

- les instructions du test données par ma belle fille,

- un organigramme que j'ai créé pour faciliter la construction du code,

- la troisième feuille contient les instructions pour la correction du test mais je l'ai déja fait plusieurs fois pour ses autres test donc ça devrai aller,

la quatrième feuille contient les lignes de codes que j'ai trouvé pendant mes recherches et qui interviendront peut être par la suite.

cordialement.

Bonjour,

- etes-vous sûr de vouloir ouvrir l'USF Accueil à chaque ouverture du fichier ?
oui, c'est la page d'accueil du test afin de collecter les informations sur le patient pour traiter les résultats par la suite et aussi qui as réalisé le test.

Ok.

c'est pour cela que la base doit être copiée dans un autre fichier à la fin du test, et aussi pour ne pas perdre la base si quelque chose tourne mal.

La sauvegarde de la base, ce sera à voir plus tard. Il vous faut d'abord avoir un fichier qui fonctionne

de plus, je pense que pour limiter les temps d'accès il serai peut être bien de vider la base de l'userform régulièrement puisque de toutes façons elle sera sauvegarder dans un fichier externe.

Je ne vois pas de quoi vous parlez mais cela ne parait pas important à ce stade. Là vous êtes sur l'usf accueil et je vous ai donné quoi faire dans votre fichier mais apparemment vous n'avez pas essayé.

Rem : je me demande pourquoi vous utilisez des macro Function au lieu de SUB. Les macro Function sont utilisées et exécutées sur base d'une variable et sont donc appelées depuis la variable. Là pas besoin de CALL
Les Function renvoient une valeur unique simple à la manière d'une formule dans une feuille de calcul. (exemple : Somme de couleur, ...)
Les SUB pour l'exécution depuis une commande Utilisateur ou par une autre procédure
Utilisez CALL quand vous appelez une SUB et pas une FUNCTION (bien que le CALL n'est pas indispensable aujourd'hui je préfère toujours utiliser l'instruction pour une question de lecture du code)

bonjour,

La sauvegarde de la base, ce sera à voir plus tard. Il vous faut d'abord avoir un fichier qui fonctionne

tout à fait d'accord avec vous, c'est pour cela que je n'ai pas encore essayé les lignes de code que j'ai trouver par hazard sur YouTube mais que je garde sur le dernier fichier que j'ai envoyé.

de plus, je pense que pour limiter les temps d'accès il serai peut être bien de vider la base de l'userform régulièrement puisque de toutes façons elle sera sauvegarder dans un fichier externe.

Je ne vois pas de quoi vous parlez mais cela ne parait pas important à ce stade.

comme je vous ai dis, jusqu'à maintenant, je me servais d'Excel juste pour les fonctions de base : les calculs entre les cellules (+-/*).

c'est quand j'ai commencé ce fichier que j'ai vu que je devrai utiliser des macros et comme je n'en avais jamais fais j'ai chercher un peut et c'est à ce moment la que j'ai appris qu'Excel pouvais faire des userforms.

j'ai essayé et j'ai recherché comment ça fonctionnait pendant un bon moment avant de voir que je n'y arriverai pas seul, c'est pourquoi je me suis inscrit mais avant d'appliquer des formules toutes faites, j'essaye de comprendre leur fonctionnement parce que je pense que si on ne connais pas le fonctionnement on ne saura jamais l'utiliser convenablement et encore moins corriger les erreurs quand elle surviennent.

et j'ai pensé que le vidage de la base serai intéressant pour améliorer les temps d'accès à la base : j'ai fait du basic sur commodore dans ma jeunesse, et je fais des petit programmes en C sur Arduino, et j'ai déjà remarqué à maintes reprises que plus le programme est lourd plus il mets de temps à s'exécuter et pour moi comme la base fait parti du programme, je pense que ça ne sert à rien de lire plusieurs centaines de cellules pour trouver la bonne et de passer à l'instruction suivante, mais peut être que je me trompe.

Là vous êtes sur l'usf accueil et je vous ai donné quoi faire dans votre fichier mais apparemment vous n'avez pas essayé

si j'ai essayé, mais juste pour 3 lignes de code et quelques feuilles Excel retirées, je n'ai pas trouvé l'intérêt de renvoyer le fichier, j'ai plutôt pensé que de connaitre le déroulement du test serai plus bénéfique pour vous afin de comprendre ce que je voulais faire dans la totalité.

Rem : je me demande pourquoi vous utilisez des macro Function au lieu de SUB. Les macro Function sont utilisées et exécutées sur base d'une variable et sont donc appelées depuis la variable. Là pas besoin de CALL

Les Function renvoient une valeur unique simple à la manière d'une formule dans une feuille de calcul. (exemple : Somme de couleur, ...)

Les SUB pour l'exécution depuis une commande Utilisateur ou par une autre procédure

Utilisez CALL quand vous appelez une SUB et pas une FUNCTION (bien que le CALL n'est pas indispensable aujourd'hui je préfère toujours utiliser l'instruction pour une question de lecture du code)

comme je l'ai dis juste au dessus, c'est mon premier programme, je part de zéro, il y as1 mois je ne savais pas ce que c'était qu'un userform et chaque fois que je vois des exemples, il fonctionnent comme ça donc je me suis dit que c'était normal de déclarer la fonction en début de code pour pouvoir l'appeler plus tard, un peu comme en C.

donc pour le moment, mais comme je n'arrive pas à faire fonctionner datePicker, j'ai supprimer les feuilles qui ne servent pas et j'ai refait la feuille accueil dans la partie Excel.

je sais que ça ne sert à rien pour le moment, mais j'ai avancé un peu sur les Bases AA et RA, j'ai inscrit tous les mots a contrôler, et j'ai remplacer les carrés de couleur sur les Test 1 et 2 par des boutons, j'ai aussi créer des tableaux Jour, Mois, Annee dans la feuille choix, au cas ou datePicker ne fonctionnerai pas .

par contre j'ai fait une boulette, je me suis encore trompé dans les tableaux et en voulant remédier au problème, je crois que j'ai fait pire que mieux : je n'arrive pas à les supprimer, même en supprimant les colonnes et en recréant le tableau il me dis qu'il existe déjà et que je dois choisir un autre nom.

3test1-copie.xlsm (84.30 Ko)

Edit : j'ai réussi a effacer les tableaux et a en refaire des nouveaux

Bonjour à tous,

j'ai aussi créer des tableaux Jour, Mois, Annee dans la feuille choix, au cas ou datePicker ne fonctionnerai pas .

Franchement, pourquoi se casser autant la tête pour saisir une date dans une zone de texte...

je sais que ça ne sert à rien pour le moment, mais j'ai avancé un peu sur les Bases AA et RA, j'ai inscrit tous les mots a contrôler,

Va falloir que je regarde cela de plus prés.

J'ai remarqué que tu n'écrivais pas les lignes dans le tableau structuré, ça ce n'est pas bon.

Voici un tronc de fichier d'où tu va pouvoir t'inspirer. Tu trouvera notamment :

  • Un module Factory pour l'initialisation des ListObjects etc..
  • Un module Settings pour la gestion de paramètres dans l'application
  • Un module TabsManagement pour la gestion des tableaux structurés. Ajout d'une ligne, récupérer un MaxId si l'on utilise des identificateurs uniques de lignes. etc..

J'ai opté pour un formulaire unique, pourvu d'un multipage, une zone administrateur sur la droite, tout n'est pas fonctionnel.

Tu as la possibilité d'utiliser Application Speech, il y a un bouton test sur le formulaire. fais un test pour voir si cela te convient.

Ce n'est que le premier jet.

Bonjour,

Je sais que je vous avais répondu en premier sur votre demande mais vu que Jean Paul semble vouloir prendre aussi en charge le sujet, il est inutile d'être à deux sur le même fil. Je le laisse continuer avec vous.

Cordialement

bonjour,

Dan :

Je sais que je vous avais répondu en premier sur votre demande mais vu que Jean Paul semble vouloir prendre aussi en charge le sujet, il est inutile d'être à deux sur le même fil. Je le laisse continuer avec vous.

je comprends et je vous remercie pour le temps que vous m'avez accordé.

Jean-Paul :

Franchement, pourquoi se casser autant la tête pour saisir une date dans une zone de texte...

vu que pour calculer l'Age, dans le code je fais la différence entre la date de naissance et la date du test, et qu'il y as plusieurs façon de l'écrire, pour éviter les problèmes je ne voulais pas qu'il y ai de choix possible.

en effet, si quelqu'un écrit 1/01/2000, bien que la date soie la même date, ce n'est pas pareil que 01 01 2000, ou encore 1 Janvier 2000 et j'avais peur d'être embêté dans les calculs comme je l'ai été dans les test précédents quand je demandai l'âge, certaines personnes n'écrivaient que le nombre ( "23" par exemple),

mais d'autres écrivaient "23 Ans", et j'ai même eut des personnes qui écrivaient "23 Ans 4 Mois", et ça générai des problèmes de calcul que je n'ai pas réussi à corrigé donc je suis parti sur la différence entre la date du test et la date de naissance puisque sur google Forms on as un datePicker pour sélectionner une date.

je sais que ça ne sert à rien pour le moment, mais j'ai avancé un peu sur les Bases AA et RA, j'ai inscrit tous les mots a contrôler,

Va falloir que je regarde cela de plus prés.

en fait, vu que je ne peut pas envoyer les fichiers audio, et pour une correction plus facile, j'ai écrit tous les mots des fichiers dans la première ligne du tableau, juste après les entêtes, je pense que ça ne gênera pas, puisque le tableau s'agrandi automatiquement.

J'ai remarqué que tu n'écrivais pas les lignes dans le tableau structuré, ça ce n'est pas bon.

je ne voie pas de quoi vous parlez, j'ai fais un tableau comme vous m'avez dit (avec les petites flèches dans l'entête) et il s'agrandi tout seul en changeant de ligne donc je pensai que c'était bon.

vous me dites que ce n'est pas bon mais je ne sais pas comment faire autrement.

Voici un tronc de fichier d'où tu va pouvoir t'inspirer. Tu trouvera notamment :

Un module Factory pour l'initialisation des ListObjects etc..

Un module Settings pour la gestion de paramètres dans l'application

Un module TabsManagement pour la gestion des tableaux structurés. Ajout d'une ligne, récupérer un MaxId si l'on utilise des identificateurs uniques de lignes. etc..

J'ai opté pour un formulaire unique, pourvu d'un multipage, une zone administrateur sur la droite, tout n'est pas fonctionnel.

Tu as la possibilité d'utiliser Application Speech, il y a un bouton test sur le formulaire. fais un test pour voir si cela te convient.

Ce n'est que le premier jet.

la j'avoue que vous êtes soit un génie soit un magicien voir les 2, parce que les pages du formulaire s'affichent mais je ne les voient ni dans le code ni dans la création du formulaire.

d'ailleurs je ne comprend pas le fonctionnement du code, donc je suis incapable de le modifier pour corriger une petite erreur que j'ai vu : les 2 test sont présent mais le 1er test a les explications du deuxième et inversement.

par contre, l'accueil est superbe, et le formulaire de contact est parfait, bien que je devine des boutons tout en bas mais ma résolution d'écran ne me permet pas de les afficher et je n'arrive pas à faire fonctionner le menu déroulant sur le coté, mais il n'est peut être pas encore actif.

et la fonction "DictionType" est tout simplement magique, je ne savais pas qu'Excel pouvais parler.

Bonjour,

la j'avoue que vous êtes soit un génie soit un magicien voir les 2, parce que les pages du formulaire s'affichent mais je ne les voient ni dans le code ni dans la création du formulaire.

Évidemment pour un novice en VBA ce doit être un peu compliqué. Donc pour les voir :

  • On affiche le formulaire en mode création
  • Puis on fait un clic dans le grand carré vert (ce sont les pages) mais pas sur un contrôle.
  • Ensuite Dans la fenêtre des propriétés on peut voir l'ensemble des contrôles et notamment les pages. (fenêtre de propriétés Menu/Affichage/Fenêtre propriétés Ou F4
000466

d'ailleurs je ne comprend pas le fonctionnement du code, donc je suis incapable de le modifier pour corriger une petite erreur que j'ai vu : les 2 test sont présent mais le 1er test a les explications du deuxième et inversement.

Comme déjà dis c'est un premier jet, donc cela demande des finitions...

je n'arrive pas à faire fonctionner le menu déroulant sur le coté, mais il n'est peut être pas encore actif.

Certains boutons ne sont pas actifs, pour visualiser les boutons faire un clic sur la double flèche à droite de la fenêtre.

je devine des boutons tout en bas mais ma résolution d'écran ne me permet pas de les afficher

Certains contrôles ne sont pas affichés au démarrage, par exemple [Attention auditive] ne s'affiche que si le formulaire est rempli, puis validé.

Je vous laisse le soin de regarder le code en détail, ne pas hésité si des passages vous semblent obscurs.

Voici une version mise à jour.

bonjour Jean-Paul

Certains contrôles ne sont pas affichés au démarrage, par exemple [Attention auditive] ne s'affiche que si le formulaire est rempli, puis validé.

ce que je voulais dire quand je disais que je ne voyais pa les boutons c'est que mon écran est réglé sur la plus haute résolution qu'il peux supporter (1280x800) mais le formulaire est trop grand, les boutons du bas sont derrière la barre de tache.

ecran trop petit

et sur la tablette ce sera encore pire, elle fait du 1024x720 si je ne me trompe pas, c'est une vielle tablette que j'ai récupéré sur un chariot élévateur donc solide mais un peut lente, elle tourne encore sous XP, c'est aussi pour cela que je parlais des temps d'accès hier

autrement, maintenant j'arrive à voir les feuilles, et je les aient remise dans l'ordre.

j'ai vu qu'on pouvait zoomer pour ajuster les feuilles incrustées dans la feuille d'accueil, je vais essayer d'ajuster la taille pour que tout passe dans l'écran.

Re,

je vais voir pour réduire tout cela, c'est vrai que les contrôles à l'origine sont très grands.

j'ai réussi à ajuster la taille, il y as une ligne zoom tout en bas des propriétés, j'ai mis 80 ca me semble correct.

j'ai aussi remis toutes les pages dans l'ordre et corrigé les titres des pages, j'ai cherché un moment je cherchai dans le code

et j'ai fait un enregistrement et la fermeture à la fin du test.

après tous les essais et les petites modifs que j'ai faites, je suis content ça fonctionne encore,

Rechercher des sujets similaires à "premier programme vba userform"