2 userform similaire dans le même fichier

Bonjour le forum,

Je souhaiterai avoir 2 userform dans mon fichier qui gère 2 onglets différent de celui-ci.

Le Userform1 est déjà en place (encore merci pour l'aide fournie pour celui-la) mais j'ai un soucis pour le second.

J'ai renommé tous les text et combo box (ajouté la dizaine et regardé qu"il n'y ai pas de doublon, idem pour les boutons mais apparemment je rate un truc.

Voici mon fichier, pouvez-vous me dire ce que je fait mal svp.

Merci d'avance

Bonjour,

Tous les objets (TextBox, Combo... ) ont été renommé différemment.

A+

Oui, ok, merci pour la confirmation

Bonjour le Forum, je viens encore de passer quelques temps à regarder et tester certaines choses mais je ne vois/comprend pas mon erreur...

Bonjour Heavy_B,

Étant donné que le nombre de "Controls" du "Userform2" est plus petit que 12 ...

'Implémentation des rapports box/cellules
Private Sub UserForm_Initialize()
   Dim I As Integer
   Dim ctrls As Variant

   Set ws2 = Sheets("Rejected deliveries overview")

   ctrls = Array(Me.TextBox11, _
      Me.TextBox12, _
      Me.ComboBox16, _
      Me.TextBox13, _
      Me.ComboBox13, _
      Me.ComboBox110, _
      Me.TextBox16)

   For I = 1 To 7   '<< 7 controls au leu de 12
      ctrls(I - 1).Value = ""
   Next I
...
...
...

Bizz

Bonjour,

tu devrais nommer de façon parlante tes objets.
Par exemple cbx_listeTitre au lieu de Combobox1.
Ca t'évitera ce style de soucis où tu te perds, ça auto-documente le code et tu te diras merci quand tu te repencheras dessus dans 6 mois.
eric

Bonjour à tous,

En complément de ce qu'il à déjà été dit, j'ajouterais:

  • VBA n’empêche pas les doublons des noms de contrôles sur deux formulaires différents.
  • Puisque apparemment 365 est utilisé, pourquoi ne pas profiter de la puissance des fonction d'Excel :
    • Un remplissage des listes déroulantes avec un .List = Evaluate("=TRIER(UNIQUE(Table1[Designer]))") par exemple sera plus efficace et plus parlant.
    • Bien sûr on aura pris le temps de nommer ses tableaux aussi correctement que ses contrôles.
  • Est-il bien utile d'utiliser deux formulaires pour aller chercher les informations de deux feuilles différentes ? un TabStrip aurait été suffisant.
  • Est-il bien utile est nécessaire d'utiliser une variable publique ws pour affecter un variable Sheets.
  • Pourquoi utiliser Sheets alors que c'est une Worksheet qui est appelée, Excel ne le saura qu'au dernier moment.
  • Pourquoi ne pas utiliser la puissance des tableaux structurés ?
    • For I = 3 To Sheets("PN request overview").Range("G65536").End(xlUp).Row. Ceci ne devrait pas exister avec des tableaux structurés.
  • Découper autant que possible le code en petites fonctions réutilisables, rendra le code plus performant , plus lisible.
  • L'utilisation de Byte et Integer est contre-productif sur des ordinateurs récents.
  • Prendre l'habitude d'exécuter une condition au lieu de sortir d'une procédure
    • If Me.ComboBox1.ListIndex = -1 Then Exit Sub Then Exit Sub ceci peu être efficacement remplacé par :
    • If Me.ComboBox1.ListIndex > -1 Then...
  • Le fait de décharger, puis de recharger un formulaire pour le mettre à jour démontre que le code est mal conçu. Utiliser plutôt un fonction pour mettre à jour celui-ci.

Bonjour à tous,

Pour ma part cela fonctionne... avec le code suivant. Par contre JEAN-PAUL merci pour tes explications.

Option Explicit  'Activation de la déclaration explicite des variables
Dim ws2 As Worksheet  'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm

Private Sub UserForm_Initialize()
Dim I As Integer
Dim ctrls As Variant

Set ws2 = Sheets("Rejected deliveries overview")

ctrls = Array(Me.TextBox11, _
                Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

For I = 1 To 7
    ctrls(I - 1).Value = ""
Next I

'Recherche par PN
For I = 3 To Sheets("Rejected deliveries overview").Range("B65536").End(xlUp).Row
ComboBox11 = Sheets("Rejected deliveries overview").Range("B" & I)
If ComboBox11.ListIndex = -1 Then ComboBox11.AddItem Sheets("Rejected deliveries overview").Range("B" & I)
Next I
Me.ComboBox11 = ""

End Sub

Private Sub ComboBox11_Change()
Dim Ligne As Long
Dim I As Integer
Dim ctrls As Variant

   If Me.ComboBox11.ListIndex = -1 Then Exit Sub
  Ligne = Me.ComboBox11.ListIndex + 3

  ctrls = Array(Me.TextBox11, _
                Me.TextBox12, _
                Me.ComboBox16, _
                Me.TextBox13, _
                Me.ComboBox13, _
                Me.ComboBox110, _
                Me.TextBox16)

For I = 1 To 7
    ctrls(I - 1).Value = ws2.Cells(Ligne, I)
Next I
End Sub

Bonjour tout le monde,

@Bizarre,

Merci pour la correction, je débute en VBA et je n'ai pas encore toutes les connaissances/reflex pour avoir vu mon erreur. Merci.

@eriiic

Je vais suivre ton conseil et renommer mes box, merci.

@Jean-Paul

Merci pour ces précisions et astuces, je ne vais pas prétendre avoir tout compris comment faire mais je vais tenir un oeil sur ton poste et faire quelques essais. Merci.

@et1000lio

Merci aussi pour le test (en encore merci pour le code de la premiere partie).

Bref, un grand merci a vous tous pour votre aide si précieuse.

Rechercher des sujets similaires à "userform similaire meme fichier"