[RESOLU] Codes dans Userform ou dans Modules ?

~ Arnaud ~

XLDnaute Nouveau
Bonjour,
J'ai développé une application pour le boulot je crois un peu conséquente. Notamment parce que je suis novice et que j'ai repris des codes par ci par là.

Je souhaite savoir si c'est mieux de laisser tous les codes dans les USF ou d'en mettre un max dans les modules ?
Est-ce que cela va changer la rapidité d'exécution ?
Où est-ce seulement pour nettoyer un peu les codes présents dans les USF pour que ce soit plus lisible ?

Je vous remercie par avance de vos réponses.
Arnaud
 

Pièces jointes

  • TDSI - Version anonymisée.xlsm
    5 MB · Affichages: 146

Lone-wolf

XLDnaute Barbatruc
Bonsoir Arnaud

Il y a du nettoyage à faire dans ton fichier, notamment les feuilles. En réalité tu en as 8 et dans ton code tu en as inscrit 30. Il faut donc les renommer de 1 à 8 et supprimer les feuilles en trop du code. Ensuite modifie le code comme ceci.

VB:
Sub Init()
Dim i As Long

For i = 1 to Sheets.Count
If Sheets(i).Name <> "Feui3" Or Sheets(i).Name <> "Feuil4" Then Sheets(i).Visible = False
Next i
End Sub
'------------------------------------------------
With Sheets("Log")
.Range("A1").Offset(1, 0).Value
Idem
Idem
End With

With Sheets("Demande avenant PO IEJ")
.Range("B17:F18,B51:F53,B59:F61,B65:F67").NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
End With

Fait comme ceci pour toutes les feuilles. Note: je n'ai pas regardé dans les autres formulaires.
 

Paf

XLDnaute Barbatruc
Bonjour Arnaud, Lone-wolf,

Je souhaite savoir si c'est mieux de laisser tous les codes dans les USF ou d'en mettre un max dans les modules ?
Est-ce que cela va changer la rapidité d'exécution ?

S'il y a des 'codes' communs à plusieurs USF, il faudrait les mettre dans un module, ce qui simplifie l'écriture de leur appel.

A priori l'emplacement n'impacte pas la rapidité d'exécution, juste la clarté et la lisibilité du projet.

Et quand on commence à avoir de multiples Modules et USF, il serait bien de repérer sur la ligne de commande,l'emplacement de la sub appelée (par un commentaire ...) pour faciliter la maintenance future.

A+
 

~ Arnaud ~

XLDnaute Nouveau
Bonjour Lone-wolf,
Merci pour tes conseils.
J'ai essayé le premier mais il me masque toutes les feuilles et s'arrête à la dernière puisqu'il ne peut pas la masquer !

Dim i2 As Long
For i2 = 1 To Sheets.Count
If Sheets(i2).Name <> "Feuil13" Or Sheets(i2).Name <> "Feuil14" Then Sheets(i2).Visible = False
Next i2

J'ai essayé en remplaçant Feuil13 et Feuil14 par leur nom et ça me donne le même résultat.
Apparemment il ne reconnait pas la condition si le nom de la feuille est Feuil13 ou Feuil14 (ou "Demande avenant PON FSE" ou "Demande avenant PO IEJ")...

Pour les With... j'ai réussi à en mettre quelques uns mais ce n'est pas évident. Parfois cela me génère des problèmes dans l'exécution du code.
Mais je vais essayer d'en mettre un maximum pour remplacer tous les select quand cela ne me génère pas d'erreur.

Merci.
Arnaud
 

~ Arnaud ~

XLDnaute Nouveau
Bonjour Paf,
Merci pour ta réponse.
Je commence à avoir pas mal d'USF et de modules !!!
Alors j'ai compris qu'il fallait que je mette des lignes de commentaires pour plus de clarté.
Je comprends le principe de codes que l'on appelle de plusieurs USF et qu'il faut donc mettre dans un module.
Merciii.
Arnaud.
 

Lone-wolf

XLDnaute Barbatruc
Re Arnaud,

As-tu changer le nom propre des Feuilles? Feuil1 - Feuil2 - Feuil3 etc, car rien avoir avec le nom de l'onglet. Dans ton fichier tu as, exemple:
Feuil1(Accueil)
Feuil8(Départements)
Feuil12(OL_1)
Feuil20 (OL_2)

feuilles.gif


C'est ces chiffres-la qu'il faut modifier. Clique dessus, Affichage > Fenêtre Propriétés et change Name entre parenthèses de la Feuille13 par Feuil3 et ainsi de suite. Un exemple avec ce code

VB:
For i = 1 To WbBase.Sheets.Count
                    If WbBase.Sheets(i).Name = "Commandes" Or WbBase.Sheets(i).Name = "Confirmations" _
                       Or WbBase.Sheets(i).Name = "Bulletins" Or WbBase.Sheets(i).Name = "Factures" Then
Next i
 

~ Arnaud ~

XLDnaute Nouveau
Re Lone-wolf,
Dans mon fichier complet j'ai 26 feuilles. Elles sont bien numérotées de 1 à 26.
Sur le forum je n'avais mis que le strict nécessaire. pour ma demande.

Mais sinon comme je te l'ai dit ton code fonctionne en masquant toutes les feuilles mais je pense qu'il n'arrive pas à comprendre les deux feuilles que je veux laisser visibles avec la condition <> (différente de).


Et pour l'USF3 je suis navré mais en collant ton code complet il y a des bugs... Alors je vais essayer de le prendre par petits bouts et comprendre ce que tu as voulu simplifier pour le faire progressivement. Je ne peux pas me permettre de bug ça fait des deux mois que je travaille dessus !

Merci pour ton aide.
Arnaud
 

Lone-wolf

XLDnaute Barbatruc
Re Arnaud

Le fichier texte était à titre d'exemple à adapter à ton fichier, je n'ai pas dit qu'il fallait le copier. Pour le masquage des feuilles: admettons que tu veuille masquer la feuille 12 et 13, la condition doit être:

If Sheets(i).Name = "Admin" Or Sheets(i).Name = "Accueil" Then Sheets(i).visible = False
 

~ Arnaud ~

XLDnaute Nouveau
Lone-wolf,
Oui j'avais bien compris que ce n'était pas du copier-coller que j'avais à faire... C'est juste que j'ai pas bien compris l'exemple...

Mais bon maintenant j'ai réussi en mettant comme tu l'as dit dans ton dernier message les noms et en prenant la formule dans l'autre sens comme dans ton dernier message.

Cela fonctionne parfaitement je l'ai donc fait pour tous mes masquages et affichages de feuilles.

Merci bien. Cela fait moins encombré et plus propre j'imagine. Et peut-être un peu plus rapide ...
Bonne soirée.
Arnaud

Code:
    For i = 1 To Sheets.Count
      If Sheets(i).Name = "Demande avenant PON FSE" Or Sheets(i).Name = "Demande avenant PO IEJ" Then
      Sheets(i).Visible = True
      Else
      Sheets(i).Visible = False
      End If
    Next i
 

Discussions similaires

Réponses
2
Affichages
401
Réponses
2
Affichages
306

Statistiques des forums

Discussions
314 562
Messages
2 110 729
Membres
110 909
dernier inscrit
François19