With UserForm1... Le 1 en variable?

YANN-56

XLDnaute Barbatruc
Bonjour à tous,

J'ai un module dont la procédure est la même pour plusieurs Userforms.

Cependant; je suis obligé de copier celle-ci pour chaque.

Code:
With UserForm1...
-----------------
----------------
End With

With UserForm2...
-----------------
----------------
End With

With ACCUEIL... (Ou autre nom d'USF)
-----------------
----------------
End With

Voici un grand moment que je cherche à mettre le nom de l'USF en variable,
mais je patine lamentablement!

Si quelqu'un peut m'aider... Merci d'avance.

Yann
 

MJ13

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Bonjour Yann, Re Pierrot

J'ai un module dont la procédure est la même pour plusieurs Userforms.
Yann: Déjà, cela ne me choque pas plus que ça, il vaut mieux cela que de répeter le code sur chaque USF.

Sinon avec un fichier simple avec 3 USFs, on pourrait peut-être voir vers les modules de classe (mais ce sera surement pas moi, car je ne maîtrise pas assez :confused:).
 

YANN-56

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Bonjour Pierrot,

Voici le global du module en question:

Code:
 Sub VOIR_DOUBLONS_USF2()
COULEUR_ITEM = &HC00000

With UserForm2.ListView1

For i = 1 To .ListItems.Count

On Error Resume Next ' (En raison du "i+1")

FICH1 = .ListItems(i).Text & .ListItems(i).ListSubItems(4).Text
FICH2 = .ListItems(i + 1).Text & .ListItems(i + 1).ListSubItems(4).Text
        
   If FICH2 = FICH1 Then
             .ListItems(i + 1).ForeColor = COULEUR_ITEM
             .ListItems(i + 1).Bold = True
                For j = 1 To 4
                  .ListItems(i + 1).ListSubItems(j).ForeColor = .ListItems(i + 1).ForeColor
                  .ListItems(i + 1).ListSubItems(j).Bold = .ListItems(i + 1).Bold
                Next j
             
             .ListItems(i).ForeColor = COULEUR_ITEM
             .ListItems(i).Bold = True
                For j = 1 To 4
                  .ListItems(i).ListSubItems(j).ForeColor = .ListItems(i).ForeColor
                  .ListItems(i).ListSubItems(j).Bold = .ListItems(i).Bold
                Next j
           
   End If
   
   If FICH1 <> FICH2 Then
        COULEUR_ITEM = IIf(COULEUR_ITEM = &HC00000, &HFF&, &HC00000)
   End If
FICH1 = ""
FICH2 = ""
   
Next i
End With

End Sub
' ======================================================
Sub VOIR_DOUBLONS_USF4()
COULEUR_ITEM = &HC00000

With UserForm4.ListView1

For i = 1 To .ListItems.Count

On Error Resume Next ' (En raison du "i+1")

FICH1 = .ListItems(i).Text & .ListItems(i).ListSubItems(4).Text
FICH2 = .ListItems(i + 1).Text & .ListItems(i + 1).ListSubItems(4).Text
        
   If FICH2 = FICH1 Then
             .ListItems(i + 1).ForeColor = COULEUR_ITEM
             .ListItems(i + 1).Bold = True
                For j = 1 To 4
                  .ListItems(i + 1).ListSubItems(j).ForeColor = .ListItems(i + 1).ForeColor
                  .ListItems(i + 1).ListSubItems(j).Bold = .ListItems(i + 1).Bold
                Next j
             
             .ListItems(i).ForeColor = COULEUR_ITEM
             .ListItems(i).Bold = True
                For j = 1 To 4
                  .ListItems(i).ListSubItems(j).ForeColor = .ListItems(i).ForeColor
                  .ListItems(i).ListSubItems(j).Bold = .ListItems(i).Bold
                Next j
           
   End If
   
   If FICH1 <> FICH2 Then
        COULEUR_ITEM = IIf(COULEUR_ITEM = &HC00000, &HFF&, &HC00000)
   End If
FICH1 = ""
FICH2 = ""
   
Next i
End With

End Sub

Dans l'UserForm2; j'ai un Bouton qui appelle VOIR_DOUBLONS_USF2
Dans l'UserForm4; j'ai un Bouton qui appelle VOIR_DOUBLONS_USF4

Tour ceci est un peu long; je le conçois!

Merci d'avoir si vite répondu.

Yann
 

Pierrot93

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Re, Michel:)

avec ce que j'ai compris, ta procédure dans un module standard :
Code:
Option Explicit
Sub test(u As Object)
MsgBox u.Name
End Sub

A noter l'objet en argument sera ta listview.

lorsque tu appeles ta procédure, code à utiliser dans les modules de tes usf, en fait tu passes en argument l'objet qui est concerné :

Code:
Private Sub CommandButton1_Click()
test Me.ListBox1
End Sub

ou "me" représente l'usf en question...

Dans ta procédure, lorsque tu veux agir sur ta "listviw", tu fais référence à la variable objet "u"...

je pense que tu pourras adapter....

@+
 

YANN-56

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Salut Michel,

Je ne t'avais pas vu.

Il n'y a rien de "Classe" dans cette affaire.

Mais tu me donnes une idée de voir s'il est possible de mettre les boutons concernés dans un groupe.
Par la suite, au cas où cela soit possible, la traduction ne serait pas aisée; mais réalisable.
(J'ai un doute, car ceux-ci ne sont pas dans le même USF)

Si je ne trouve pas de solution plus simple, je tâterai le terrain.

Je te souhaite un bon réveillon, et au plaisir... Comme d'hab!

Yann
 

YANN-56

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Re Pierrot,

Je dois avouer ne pas tout comprendre, à la première lecture.
(Le coté variable du nom de l'USF)

Seuls les tests issus de ton aide me permettront de mieux piger.

Comme je sais que tu es de bons conseils; je vais y investir le temps.

Ce petit temps qu'il me reste just'avant le réveillon.
(Si échec: j'aurai de quoi m'occuper au saut du lit.... vers midi...!)

Je souhaite un superbe passage à la nouvelle année qui vient.

Merci encore.

Yann
 

Pierrot93

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Re,

d'après ce que j'ai compris de ton code, ce n'est pas l'usf qui change mais ta listview, elle même bien sur sur un USF... C'est pour ça que je passe en paramètre l'objet listbox et non l'usf... De toute façon l'usf est "parent" de la "listbox".... le code de ta procédure commencerait ainsi :
Code:
Sub test(u As Object)

COULEUR_ITEM = &HC00000

With u 'u étant la listview que tu as passé en paramètre à partir d'un usf, et vaut par exemple "UserForm2.ListView1"
For i = 1 To .ListItems.Count

te souhaitant également un très bon réveillon....

@+
 

Pierrot93

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Re,

un petit exemple basique en pièce joint, qui je l'espère t'aidera à mieux appréhender le principe...

et fais pas trop d'abus:)....
@+
 

Pièces jointes

  • classeur5.zip
    13.3 KB · Affichages: 51
  • classeur5.zip
    13.3 KB · Affichages: 50
  • classeur5.zip
    13.3 KB · Affichages: 52

YANN-56

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Pierrot... Tu es trop !!!:)

Le "U" marche à merveille! :p:p

Qu'il fonctionne, pour tous, ainsi en fin de soirée.

Abusus non tollit Usum! N'est-il pas?... Comme en VBA

J'ai eu beaucoup de chance de d'avoir croisé....
Merci beaucoup à toi, et Bravo pour tout ce que tu sais faire.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : With UserForm1... Le 1 en variable?

Bonsoir à tous, et mes meilleurs vœux pour 2011.

La santé en premier lieu!.... Quant au reste, on arrivera bien à se débrouiller!!!...
N'est-il pas? :)

Mon Post a pour objet de remercier une nouvelle fois Pierrot pour son idée géniale!
Aussi pour montrer combien elle est adaptable à ce que je cherchais.
(Et facilement à autres actions)

En outre, les possibilités qu'elle offre sont innombrables.
Comme éviter de se farcir des modules de Classe qui ne sont par toujours très évidents.
(Voir notamment le "MSComctlLib.ListViewCtrl.2" à filer des boutons pour les ListView.

J'ai rebaptisé le "u" par "TRUC" et le "test" par "VOIR_DOUBLONS"
afin de mieux visualiser l'adaptation aux besoins de l'exemple joint.

Je suis tellement enthousiaste, que je n'ai pas pu m'empêcher de partager.

Amicalement.

Yann

P.S. J'ai laissé le "MsgBox TRUC.Name", car il y a un piège!
L'on ne voit que l'objet "ListView1" et non le choix de l'USF 1 ou 2 qui est pourtant présent.
Cela m'a beaucoup trompé dans mes essais; pensant avoir mal initialisé.
 

Pièces jointes

  • RESULTAT.zip
    20.7 KB · Affichages: 41
  • RESULTAT.zip
    20.7 KB · Affichages: 40
  • RESULTAT.zip
    20.7 KB · Affichages: 42

Discussions similaires

Statistiques des forums

Discussions
312 679
Messages
2 090 849
Membres
104 677
dernier inscrit
soufiane12