Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Vba Excel

Gerry40380

XLDnaute Nouveau
Bonjour à tous,

J'ai créée une application comportant plusieurs formulaires (Userform). Dans ces formulaires je veux la même mise en forme : centrer, supprimer le titre, modifier les couleurs, etc ...

Pour faire cela j'ai recopié sur chaque formulaire les mêmes procédures. Pour simplifier j'ai voulu créer une procédure dans un module commun et passer à ce module les paramètres de l'userfom appelant. Or j'ai un message d'erreur avec cette manip (Propriété ou méthode non gérée par cet objet).

Je joins un fichier ultra simple pour montrer le problème posé l'Userform1 est correct, l'userform2 avec passage des paramètres amène le message ci-dessus.

Si quelqu'un trouve une solution (si tant est qu'elle existe) je le remercie par avance

Salut
 

Pièces jointes

  • Exemple.xlsm
    21.3 KB · Affichages: 3
  • Exemple.xlsm
    21.3 KB · Affichages: 0

Dranreb

XLDnaute Barbatruc
Bonjour.
Si vos UserForm sont rigoureusement identiques vous n'avez besoin que d'un seul, même si vous voulez en afficher simultanément plusieurs exemplaires. Le nom de l'UserForm est en réalité avant tout son type. Donc son type n'est pas UserForm. On peut néanmoins aussi utiliser son nom comme exemplaire implicite. Pour UserForm1 par exemple tout se passe comme s'il existait une déclaration Public UserForm1 As New UserForm1.
Mais sinon Sub centrer(ByVal usf As Object) devrait passer.
 

Gerry40380

XLDnaute Nouveau
Bonjour,

Merci la solution proposée fonctionne. Dans le fichier d'exemple j'ai les mêmes userform, mais dans mon application j'en ai une bonne vingtaine, la solution proposée va me permettre d'économiser des copier/coller.

Pour ma culture personnelle pourquoi le fait de déclarer, dans le module appelé, l'userform en tant qu'objet et non directement en tant qu'userform.

En tout état de cause mon problème est résolu, merci encore.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Parce que ce n'est jamais un UserForm. C'est un UserForm1 ou un UserForm2 etc. Je vous l'ai dit, le nom d'un UserForm n'est pas forcément le nom de son exemplaire, c'est avant tout le nom de son type. En fait un UserForm est un module de classe avec une interface MSForms. Pourquoi en avez vous une vingtaine et en quoi diffèrent-ils les uns des autres ?
 

Gerry40380

XLDnaute Nouveau
OK Merci pour les explications
 

Gerry40380

XLDnaute Nouveau
OK
Merci pour les explications.
C'est un programme de suivi d'adhérents d'un club canin avec saisie des adhérents, des race, des adhérents, du publiposage, etc.. Donc chaque userform correspond à un besoin particulier
Cordialement
 

Dranreb

XLDnaute Barbatruc
C'est le nombre et le type de contrôles qui importent. S'il contiennent tous un Label, une TextBox et un CommandButton on pourrait très bien n'en faire qu'un seul. Même si certains avaient une ou deux paires de contrôles supplémentaires on pourrait mettre à False la propriété Visible de ceux des cas où on n'en a pas besoin.
 

Gerry40380

XLDnaute Nouveau
Re,

Il est plus facile de faire un formulaire par type d'opération car les formulaires ont tous des contrôles # y compris avec un nombre de boutons radios construits en fonction de certains paramètres.
Ils ont tous des tailles différentes ce qui est bien plus simple à gérer avec des chaque userform spécifique. Certains formulaires ont 3-4 contrômes d'autres en ont plus d'une trentaine.

Je reste sur ma solutions d'un formulaire unique par type d'opération
 

Dranreb

XLDnaute Barbatruc
En général je fais un UserForm pour chaque Tableau à mettre à jour, permettant d'Ajouter, Modifier ou Supprimer, selon que la combinaison d'identifiants tapés dans des ComboBox existe déjà ou non. Et j'ai un jeu de modules de service qui fait le plus gros des recherches, la correspondance entre les contrôles et les colonnes du tableau étant définie une fois pour toutes dans la Sub UserForm_Initialize.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…