|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Bonjour,
Je suis nouvelle sur le forum et débutante en VBA. J'ai un classeur excel 2007 qui contient cinq feuilles: - Feuille1: sommaire (contient des liens hypertextes vers les autres feuilles) - Feuille2 à Feuille 4: noms des services: comptabilité, achat, vente: colonne A contient des dates du 1/1/12 au 31/12/12, les autres colonnes contiennent des noms de matériel. - Feuille5: récapitulatif Ma question est la suivante: J'aimerais créer un formulaire au niveau du sommaire, qui permet de saisir des données au niveau des feuilles "comptabilité", "achat", "vente", grâce à quatre listes déroulantes: - liste déroulante 1: permet de choisir le nom du service (et donc de spécifier la feuille concernée) - liste déroulante 2: permet de choisir le nom du matériel dans le service (et donc de spécifier la colonne voulue dans la feuille retenue à l'étape 1) - liste déroulante 3: permet de choisir la date ( et donc de spécifier la ligne où les données doivent être saisies pour le nom retenu à l'étape 2) - liste déroulante 4: permet de saisir (au niveau de la cellule délimitée par les listes déroulantes 2 et 3) une donnée parmi les choix suivants: fonctionnel, en panne, à réformer. Je suis nulle en VBA et on m'a conseillé d'utiliser ce langage pour mettre au point le formulaire. J'ai parcouru plusieurs forums mais je n'arrive pas à résoudre le problème. Je vous serais vraiment reconnaissante de bien vouloir m'éclairer sur la démarche à faire. Merci d'avance
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Bonjour
Il faudrait d'abord se pencher sur les abc du langage (après une bonne réflexion sur la conception du fichier) Je pencherai vers une seule feuille avec une colonne supplémentaire du Service au lieu d'une feuille par service. Ci-joint un lien pour les userform http://excel.developpez.com/cours/?page=prog#userform
__________________
Cordialement. |
|
|
20
|
|
|
#3 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Merci, mais la disposition en feuilles est nécessaire. D'abord parce que chaque service contient beaucoup de références de matériel, ensuite parce que dans chaque feuille d'autres données et tableaux devront être rajoutés.
j'ai simplifié en ne gardant que l'ossature pour d'une part essayer de comprendre la démarche, et d'autre part ne pas trop vous ennuyer avec trop de données , après j'essaierai d'adapter moi-même à l'intégralité du classeur. Si vous avez une idée, je suis preneuse. Mes notions en VBA s'arrêtent à comment créer un formulaire simple, et créer un bouton de commande pour l'appeler, ou à créer des procédures simples via l'enregistreur de macro le plus souvent. |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
As tu étudié un peu le lien que je t'avais montré?
Commence par attaquer cet étude en commençant ton fichier et si tu as une question précise, le forum est là pour t'épauler.
__________________
Cordialement. |
|
|
20
|
|
|
#5 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
En fait, j'avais retrouvé cette adresse il y a trois jours. J'ai regardé beaucoup de liens et téléchargé certains sous forme pdf pour les garder et les étudier à tête reposée.
J'avoue que c'est très utile mais je n'y trouve pas de réponse à mon souci. Ou alors je ne l'ai pas vue. La question est double: Comment saisir une donnée à partir d'une liste déroulante dans une cellule qui se retrouve dans la plage (feuille X, colonne y, cellule z)? Comment agencer dans un formulaire une série de menus déroulants qui se complètent, un peu à la manière de filtres successifs? Le premier désignerait une des feuilles du classeur, le second les intitulés de certaines colonnes de la feuille ainsi obtenue, le troisième la ligne (ici la date) où les données doivent être reportées. Quand au quatrième il contiendrait une liste de choix correspondants aux données à saisir. Je ne sais pas si c'est clair, mais j'espère pouvoir trouver une solution sur ce forum, ça fait un bon bout de temps que je rame |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Rusée
Commence par ajouter une ComboBox à ton userform Une autre piste en relation avec l'un des aspects http://excel.developpez.com/faq/inde...omboboxCascade
__________________
Cordialement. |
|
|
20
|
|
|
#7 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
hhhh non, je t'assure, il n'y a pas de ruse
je t'avertis, ça prendra un bon bout de temps avant que je ne décortique tout ça Merci beaucoup pour ton intérêt Rebonsoir, Je suis vraiment désolée du dérangement. Après plusieurs recherches par-ci par-là, voici une première ébauche de ce que je voudrais faire. Maintenant le problème qui se pose, c'est pour le remplissage des 3 derniers menus déroulants, sachant que si je sélectionne par exemple (service achat) comme nom de service, seuls les intitulés des colonnes de cette feuille (service achats) doivent apparaître dans le menu Référence du matériel, et ainsi de suite. Merci encore de votre patience
|
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Voila un début (remplissage de la ComboBox2)
Code :
A tester Code :
__________________
Cordialement. |
||||
|
|
20
|
|
|
#9 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
C'est excellent!! Merci beaucoup beaucoup!
![]() ![]() Bon, je n'ai pas compris grand chose mais ça marche! As-tu une idée de la ligne de commande à insérer si je veux arrêter l'ajout des colonnes à la première valeur vide en partant de A1? Encore une fois merci, depuis plusieurs jours, c la première fois que je sens que ça commence à avancer! Bon, je te dis bonne nuit et à demain! et encore merci !! Mille mercis Mercatog, tu es un champion! Je n'espérais pas tant en réalité en me connectant à ce forum! mais je ne suis pas déçue! Le deuxième code marche super bien! bien que je ne comprends pas l'utilité de la MsgBox avec le numéro de la colonne à la fin Encore une fois merci et bonne nuit! A demain j'espère, le temps que tout ça mouline dans mon esprit
|
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Bonjour
La msgbox était simplement pour te montrer qu'on peut connaitre le n° de colonne du matériel choisi. Pour utiliser ultérieurement la colonne, on va utiliser une variable globale comme ci-après. PS1: J'ai commenté le code pour la compréhension. PS2: Ce coup de pouce, ne t’épargnera pas de commencer toi même par étudier les fondements du langage. En bas, tu as la FAQ. PS3: j'insiste que tu peux utiliser une seule feuille avec une colonne supplémentaire indiquant le service. Pour le code, la variable global LaColonne permet de mémoriser le n° de colonne choisi pour toute utilisation ultérieure. Code :
__________________
Cordialement. |
||
|
|
20
|
|
|
#11 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Bonjour,
Alors, tout d'abord je te remercie infiniment pour les explications, même pour moi, tout me semble très clair à présent J'ai également suivi ton conseil, je me suis penchée plus sérieusement sur la FAQ et consulté plusieurs sources, finalement j'ai réussi à obtenir le fichier ci-joint. Donc je récapitule les progrès obtenus grâce à ton aide: 1- je saisis le nom du service dans le comboBox1 2- ensuite je peux choisir dans le comboBox2 le nom du matériel en utilisant le code que tu m'as expliqué , 3- après je sélectionne la date sur le contrôle calendrier et je la fais apparaitre dans le comboBox3 en cliquant sur le bouton que j'ai rajouté à cet effet. 4- Ensuite je peux saisir l'état du matériel dans un menu déroulant ComboBox4. J'ai inscrit les items en dur. 5- Enfin je clique sur le bouton ajouter ce qui a pour effet deux choses: d'abord vérifier que tous les ComboBox sont remplis sinon renvoie message d'erreur, d'autre part si tous les champs sont renseignés effacer le formulaire en mettant le focus sur le ComboBox1. 6- Le bouton Annuler sert à quitter le formulaire, la touche Echap est aussi possible désormais. On peut dire que les liens que tu m'as proposée et tes conseils ont servi à qqc ![]() Maintenant, la question qui reste à résoudre est la suivante: ---> comment à l'étape 5 après clic sur ajouter: A- Aller sur la feuille sélectionnée dans le comboBox1 (j'imagine un code du style "Set Ws = Worksheets(Me.ComboBox1.Value)"?) B-Trouver la cellule qui contient la valeur ComboBox3.Text? C-Récupérer le numéro de la ligne correspondante: disons par exemple: numLigneDate D-Enfin inscrire dans la cellule (numLigneDate, LaColonne) le choix retenu dans le ComboBox4? Là je sèche complètement! La dernière étape avant de tout reprendre pour mon classeur original Encore une fois merci pour ton aide précieuse Mercatog! J'espère que tu pourras encore me sauver sur ce coup avant de te débarrasser de moi
|
|
|
00
|
|
|
#12 | |||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Bon, pour la ComboBox3, je ne vois pas l'utilité, tu pourra utiliser directement ton contrôle Calendrier pour fixer la date
Citation:
(la propriété ListIndex est 0 pour le premier item, 1 pour le 2ème item...) Pour le 5, essaie quelque chose comme ceci (Le contrôle Calendar est absent chez moi pour mes tests, je l'ai remplacé par un contrôle MonthView) PS: Au lieu de pré remplir les colonnes A des feuilles par les dates, le code ci-après les ajoute au fur et à mesure et donc même sans dates, ça reste fonctionnel. Code :
__________________
Cordialement. |
|||
|
|
20
|
|
|
#13 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Mercatog, tu es un génie! Et je n'ai pas de mots pour te remercier d'avoir guidé une débutante comme moi dans ce projet qui me semblait impossible au début
Je te suis vraiment reconnaissante! Chapeau! ![]() J'ai légèrement modifié le code, très bien expliqué d'ailleurs, que tu m'as proposé. En PJ ma version définitive. Voici pourquoi je me suis permise de faire ces modifications. Le bouton pour ajouter la date dans la comboBox3 servait en quelque sorte à vérifier la date et éviter toute erreur d'inattention de ma part. Les dates sont extrêmement importantes dans mon cas et les pannes de matériel doivent être renseignées avec exactitude. Ensuite, les situations doivent être arrêtées quotidiennement, d'où l'intérêt de renseigner au préalable toutes les dates de l'année, car servant par la suite à alimenter des statistiques et des tableaux de bord ainsi que des états de synthèse. Enfin, vu la taille du classeur à la fin de l'année, chaque classeur est tenu pour une durée d'un an. Il ne faut surtout pas rajouter des dates au-delà du 31 décembre 2O12 ou en-deçà du 01 janvier 2012. J'espère que je ne t'ai pas trop ennuyé avec mon ignorance mais grâce à toi et à ce forum et les nombreux renseignements qu'il contient, je me sens beaucoup plus instruite maintenant.Encore une fois un grand merci pour ta patience, ta générosité et tes conseils
|
|
|
00
|
|
|
#14 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Bonjour
Tu es sur la bonne voie et de loin méthodique (apprécié). Tu ne te contente pas de copier/ coller comme malheureusement plusieurs. J'ai une petite proposition à te présenter (à propos de Combo3) Une ComboBox est un contrôle destiné à choisir un item parmi plusieurs et ce n'est pas ton cas. Je te propose de supprimer ComboBox3 et le remplacer par un simple TextBox (disons TextBox1) et en plus utiliser l'évènement Click de ton Calendrier pour renseigner la date dans TextBox1 (pour ta vérification) Donc tu n'auras pas besoin de ton ToggleButton1 Le code modifié aurait l'allure suivante: Code :
__________________
Cordialement. |
||
|
|
20
|
|
|
#15 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Bonsoir Mercatog!
Un grand merci pour ton compliment, c'est un témoignage dont je suis fière Je trouve ta proposition tout à fait géniale!! Je l'ai donc immédiatement intégrée au classeur. J'ai également introduit quelques ajouts, notamment la nécessité de renseigner un mot de passe masqué dans une inputbox avant de pouvoir saisir les données, une mesure de sécurité en plus Le formulaire est donc au point, je l'ai testé sur le classeur original et je peux t'affirmer qu'il fonctionne à merveille ![]() Je t'en suis vraiment reconnaissante. Cela n'a été possible que grâce à ton aide et tes conseils avisés ![]() Je sais que le sujet est marqué comme résolu, mais je laisse quand même une copie du classeur test, histoire de partager avec les autres. Ne pas tenir compte du deuxième formulaire, celui-là n'est pas fini, je viens juste de récupérer un code que j'essaierai d'adapter pour qu'il puisse in fino donner accès à des états de synthèse. Voilà voilà je te souhaite une très bonne nuit et à bientôt! Et merci encore une fois! |
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Voilà, je viens de finir l'adaptation du code du deuxième formulaire.
Je mets donc en partage le classeur test final. Jettes-y un coup d’œil et dis moi ce que tu en penses, même si je n'ai que le mérite de copier Bonne nuit pour de bon cette fois! ![]()
|
|
|
00
|
|
|
#17 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Désolée d'abuser, après ça je te laisse tranquille, promis!
Sur le dernier fichier que j'ai posté, j'ai essayé de consolider les données des trois feuilles "achat", "vente" et "comptabilité" en créant, avec formules et tout, une feuille "fonctionnalité en jours" qui illustre le nombre de jours où un matériel est fonctionnel, en panne, ou en situation de réforme. La fonction consolidation d'Excel ne pouvant pas être utilisée à cause de la présence de données non numériques (en panne, réforme), j'ai dû recourir à une formule conditionnelle. Tout ça pour pouvoir avoir un état de synthèse obtenu en cliquant sur le bouton de commande "fonctionnalité en jours" visible dans la feuille "sommaire". Ma question est la suivante: Est-il possible d'obtenir le même résultat en cliquant sur le bouton de commande, via VBA, sans avoir à créer la feuille "fonctionnalité en jours"? Tout en ayant la possibilité d'insérer de nouveaux types de matériel de manière automatique ni devoir tout modifier manuellement? Le problème qui se pose en effet avec le fichier actuel, c'est que lorsque je veux insérer un nouveau matériel, par exemple dans le service achat, je dois tout remodifier à la main dans la feuille "fonctionnalité en jours". J'espère que tu as des indices pour m'aider à trouver une solution à ce problème, mais quoi qu'il en soit, merci d'avance. Je sais que j'ai abusé.. Très bonne nuit à toi. |
|
|
00
|
|
|
#18 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Bonjour
Tout d'abord, il faudrait lire la charte du forum pour respecter les règles. Ta question initiale a été résolue. maintenant tu as une autre question qui n'a pas de lien avec la question initiale. Il faudrait créer un autre sujet avec la nouvelle question. Tu aurais plus de chance d'avoir des réponses. Néanmoins, je ré insiste sur le fait que ta conception de ton fichier, malgré tes arguments, est à revoir et j'insiste qu'une seule feuille de stockage des données, après on pourra faire tout type d'analyse. Remarque que ainsi, Excel te permet une plus grande flexibilité d'outils d'analyse et de synthèse (Filtres, TCD entre autre)
__________________
Cordialement. |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Camelia Étudiant Inscription : décembre 2011 Messages : 13 ![]() |
Aïe! je n'avais pas fait attention au fil de discussion. La question s'éloigne en effet du sujet initial. Désolée!
Bon, je vais essayer d'explorer ta proposition et je reviens sur le forum en cas de problème Encore une fois merci
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com