XL 2016 Créer un bouton qui copie un autre bouton et une feuille

Fipat

XLDnaute Occasionnel
Bonjour,

Je cherche à créer un bouton via un autre bouton.
Je m'explique.

J'ai une feuille avec plusieurs boutons qui sont des clients et ces boutons pointent vers des feuilles qui elles même contiennent des boutons et donc des macros.
Je voudrais pouvoir créer d'autres boutons clients via un un bouton et qu'il me copie dans une nouvelle feuille ma feuille de base (Nouveau Client).
Le souci est de mettre un nouveau nom à tous ça (feuille et macro) et est-ce qu'il est possible.
Voici un exemple.
Merci pour votre aide.
 

Pièces jointes

  • Classeurtest.xlsm
    86.4 KB · Affichages: 37

sousou

XLDnaute Barbatruc
Bonjour
La solution est de positionner des macros dans la feuille modèle ("nouveau client) qui passeront en paramètre la feuille concernée.
Explication pas très clair, mais regarde le fichier joint
 

Pièces jointes

  • Classeurtest.xlsm
    89.5 KB · Affichages: 64

Fipat

XLDnaute Occasionnel
Bonjour sousou
Merci pour ton aide.
C'est bien plus rapide que ce je pouvais faire et pas de plantage :)
Est-il possible qu'un nouveau bouton (objets avec lien hypertexte) sous Sommaire_Client se créer en même temps que la nouvelle feuille ?

Sais-tu également si nous sommes limités à un nombre de macro par classeur ?
Si mon projet j'arrive à 10 macros par client. Ça pourra être supporté pour un projet de 40 clients ?
Merci.
 

sousou

XLDnaute Barbatruc
Bonjour
Tout est possible , un peu plus d'explications avec exemple seraient bien utiles.
Pa s de limites de macro mais en fonction du projet (description) il est possible de les limités pour une meilleur visibilité.
essai de décrire un peu plus ton projet
 

Fipat

XLDnaute Occasionnel
Désolé si je ne suis pas assez explicite.
La création de la nouvelle feuille pour un nouveau client et très bien, mais je voudrais qu'un nouveau bouton se crée dans la Feuille Sommaire et qie le lien hypertexte soit automatique.

Ensuite je voudrais savoir si il est possible que les macros de Dupont soit automatiquement valide pour Durand, Dubois... au fur et à mesure de création de nouveau client. Et non tout refaire manuellement à chaque nouveau client.

Voici un exemple plus concret.

Merci.
 

Pièces jointes

  • Classeurtest(1).xlsm
    112.2 KB · Affichages: 36

sousou

XLDnaute Barbatruc
Bon
Etant donné l'état du fichier je te propose de repartir au début, et je te fait une proposition qui pourrait ressembler à ce que je comprend dans ton fichier.
Informations complémentaires:
Tu fabriques une feuille client en fonction de la feuille nouveau client?
Tu veux ajouter un bouton dans la feuille sommaire pour ce client?
Quid du reste : Bouton img: comment sont t'elles incluses et où?
bouton: création d'une nouvelle fiche? ca fait quoi?
Précision sur le tri?
 

Fipat

XLDnaute Occasionnel
Ah si catastrophique ?

Tu fabriques une feuille client en fonction de la feuille nouveau client? ► Oui

Tu veux ajouter un bouton dans la feuille sommaire pour ce client? ► Oui

Bouton img: comment sont t'elles incluses et où? ► Ce bouton sert à supprimer l'image de la feuille si par exemple je décide de supprimer toutes les données. Il faut donc pour cela créer des fiches "Création d'une nouvelle fiche", si j'en créer 500 et que je veux tout supprimer alors les images restes, donc pour toutes les supprimer d'un coup je le fait avec le bouton IMG.

bouton: création d'une nouvelle fiche? ca fait quoi? ► Il sert justement à incrémenter la feuille, si tu cliques sur ce bouton je vais copier L2:V31 de Sommaire et copier à la suite dans la feuille client. (ceci pour lui imprimer ou lui envoyer par mail(.pdf))

Précision sur le tri? ► La partie de droite de la feuille client permet de récupérer des infos désirées, et un tri via un clique et plus facile. Il peut y avoir plus de 500 fiches rapport de contrôle par feuille client, un tri est nécessaire. Exemple un client me demande le rapport avec le N° interne xxx le tri par un bouton me permettra de le retrouver plus vite et avec le ctrl+f me rendre à sa fiche pour lui imprimer ou envoyer par mail au format .pdf par exemple.

Je m'y prend peut-être mal :rolleyes:
 

sousou

XLDnaute Barbatruc
Bonjour
Voici un exemple en pièce jointe.
Toutes les macros sont dans le module1
l'appel de ces dernières est fait par chaque feuille qui va renvoyer les éléments nécessaires
Pour plus de simplicité j'ai remplacé les bouton d'appels des clients par un doubleclick sur le nom
J'ai ajouté par doubleclick sur référence la visualisation du rapport en haut de page
Le bouton img nettoie entièrement la page (pas sur que c'est ce que tu cherches?)
Pour les tris, j'ai opté pour une seule macro le numéro de la clés de tri sera fonction du nom du bouton appelant la macro, j'ai donc renuméroté les bouton tri de button 13 à button 18

Examine celà pour bien comprendre comment ont peu limiter les lignes de codes
 

Pièces jointes

  • Classeurtest.xlsm
    76.9 KB · Affichages: 66

Fipat

XLDnaute Occasionnel
Bonjour Sousou,

Milles merci !
Je comprends mieux comment procéder et effectivement j'étais très mal partit avec mon fichier.
Je vais essayer de comprendre la logique de tout ça. Je m'aperçois qu'effectivement on peut vraiment réduire les lignes de code, donc je vais bien me pencher sur ton travail.
Pour le bouton IMG c'est parfait, c'est même encore bien mieux !

Une question si tu veux bien.
Pourquoi dans la zone L2:V31 de Sommaire le clic sur des cellules fusionnées me renvoie une erreur ?
Erreur qui disparait si je supprime les fusions.
Je m'aperçois aussi que cette erreur reviens si je sélectionne plusieurs cellules dans cette zone, comme par exemple pour fusionner

Le débogage me renvoie ici.
If Target.Column = 2 And Target.Row > 7 And Target <> "" Then

Mais bon c'est parfait un vrai grand merci :)
Bonne soirée.
 

sousou

XLDnaute Barbatruc
Modifies ainsi pour passer outre les selections multiples ou fusionnées
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count = 1 Then
If Target.Column = 2 And Target.Row > 7 And Target <> "" Then
On Error GoTo erreur
Sheets(Target.Value).Activate
On Error GoTo 0
End If
Exit Sub
End If
Exit Sub
erreur:
MsgBox "Cette feuille n'existe plus"
End Sub
 

Fipat

XLDnaute Occasionnel
Super ça marche !
Peux-tu stp m'en dire plus sur celle-ci ?

Code:
Sub visu(feuille, num)
With feuille
Set k = .Columns(8).Find(num)
If k Is Nothing Then MsgBox ("Ce rapport n'existe pas."): Exit Sub
Set debfiche = k.Offset(-11, -7)
Set fiche = .Range(.Cells(debfiche.Row, 1), .Cells(debfiche.Row + 29, 11))
fiche.Select

ActiveWindow.ScrollRow = debfiche.Row
End With
End Sub

J'ai modifié mon fichier de base et elle ne fonctionne plus (Ce rapport n'existe pas.).
Je pense que la modification suivante est la cause ?

Déplacement de la fiche dans la feuille sommaire de L2:V31 à D7:N36

Merci.
 

sousou

XLDnaute Barbatruc
Bonjour
Ce code non prévu à ta demande, sert à remonter le rapport en haut de page.
Il est appelé par un doubleclick sur la colonne 13(reference de mémoire sur la feuille sommaire)
Il cherche dans cette même fuille en colonne 8 le numéro de référence, et vient remonter le rapport.
A l'origine du fichier:
Le numéro de référence se trouve en colonne 8,
un rapport est composé de 30 lignes, et de 12 colonnes:
Set fich = .Range(.Cells(debfiche.Row, 1), .Cells(debfiche.Row + 29, 11)),

La première cellule du rapport se trouve à -11 lignes et -7 colonnes du numéro de référence:
Set debfiche = k.Offset(-11, -7)
Si tu dois modifier le format de ton rapport régulièrement, il faut peut-être trouver quelque chos de plus subtile.
En attendant tu peut rentrer ces paramètres en constantes ce qui sera plus facile à modifier
Exemple:
const lrapport=30
const hrapport=12
conts deblrapport=-11
const debhrapport=-7
Set fich = .Range(.Cells(debfiche.Row, 1), .Cells(debfiche.Row + lraport-1, hraport-1)),
Set debfiche = k.Offset(deblrapport, debhrapport)
Je n'ai pas contrôlé ce que je viens d'écrire ( à ajuster peut-être)
 

Fipat

XLDnaute Occasionnel
Bonjour :)

Alors déjà tu m'as fais gagner un temps énorme et en plus un travail bien plus propre, j'ai travaillé sur tes codes et je commence à comprendre le système. Je ferais des tests avec d'autres fichiers afin de m'entrainer.
Merci pour tes explications.
Cela ma permis de récupérer la fonction. La modification était ici et elle sera maintenant fixe. Je vais voir pour la dupliquer pour d’autres colonnes.

Ici
Code:
Set k = .Columns(9).Find(num)

et ici :
Code:
Set debfiche = k.Offset(-11, -8)

Vraiment un grand merci pour ton aide et tes explications, cela ma permis d'une d'avancer et d'en apprendre pas mal !

Bonne journée.
 

Discussions similaires

  • Question
Microsoft 365 Excel365
Réponses
2
Affichages
154
Réponses
4
Affichages
175

Statistiques des forums

Discussions
311 711
Messages
2 081 794
Membres
101 817
dernier inscrit
carvajal