Guider un utilisateur pas à pas avec VBA

Chalafraiz

XLDnaute Nouveau
Bonjour,

Pour mon travail, je réalise un tableur qui calcule des choses diverses et variées. Ce tableur, une fois terminé, sera utilisé par des personnes lambda, n'ayant pas forcément de contact avec moi. Ainsi, j'aimerais créer une interface de guidage pas à pas afin que cette personne ne fasse pas de "bêtises".

C'est simple, la personne n'a pas grand chose à faire. Elle doit :
- ouvrir le modèle
- lire (ça se complique)
- remplir des cellules repérées et UNIQUEMENT ces cellules
- cliquer sur un bouton pour lancer les calculs​

Je suis d'un niveau correct en VBA, je touche un peu à tout pour mes calculs (recherche dans tableaux, dichotomie, etc.) et j'ai réussi à coder une petite macro d'accueil, mais j'avoue qu'elle n'a pas trop de "style".Je vous laisse voir tout ça dans mon fichier joint.

A part les différentes choses qui ne fonctionnent pas, le reste tourne plutôt bien mais je voudrais avoir votre avis, selon vos expériences, sur ma démarche. Personnellement je trouve ça lourd les petites pop-up, surtout sachant qu'il doit y avoir une 60aine de cellules à remplir.

Pensez-vous qu'il y ai quelque chose de plus simple et moins long en code à faire ?
Je pensais aussi à lancer une macro selon le remplissage de cellules mais j'ai peur que cela soit encore plus lourd...

L'idéal ce serait qu'au lancement du modèle Excel, la macro demande un répertoire d'enregistrement et un nom de fichier, puis qu'elle enregistre un nouveau tableur pour éviter de toucher au modèle. Après cela, il faudrait que la personne remplisse à la suite les différentes données dont j'ai besoin pour mes calculs.


Bon, à la relecture, c'est vraiment indigeste, et je m'en excuse, j'espère que vous avez réussi à comprendre ce que je dis ! Je ne vous demande pas de me mâcher le travail, juste vos avis sur ma démarche, et sur les petits dysfonctionnements de ma macro (par exemple le fait que le tableur ne se ferme pas quand je le demande)

Merci d'avance pour votre arrachage de cheveux.

Cordialement,

Chalafraiz.
 

Pièces jointes

  • Classeur test.xlsm
    42.5 KB · Affichages: 77
  • Classeur test.xlsm
    42.5 KB · Affichages: 89
  • Classeur test.xlsm
    42.5 KB · Affichages: 86
C

Compte Supprimé 979

Guest
Re : Guider un utilisateur pas à pas avec VBA

Bonjour Chalafraiz

Perso, une simple protection de la feuille avec les cellules a remplir déprotégées suffit

Ensuite pour ce qui est de la sauvegarde, tu peux le faire après le message d'accueil,
avec le nom de l'utilisateur la date et l'heure

Voir fichier joint

A+
 

Pièces jointes

  • ModèleCalcul.xlsm
    42.3 KB · Affichages: 48

Herdet

Nous a quitté
Repose en paix
Re : Guider un utilisateur pas à pas avec VBA

Bonjour,
Un peu précipitée et pas testée cette solution de Bruno45 ( mais verrouillage cellules OK )

Utilisateur :
Question 1 : "Bienvenue dans la ..."
Réponse = OK ==> le modèle est dupliqué dans le répertoire du modèle sans pouvoir choisir un répertoire destination comme demandé ( pourquoi ?) puis le VBA reste sur la feuille "Accueil"
Réponse = Annuler ==> Question 2 : "Etes-vous sûr de vouloir quitter"

Réponse =Oui ==> Dialogue "Enregistrer Ne pas enregistrer Annuler"
Réponse : "Ne pas enregistrer " ==> FERMETURE VIOLENTE D'EXCEL
pas sympa si un autre fichier est déjà ouvert
Réponse : "Enregistrer" .... On ne veux pas enregistrer le modèle (!!!)
Réponse : "Annuler" là, on a accès à tout le modèle (!!!)
Réponse =Non ==> retour en boucle à la question 1

Développeur :
Le développeur ne peut jamais rentrer proprement pour modification de son modèle
Il faut faire (Qst1) "Annuler", (Qst2) "Oui", (Enreg) "Annuler".... Ouf

Je pense que le fonctionnement est à revoir.
A+
Robert
 

Sauvage

XLDnaute Nouveau
Mon avis

1) Supprimez les deux msgbox de départ et créez un mode opératoire que vous placez dans un onglet du genre " Comment utiliser le fichier"

2) preferez un remplissage manuel (sans msgbox) car cela permet :
-de revenir à tout moment sur la saisi précédente sans avoir à tout recommencer (en cas d'erreur)
-de pouvoir remplir le formulaire dans l'ordre des informations qu'ils ont en leur possession.
-d'avoir un visuel direct sur les informations saisies et du résultat.

Cordialement,

...
 

Herdet

Nous a quitté
Repose en paix
Re : Guider un utilisateur pas à pas avec VBA

Je suis d'accord avec toi sur le principe de supprimer les dialogues VBA.
Pour gérer les saisies, il vaut mieux faire de la formule avec des messages, formats conditionnels, listes de validations et couleurs.
Diffuser un fichier .xlmt créé à partir du fichier modèle en .xlsm

Pour Chalafraiz, quelques idées pour la feuille Données,
1) utiliser des formats conditionnels avec formules : vert si non vide, plage de 2 valeurs,... sinon rouge)
2) si possible utiliser des listes déroulantes prédéfinies (menu Données, Validation.., Liste)
3) dans la colonne F (hors zone d'impression), mettre des messages d'erreur de saisie bien visibles
Ex : =SI(Course_maxi="";"Saisir donnée";SI(Course_maxi>30;"Trop fort, maxi=30";SI(Course_maxi<10;"Trop faible, mini=10";"")))
....
4) verrouiller toutes les cellules de la feuille
5) déverrouiller les cellules de saisies
6) protéger la feuille "Données" avec ou sans mot de passe
7) enregistrer le classeur modèle en .xslm pour les futurs développements

8) Diffuser un fichier au format .xlmt créé à partir du fichier modèle .xlsm
"Enregistrer sous..." au format .xltm dans le répertoire du modèle
Attention : Excel à la fâcheuse habitude d'enregistrer par défaut les modèles dans le répertoire
C:\Users\......\AppData\Roaming\Microsoft\Templates


Bon travail
Robert
 

Chalafraiz

XLDnaute Nouveau
Re : Guider un utilisateur pas à pas avec VBA

Bonjour,

Merci à tous pour vos réponses rapides. Je trouve aussi la procédure de pop-up longue et très déplaisante pour l'utilisateur...

#BrunoM45 : merci pour le code au niveau de la fermeture d'Excel, je ne sais pas pourquoi mais ceux que je trouvais jusqu'à présent sur internet ne fonctionnaient pas... Merci aussi pour celui d'enregistrement d'un nouveau tableur mais est-il possible de demander à l'utilisateur de suggérer un emplacement de sauvegarde ?

#Sauvage : je pense effectivement utiliser les cellules protégées, chose qui sera moins lourde à l'utilisation. La feuille Accueil est normalement là pour expliquer le fonctionnement à l'utilisateur mais je trouvais le principe de "switcher" entre deux feuilles très peu pratique... A la limite je pense rajouter des explications sur la feuille données, et garder la feuille Accueil pour les informations générales.

#Herdet : j'aime beaucoup votre idée pour la feuille de données ( 1),2),3) ) et je pense effectivement faire ça dans les cellules à droite avec une colonne qui contiendra des cellules se colorant en rouge et vert en fonction du contenu des cellules de gauche.
8) Quel est ce format .xlmt, et quel est son avantage par rapport au classeur avec macro ?

J'utilise pas mal de listes de validations notamment quand je vais chercher des données dans des catalogues (comme le choix d'un matériau etc.), et il se peut que pour certains choix de ces listes, il n'existe pas de référence dans le catalogue (ex: un catalogue qui ne contient pas de joints assez grands). Est-il possible de lancer une macro après la sélection d'une valeur dans la liste pour vérifier qu'elle n'entraîne pas des #REF! dans des plages de calculs ? Je sais coder la vérification, mais c'est le lancement de la macro que je ne sais pas comment rédiger. J'imagine un truc du type :
-lancement de la macro après sélection dans la liste
-vérification des données dans une plage
-si ok : ne rien faire
-si erreur : afficher un message d'erreur​


Autre interrogation : il existe dans les options Excel la possibilité de ne pas effectuer les calculs automatiquement. L'aide dit qu'ils sont effectuées avec F9 ou l'appui sur "calculer maintenant", mais est-il possible d'activer la fonction par macro ?
Je souhaiterais qu'ils se lancent uniquement quand l'utilisateur a terminé la saisie des données et clique sur le bouton de lancement des macros de calculs. D'ailleurs, j'imagine qu'il faudrait que je code le fait que les calculs soient manuels au lancement du classeur ? A moins que cette option soit liée au tableur et non à Excel...

Je suis tombée, en surfant un peu, sur l'outil UserForm. Je sais qu'il est possible avec de demander à l'utilisateur de sélectionner un répertoire de sauvegarde, une référence pour le nom du tableur, mais est-ce qu'après sauvegarde Excel peut fermer le modèle et travailler sur le tableur créé ?

Un grand merci à vous pour votre aide.
 
Dernière édition:

Herdet

Nous a quitté
Repose en paix
Re : Guider un utilisateur pas à pas avec VBA

Bonjour Chalafraiz,
Beaucoup de questions auxquelles, il y aura toujours des réponses !

IMPORTANT : supprimer d'abord toutes les fusions de cellules de la feuille Données car elles bloquent les copier-coller et utiliser toujours "Alignement Centrer sur plusieurs cellules"

Feuille Données : Tu peux placer la légende dans les cellules F1 à G4 au dessus des messages

Calcul auto ou manu : voir fichier exemple joint
lancement du classeur ajouter dans le Private Sub workbook_open
Ajouter : Application.Calculation = xlManual
Dans le code bouton de lancement des macros de calculs :
Ajouter : Calculate
Pour info : Application.Calculation = xlCalculationAutomatic

... Excel peut fermer le modèle et travailler sur le tableur créé ?
C'est réellement un problème car si l'on renomme automatiquement le fichier à l'ouverture, on ne peut plus travailler dans son modèle original
On peut pallier ce problème de plusieurs façons:
1) dupliquer le modèle original (MODELE-xxxxxx.xlsm) avec un nom différent pour la diffusion aux utilisateurs
2) dans le Open, détecter une pression de touche par ex : Ctrl pour savoir si l'on est en modèle ou en diffusion
3) utiliser le format modèle d'Excel .xlmt (avec macros)
Ce format est peu connu mais très utile pour protéger les fichiers originaux de développment.
Action : "Enregistrer sous..." le modèle original (MODELE-xxxxxx.xlsm) en format Excel .xlmt (avec macros)
Le lancement d'un .xltm ouvre automatiquement une copie du modèle de travail avec un indice 1, 2, 3,...
Cette copie (sans extension) étant uniquement en mémoire, il faut donc l'enregistrer où l'on veut en .xlsm

Voir les 2 fichiers joints :
- l'ouverture du modele .xlsm ne fait rien
- l'ouverture du .xltm demande un enregistrement dans n'importe quel répertoire sinon il ferme le fichier sans enregistrement.

Cordiales salutations
Robert
 

Pièces jointes

  • MODELE-Classeur technique .zip
    79 KB · Affichages: 44

Chalafraiz

XLDnaute Nouveau
Re : Guider un utilisateur pas à pas avec VBA

Bonjour,

#Herdet : j'ai placé la légende hier et je dois dire que c'est parfait. Voici ce que j'ai utilisé :
=SI(B7="";CONCATENER("Saisir une "&A7);SI(B7<10;CONCATENER("Attention, la valeur de votre "&A7&" est peut être erronée");SI(B7>300;CONCATENER("Attention, la valeur de votre "&A7&" est peut être erronée");"Ok")))
B7 étant la cellule à remplir, et A7 la cellule du nom du paramètre. J'avoue que je n'aurais peut être pas pensé à cela, qui est au final très simple et suffisant, merci !

Merci aussi pour la formule du calcul automatique ou manuel que je garde sous le coude pour le moment ou je m'occuperais du lancement des calculs.

... Excel peut fermer le modèle et travailler sur le tableur créé ?
Votre code marche parfaitement bien, mais entre temps, un collègue m'a aidé à réaliser une Userform (que j'ai adapté car elle venait du VBA du logiciel CATIA) avec un code qui fonctionne plutôt bien :

'déclaration des variables pour le répertoire d'enregistrement
Public objFolder
Public objFldrItem
Public CheminSauv

Function IsValue(obj)
'vérifie si une valeur a été renvoyé pour un objet
Dim tmp
On Error Resume Next
tmp = " " & obj
If Err <> 0 Then
IsValue = False
Else
IsValue = True
End If
On Error GoTo 0
End Function

Private Sub CommandButton3_Click()
'Ici on paramètre la fenêtre de recherche de dossier
'ATTENTION : le lien indique la racine, ce qui implique qu'on ne peut que descendre dans l'arborescence des dossiers

Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.BrowseForFolder(0, "", &H1, 0)

'si l'utilisateur décide d'annuler, on effectue un retour en arrière en appelant la fonction IsValue
If IsValue(objFolder) Then
Set objFldrItem = objFolder.self
CheminSauv = objFldrItem.Path
Else
Exit Sub
End If
End Sub

Private Sub TextBox2_Change()
'renseigne la valeur de la variable RefProjet : est égale à ce que l'on tape dans la box
RefProjet = TextBox2.Text
TextBox2.MaxLength = 10
End Sub

Private Sub CommandButton1_Click()
'ton nom de fichier
Dim MonFichier
MonFichier = CheminSauv & "\" & RefProjet & "nom" & "_Pré-Dim"
ActiveWorkbook.SaveAs Filename:=MonFichier, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End
End Sub

Ce code fonctionne mais j'ai un problème avec le nom du fichier entré dans cette TextBox2, en effet le document Excel s'enregistre très bien mais sous le nom "C:\...\nom_Pré-Dim". J'imagine que c'est parce qu'il ne prend pas en compte RefProjet = TextBox2.Text mais par quoi le remplacer ?

Sinon, pour ce qui est de la fermeture du modèle, et de l'ouverture du fichier nouvellement créé, après maintes tentatives plus ou moins laborieuses, j'ai remarqué qu'en fait Excel "enregistre sous" le modèle, et du coup le document de travail devient automatiquement le fichier nouvellement créé (C'est un peu du charabia non ?). Du coup je me demande s'il est vraiment nécessaire de demander de fermer le modèle et d'ouvrir le nouveau document, vu que celui-ci devient le classeur actif ?

Enfin, dans votre code vous utilisez ThisWorkbook.Close SaveChanges:=False pour fermer le classeur, ce qui marche parfaitement bien.
Dans mon classeur, malgré plusieurs recherches
'Annule toutes les alertes Excel
Application.DisplayAlerts = False

'Ferme le classeur
ThisWorkbook.Close


ou encore
Workbooks("NomFichier").Close SaveChanges:=False ; voir même Application.Quit

Et plus récemment avec votre formule, eh bien... Rien ne se passe, ni erreur, ni fermeture. Qu'est ce qui peut faire qu'un code pourtant bien adapté d'un fichier à l'autre, ne fonctionne pas ?

Merci d'avance
 

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 996
Membres
103 423
dernier inscrit
Guyom GIL