Dupliquer UserForm

Résolu
Bonjour à tous,
Avant d’exposer mon problème je souhaiterais présenter mes meilleurs vœux à toute la communauté de CCM.
On me demande de réaliser un classeur pour tenir la comptabilité d’une association. Il y aura une feuille par mois, plus une feuille récapitulative par rubrique et une feuille pour le bilan annuel.
Pour chaque feuille il y aura deux UserForme, un pour les recettes et un autre pour les dépenses.
Je vais utiliser des UserForm assez complexes dans leur composition pour la saisie des différents éléments. Chaque UserForm sera appelé par un simple clic dans une cellule d’une colonne ( recette ou dépense). J’ai fait un classeur teste que vous pouvez télécharger avec ce lien :
http://www.cjoint.com/c/GAdi13CwEYg
Afin de ne pas perdre trop de temps à les recréer je souhaiterais savoir s’il est possible de dupliquer un UserForm :
- Sur une même feuille
- Sur des feuilles différentes
Si oui comment fait-on.
Merci d’avance pour votre aide.
Cordialement.
Mistral

3 réponses

  1. Contributeur
    Bonjour Mistral_13200 et bonne année à toi,

    Un méthode assez simple :
    - dans la même session tu ouvres un autre classeur vierge.
    - tu sélectionnes ta feuille formulaire et tu la glisse dans le nouveau.
    - tu modifies le nom pour le nouveau formulaire
    - tu sélectionnes ce userform et tu le glisse dans ton classeur
    Tu as tes 2 formulaires dans ton classeur et tu laisse tomber le classeur vierge.

    Bonne journée.

    PS:
    Il y aura une feuille par mois,
    Si je peux me permettre, je ne suis pas sûr que se soit la formule la plus judicieuse.
    Si tu mets toutes tes écritures dans la même feuille, il sera beaucoup plus simple et performant de faire un (ou des) TCD sur la "feuille récapitulative par rubrique et une feuille pour le bilan annuel".
     Toujours zen
    La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
    1. Bonjour Gbinforme,

      Après avoir testé ma proposition, et après modification, j'étais arrivé à la tienne qui fonctionne parfaitement.

      Je vais maintenant pouvoir avancer sur mon projet. Je vais marquer comme résolu cette rubriques mais je reviendrais probablement vers toi plus tard.

      Encore merci à toi.

      Cordialement.
      Mistral
      1. Bonjour Gbinform,

        Merci pour ta réponse.
        J'ai essayé de copier ma feuille et USF dans un autre classeur ça marche.

        J'ai réussi à dupliquer l'USF dans le même classeur, j'ai modifié les cellules à surveiller et là j'ai un message d'erreur :
        Nom ambigu détecté: Worksheet_SelectionChange

        Je ne comprends pas pourquoi, il faut dire que c'est la première fois que j'utilise les USF.

        Peux-tu m'éclairer?

        Pour ce qui est de n'avoir qu'une seule feuille je vais poser la question au C.A.
        Cordialement
        Mistral
        1. Contributeur
          Re:

          Cela ne vient pas des USF mais tu as créé 2 procédures
          Worksheet_SelectionChange
          et il te faut inclure le code de la seconde dans la première.
          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Not Intersect(Target, Range("G3:G20")) Is Nothing Then
              Recette.Show
          ElseIf Not Intersect(Target, Range("F3:F20")) Is Nothing Then
              Répense.Show
          End If
          End Sub
          
        2. @gbinformeRe,

          Ca marche parfaitement. Merci à toi.

          Une question toute fois, si je souhaitais avoir plus de deux colonnes à surveiller, avec autant d'USF que de colonne Est-ce que je peux écrire ce qui est ci-dessous ?

          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Not Intersect(Target, Range("G3:G20")) Is Nothing Then
          Recette.Show
          ElseIf Not Intersect(Target, Range("F3:F20")) Is Nothing Then
          Dépense.Show
          End If

          If Not Intersect(Target, Range("E3:E20")) Is Nothing Then
          Mode.Show
          ElseIf Not Intersect(Target, Range("D3:D20")) Is Nothing Then
          Ribrique.Show
          End If

          End Sub


          Ou y a t il une autre manière de faire?

          C'est pour ma culture personnelle ...
          Mistral
        3. Contributeur
          Re
          Cela fonctionne mais pourquoi ne pas continuer ?
          Au lieu de
          End If
          
          If Not Intersect(Target, Range("E3:E20")) Is Nothing Then
              Mode.Show
          

          Tu mets :
          ElseIf Not Intersect(Target, Range("E3:E20")) Is Nothing Then
              Mode.Show