Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

UserForm pour un même process de tri lancé manuellement et automatiquement

2 réponses
Avatar
fetnat
Bonsoir,

J'ai un UserForm qui lance un processe de tri d'onglets par un clic sur
un bouton.
Je souhaite garder le lancement manuel mais aussi lancer le tri
automatiquement dans une autre fonctionnalité.

Dans le Usf tout est déclaré en Private.

Sub OKButton_Click()
If ValideChamps() = True Then
UF1.Hide
TriQSFeuilles
Unload UF1
End If
End Sub

Private Function ValideChamps() As Boolean

ValideChamps = False
If ValidePF() = True Then
If ValideDF() = True Then
ValideChamps = True
End If
End If
End Function

etc.

J'ai copié dans ma macro automatique le bout de code un peu remanié :

If ValideChamps() = True Then
TriQSFeuilles
End If

mais j'ai une erreur de compilation Sub ou Function non définie. Il bute
sur ValideChamps().
J'ai remplacé la déclaration Private en Public mais cela ne change rien.
J'aimerai garder la validation des champs réalisée avec les fonctions
dans le UserForm.

Si je garde uniquement TriQSFeuilles, ça compile.

Que faut-il déplacer ou déclarer pour avoir le lancement manuel ainsi
que le lancement auto dans une sub en gardant la validation des champs ?

Merci pour votre aide

fetnat

2 réponses

Avatar
tissot.emmanuel
Bonsoir,

Tout ce qui est déclaré Public dans un Userform est accessible uniquement en
précisant le nom du Userform. Par exemple:

Dans un userform:

Public Function Doubler(Nombre As Double) As Double
Doubler = Nombre * 2
End Function

Dans un module standard:

Sub AppelFonction()
MsgBox Doubler(1)
End Sub

Provoque l'erreur de compilation Sub ou Function non définie

Alors que:

Sub AppelFonction()
MsgBox UserForm1.Doubler(1)
End Sub

Fonctionne tres bien.

Néanmoins il est en général plus logique de localiser les fonctions appelés
de différents points du projet dans un module standard que dans celui d'un
Userform car l'appel à celui-ci provoque son chargement en mémoire
(exécution de la procédure Initialize) ce qui peut être pénalisant en terme
de vitesse voire provoquer des effets indésirables.

Cordialement,

Manu/



"fetnat" a écrit dans le message de news:
%23rFu%
Bonsoir,

J'ai un UserForm qui lance un processe de tri d'onglets par un clic sur un
bouton.
Je souhaite garder le lancement manuel mais aussi lancer le tri
automatiquement dans une autre fonctionnalité.

Dans le Usf tout est déclaré en Private.

Sub OKButton_Click()
If ValideChamps() = True Then
UF1.Hide
TriQSFeuilles
Unload UF1
End If
End Sub

Private Function ValideChamps() As Boolean

ValideChamps = False
If ValidePF() = True Then
If ValideDF() = True Then
ValideChamps = True
End If
End If
End Function

etc.

J'ai copié dans ma macro automatique le bout de code un peu remanié :

If ValideChamps() = True Then
TriQSFeuilles
End If

mais j'ai une erreur de compilation Sub ou Function non définie. Il bute
sur ValideChamps().
J'ai remplacé la déclaration Private en Public mais cela ne change rien.
J'aimerai garder la validation des champs réalisée avec les fonctions dans
le UserForm.

Si je garde uniquement TriQSFeuilles, ça compile.

Que faut-il déplacer ou déclarer pour avoir le lancement manuel ainsi que
le lancement auto dans une sub en gardant la validation des champs ?

Merci pour votre aide

fetnat


Avatar
fetnat
Bonjour,

C'est parfait et l'explication est brillante.
J'ai beaucoup appris. Je craignais une limitation à Private dans les Usf.

J'utilise un exemple de tri d'onglet très performant trouvé sur
Excelabo, alors je n'ai pas voulu le chambouler.

Mille mercis. Bon dimanche.

fenat

Bonsoir,

Tout ce qui est déclaré Public dans un Userform est accessible uniquement en
précisant le nom du Userform. Par exemple:

Dans un userform:

Public Function Doubler(Nombre As Double) As Double
Doubler = Nombre * 2
End Function

Dans un module standard:

Sub AppelFonction()
MsgBox Doubler(1)
End Sub

Provoque l'erreur de compilation Sub ou Function non définie

Alors que:

Sub AppelFonction()
MsgBox UserForm1.Doubler(1)
End Sub

Fonctionne tres bien.

Néanmoins il est en général plus logique de localiser les fonctions appelés
de différents points du projet dans un module standard que dans celui d'un
Userform car l'appel à celui-ci provoque son chargement en mémoire
(exécution de la procédure Initialize) ce qui peut être pénalisant en terme
de vitesse voire provoquer des effets indésirables.

Cordialement,

Manu/



"fetnat" a écrit dans le message de news:
%23rFu%
Bonsoir,

J'ai un UserForm qui lance un processe de tri d'onglets par un clic sur un
bouton.
Je souhaite garder le lancement manuel mais aussi lancer le tri
automatiquement dans une autre fonctionnalité.

Dans le Usf tout est déclaré en Private.

Sub OKButton_Click()
If ValideChamps() = True Then
UF1.Hide
TriQSFeuilles
Unload UF1
End If
End Sub

Private Function ValideChamps() As Boolean

ValideChamps = False
If ValidePF() = True Then
If ValideDF() = True Then
ValideChamps = True
End If
End If
End Function

etc.

J'ai copié dans ma macro automatique le bout de code un peu remanié :

If ValideChamps() = True Then
TriQSFeuilles
End If

mais j'ai une erreur de compilation Sub ou Function non définie. Il bute
sur ValideChamps().
J'ai remplacé la déclaration Private en Public mais cela ne change rien.
J'aimerai garder la validation des champs réalisée avec les fonctions dans
le UserForm.

Si je garde uniquement TriQSFeuilles, ça compile.

Que faut-il déplacer ou déclarer pour avoir le lancement manuel ainsi que
le lancement auto dans une sub en gardant la validation des champs ?

Merci pour votre aide

fetnat