[365] Macro ouvrir une feuille créée par une autre macro
Josvin
-
Josvin -
Josvin -
Bonjour,
Bonjour à tous,
J'aimerais savoir s'il est possible de créer une macro permettant d'ouvrir une feuille qui n'est pas encore créée (car créée par le biais d'une autre macro).
Je m'explique :
Dans ma base de données, pour chaque personne (une par ligne), j'aimerais qu'il soit possible (en cliquant sur un bouton de commande) de créer une feuille (qui sera un formulaire à remplir, donc avec un format prédéfini), et qu'en cliquant sur un autre bouton, on puisse accéder à ce formulaire pour le consulter et/ou le compléter.
En effet, si je me contente d'un seul bouton, soit il générera un nouveau formulaire à chaque clic (et on ne pourra donc plus le consulter), soit je serai obligé de créer tous les formulaires en avance (sachant que toute personne n'aura pas obligatoirement un formulaire, et aussi que c'est relativement fastidieux...).
Je vous joins mon tableau avec les boutons tels que je les aimerais, sans les macros. Et avec un formulaire déja créé au format spécifique pour exemple.
https://www.cjoint.com/c/JJni4WosHFg
Merci d'avance pour votre aide :)
Josvin
Bonjour à tous,
J'aimerais savoir s'il est possible de créer une macro permettant d'ouvrir une feuille qui n'est pas encore créée (car créée par le biais d'une autre macro).
Je m'explique :
Dans ma base de données, pour chaque personne (une par ligne), j'aimerais qu'il soit possible (en cliquant sur un bouton de commande) de créer une feuille (qui sera un formulaire à remplir, donc avec un format prédéfini), et qu'en cliquant sur un autre bouton, on puisse accéder à ce formulaire pour le consulter et/ou le compléter.
En effet, si je me contente d'un seul bouton, soit il générera un nouveau formulaire à chaque clic (et on ne pourra donc plus le consulter), soit je serai obligé de créer tous les formulaires en avance (sachant que toute personne n'aura pas obligatoirement un formulaire, et aussi que c'est relativement fastidieux...).
Je vous joins mon tableau avec les boutons tels que je les aimerais, sans les macros. Et avec un formulaire déja créé au format spécifique pour exemple.
https://www.cjoint.com/c/JJni4WosHFg
Merci d'avance pour votre aide :)
Josvin
Configuration: Windows / Chrome 85.0.4183.121
A voir également:
- [365] Macro ouvrir une feuille créée par une autre macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment ouvrir un fichier epub ? - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Ouvrir fichier .bin - Guide
- Ouvrir fichier .dat - Guide
5 réponses
Bonjour,
voici une méthode beaucoup plus simple qu'une multitude de bouton!
https://www.cjoint.com/c/JJnjRsYRWZQ
voici une méthode beaucoup plus simple qu'une multitude de bouton!
https://www.cjoint.com/c/JJnjRsYRWZQ
Wow ! Magnifique !
Je suis curieux de savoir comment tu as fait ce prodige ? Histoire que je puisse le reproduire sur mon fichier original ^^
Merci encore !
Je suis curieux de savoir comment tu as fait ce prodige ? Histoire que je puisse le reproduire sur mon fichier original ^^
Merci encore !
Hum... oui, en effet. Je m'incline dans ce cas, restons sur le double clic :-)
Du coup, comment puis-je faire pour l'implémenter à mon fichier (qui contient beaucoup plus de données, forcément) ? Car là où je savais créer des macros par le simple onglet "enregistrer une macro", je maitrise beaucoup moins l'écriture manuelle en VBA...
Du coup, comment puis-je faire pour l'implémenter à mon fichier (qui contient beaucoup plus de données, forcément) ? Car là où je savais créer des macros par le simple onglet "enregistrer une macro", je maitrise beaucoup moins l'écriture manuelle en VBA...
Voici le code avec les commentaires. Il suffit d'être attentif:
Bon courage, n'hésite pas si tu rencontres un problème
@+ Le Pivert
Option Explicit 'déclaration des variables Dim Ws As Worksheet Dim nom As String 'nom du client Dim ligne As Long Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("E6:E12")) Is Nothing Then ' adapter la plage On Error Resume Next ligne = Target.Row 'ligne cliquée nom = Range("A" & ligne).Value 'nom du client creer ' crée le Formulaire au nom du client End If If Not Intersect(Target, Range("F6:F12")) Is Nothing Then ' adapter la plage On Error Resume Next If Target.Value = "" Then Exit Sub ligne = Target.Row 'ligne cliquée nom = Range("A" & ligne).Value 'nom du client Sheets(nom).Activate 'active la feuille au nom du client End If End Sub Private Sub creer() 'Boucle sur les feuilles du classeur. For Each Ws In ThisWorkbook.Worksheets If Ws.Name = nom Then 'même nom MsgBox "Une feuille existe dèjà à ce nom!", vbExclamation, "Ajout feuille" Exit Sub End If Next Ws 'copie feuille modèle Sheets("Formulaire").Copy After:=Sheets(Sheets.Count) 'ajoute en dernier 'renommer la feuille modèle(formulaire) avec le nouveau nom Sheets(Sheets.Count).Name = nom Sheets(nom).Range("C4").Value = nom 'mettre le nom du client dans le formulaire Sheets(nom).Range("F3").Value = Sheets("FLOWA").Range("D" & ligne).Value 'mettre la date dans le formulaire Sheets("FLOWA").Range("F" & ligne).Value = nom 'mettre le nom du client pour ouvrir sa feuille End Sub Sub supprimer() 'supprime toutes les feuilles sauf "FLOWA" et "Formulaire" 'Boucle sur les feuilles du classeur. For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "FLOWA" And Ws.Name <> "Formulaire" Then Application.DisplayAlerts = False 'evite message d'alerte Ws.Delete Application.DisplayAlerts = True End If Next Ws End Sub
Bon courage, n'hésite pas si tu rencontres un problème
@+ Le Pivert
Merci beaucoup pour les éclaircissements.
En étant attentif, j'arrive à peu près à comprendre. Si je comprends bien, il me suffira d'implémenter cette macro à chacune de mes feuilles (en faisant un copier coller pour chaque feuille), en adaptant simplement les plages de données, c'est bien ça ?
Je vais tenter et je reviendrai vers toi si jamais je coince quelque part :-)
En étant attentif, j'arrive à peu près à comprendre. Si je comprends bien, il me suffira d'implémenter cette macro à chacune de mes feuilles (en faisant un copier coller pour chaque feuille), en adaptant simplement les plages de données, c'est bien ça ?
Je vais tenter et je reviendrai vers toi si jamais je coince quelque part :-)
Si tu as plusieurs feuilles avec des données oui.
Il suffit de te mettre sur la feuille concernée et faire Alt F11 pour accéder à son module.
Mais si tu n'as qu'une seule feuille avec des données il suffit de faire comme le modèle envoyé
Je ne comprends pas que tu ais plusieurs feuilles, vu que sur le Formulaire il y a un bouton Retour qui te renvoi sur la feuille principale
Il suffit de te mettre sur la feuille concernée et faire Alt F11 pour accéder à son module.
Mais si tu n'as qu'une seule feuille avec des données il suffit de faire comme le modèle envoyé
Je ne comprends pas que tu ais plusieurs feuilles, vu que sur le Formulaire il y a un bouton Retour qui te renvoi sur la feuille principale
Je bloque sur une petite chose :
Le fait que le formulaire créé par double clic prenne le nom de la colonne A de ma feuille me bloque. J'aimerais rajouter un petit qqch au bout, ne serait-ce qu'une lettre, comme "nom A".
Que faudrait-il que je mette à la place de "nom" dans :
Sheets(Sheets.Count).Name = nom
pour que ce soit le cas ?
Merci encore :-)
Le fait que le formulaire créé par double clic prenne le nom de la colonne A de ma feuille me bloque. J'aimerais rajouter un petit qqch au bout, ne serait-ce qu'une lettre, comme "nom A".
Que faudrait-il que je mette à la place de "nom" dans :
Sheets(Sheets.Count).Name = nom
pour que ce soit le cas ?
Merci encore :-)
Merci beaucoup, ça fonctionne ! J'ai réussi à implémenter cette macro à mon fichier :-)
Je suis dorénavant confronté à un autre problème (c'était à prévoir, débutant en VBA, désolé...) :
Comme je l'ai dit, j'ai plusieurs formulaires à créer de la même manière par feuille. J'ai donc copié collé la même macro en entier, sur la même page de l'éditeur puisque je reste sur la même feuille, en ajustant les variables (plages de données, noms des fomulaires) pour correspondre à mon nouveau formulaire.
Mais cela ne fonctionne pas, je pense que les deux macros (sur la même feuille, donc) font conflit entre elles. J'obtiens un message d'erreur :
"Erreur de compilation :
Nom ambigue detecté : Worksheet_BeforeDoubleClick"
J'imagine donc qu'il y a redite entre les deux macros. Mais je ne sais pas comment les imbriquer. Aurais-tu une idée ?
Je suis dorénavant confronté à un autre problème (c'était à prévoir, débutant en VBA, désolé...) :
Comme je l'ai dit, j'ai plusieurs formulaires à créer de la même manière par feuille. J'ai donc copié collé la même macro en entier, sur la même page de l'éditeur puisque je reste sur la même feuille, en ajustant les variables (plages de données, noms des fomulaires) pour correspondre à mon nouveau formulaire.
Mais cela ne fonctionne pas, je pense que les deux macros (sur la même feuille, donc) font conflit entre elles. J'obtiens un message d'erreur :
"Erreur de compilation :
Nom ambigue detecté : Worksheet_BeforeDoubleClick"
J'imagine donc qu'il y a redite entre les deux macros. Mais je ne sais pas comment les imbriquer. Aurais-tu une idée ?
Donc toutes les donnée sont sur la même feuille. Tu as 3 formulaires, il faut donc répéter le code avec les nouvelles données dans Worksheet_BeforeDoubleClick. Comme je l'ai fait pour ouvrir une nouvelle feuille :
ou
Je dois donc reproduire le même schéma pour chacun de mes départements (et avec 3 formulaires différents pour chaque personne au lieu d'un... ^^)
je ne comprends toujours pas, si tu as 3 feuilles avec des données il faut te mettre sur chacune des feuilles et faire Alt F11 pour accéder au module de la feuille et là tu colles le code en adaptant les données
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '1er formulaire If Not Intersect(Target, Range("E6:E12")) Is Nothing Then ' adapter la plage On Error Resume Next ligne = Target.Row 'ligne cliquée nom = Range("A" & ligne).Value 'nom du client creer ' crée le Formulaire au nom du client End If '2eme formulaire If Not Intersect(Target, Range("L6:L12")) Is Nothing Then ' adapter la plage On Error Resume Next ligne = Target.Row 'ligne cliquée nom = Range("J" & ligne).Value 'nom du client adapter la cellule creer ' crée le Formulaire au nom du client End If 'etc... pour ouvrir pareil
ou
Je dois donc reproduire le même schéma pour chacun de mes départements (et avec 3 formulaires différents pour chaque personne au lieu d'un... ^^)
je ne comprends toujours pas, si tu as 3 feuilles avec des données il faut te mettre sur chacune des feuilles et faire Alt F11 pour accéder au module de la feuille et là tu colles le code en adaptant les données
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai bien plusieurs feuilles, en effet.
Pour imager, mettons que j'ai une feuille par département géographique, et que l'exemple sur lequel tu as travaillé ne correspondait qu'à un seul département. Je dois donc reproduire le même schéma pour chacun de mes départements (et avec 3 formulaires différents pour chaque personne au lieu d'un... ^^)
Le bouton Retour étant présent pour quitter le formulaire et revenir à la plage de données du département correspondant.
Pour imager, mettons que j'ai une feuille par département géographique, et que l'exemple sur lequel tu as travaillé ne correspondait qu'à un seul département. Je dois donc reproduire le même schéma pour chacun de mes départements (et avec 3 formulaires différents pour chaque personne au lieu d'un... ^^)
Le bouton Retour étant présent pour quitter le formulaire et revenir à la plage de données du département correspondant.