module de classe, userform, image... (3: le retour... cards.dll)

bof

XLDnaute Occasionnel
Bonjour,
Un petit casse-tête pour débutant en module de classe
Je lance un USF avec une 52 labels (des cartes à jouer) et 2 images
Ils se créent bien, cependant quand je clique sur une carte (pour afficher son image), je ne sais pas formuler le "LoadImage" (dans le module de classe : le fichier indiqué est bon il n'y a pas de message d'erreur mais le contenu prévu ne s'affiche pas dans img1 ni img2.
Je suppose que le :
Code:
ShImg(1) = ...
ne convient pas mais je ne sais pas par quoi le remplacer...
J'ai même tenté un repaint ...
Une idée brillante ?
Merci.
 

Pièces jointes

  • MemP.xlsm
    31.8 KB · Affichages: 40
Dernière édition:

PMO2

XLDnaute Accro
Re : module de classe, userform, image et loadpicture

Bonjour,

Essayez de remplacer
Code:
ShImg(1) = LoadPicture("IMG/cards/" & crd & ".jpg")

par
Code:
ShImg(1) = LoadPicture("c:\DossierImages\IMG\cards\" & crd & ".jpg")

en prenant soin de préciser le chemin (c:\DossierImages\ est à adapter à votre usage).
 

bof

XLDnaute Occasionnel
Re : module de classe, userform, image et loadpicture

Bonsoir et merci de t'intéresser à ce pb.
ça ne change rien.
Le débogueur renvoie un chemin et un nom de fichier correct mais il ne se passe rien.

Je joins un fichier avec les images "qui vont bien avec"
A+
 

Pièces jointes

  • cartes.zip
    52.4 KB · Affichages: 41
  • cartes.zip
    52.4 KB · Affichages: 35
  • cartes.zip
    52.4 KB · Affichages: 36
Dernière édition:

PMO2

XLDnaute Accro
Re : module de classe, userform, image et loadpicture

Modifiez le code de votre classe comme suit
Code:
Public WithEvents Fonds As MSForms.Label
Public WithEvents Cards As MSForms.Image

Private Sub Fonds_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim crd$
If Button = XlMouseButton.xlPrimaryButton Then
   crd = Fonds.Tag
Select Case STATUS
Case 1
   Tirage.Controls(ShImg(1)).Picture = LoadPicture("c:\IMG/cards/" & crd & ".jpg")
   STATUS = 2
Case 2
   Tirage.Controls(ShImg(2)).Picture = LoadPicture("c:\IMG/cards/" & crd & ".jpg")
   STATUS = 3
Case Else
End Select
End If
End Sub
 

bof

XLDnaute Occasionnel
Re : module de classe, userform, image et loadpicture

Merciiii !
Pour les curieux j'ai mis l'application terminée en pièce jointe. (mettre les cartes et l'appli dans le même répertoire)
A+
 

Pièces jointes

  • Memory.xlsm
    38.6 KB · Affichages: 43
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : module de classe, userform, image et loadpicture

Bonjour à tous

Je lance un USF avec une 52 labels (des cartes à jouer) et 2 images
Une suggestion
On peut se simplifier la tache en utilisant ce que nous offre Windows, à savoir: cards.dll ;)
testcardsdll.png
Ci-joint un petit exemple des possibilités offertes

MEO:
Extraire le contenu du zip
Ouvrir Excel puis faire ALT+F11 puis CTRL+M et là pointer sur usfCARDS.frm
Enfin afficher l'userform puis cliquer le bouton idoine.

NB:
L'avantage ici est qu'on s'affranchit de devoir avoir 52 fichiers images.
L'inconvénient c'est que cela ne fonctionne que dans le monde Windows
(désolé pour les macistes ;))
 

Pièces jointes

  • USFCARDS.zip
    1.6 KB · Affichages: 50

bof

XLDnaute Occasionnel
Re : module de classe, userform, image et loadpicture

Bonjour,

Stapple1600 : Le but étant de travailler un peu mes modules de classe, cette solution ne me convient pas.

Fort de ce premier résultat.
J'ai essayé d'améliorer le code en utilisant uniquement des contrôles images, mais patatras... la syntaxe précédente ne fonctionne pas ! (ou je ne m'en sert pas à bon escient, ce qui revient au même...)
Je n'arrive à utiliser la syntaxe précédente qu'à condition de n'adresser que des contrôles autres que l'image cliquée... Ce qui est somme toute, est juste le contraire de ce que je désire ! :(

Le fichier modifié avec les cartes "ad-hoc"
Le classeur et les cartes doivent être dans le même dossier.
Pour tester le code cliquer sur 2 cartes au centre du USF les cartes sont affichées en 1 ère et 2ème position. ce qui est normal dans le contexte (vu le code...), mais ce que je voudrais c'est cliquer sur les 2 premières cartes et les afficher au même endroit.
j'ai tenté diverses syntaxes potentielles dont une avec la variable ShImg qui me paraissait plausible, mais visiblement je suis à coté de la plaque...

Merci de me déniaiser !

A+
 

Pièces jointes

  • MemPW.zip
    88.4 KB · Affichages: 25

PMO2

XLDnaute Accro
Re : module de classe, userform, image... (2 : le retour !)

Bonjour,

Essayez de remplacer le code votre Classe1 par
Code:
Public WithEvents Cards As MSForms.Image

Private Sub Cards_Click()
Dim crd$  ', comp% (est-ce superflu ???)
cpt = cpt + 1
crd = Cards.Tag
Select Case STATUS
Case 1
   Cards.Picture = LoadPicture(TWP & crd & ".jpg")  
   STATUS = 2
Case 2
   Cards.Picture = LoadPicture(TWP & crd & ".jpg")  
   STATUS = 0
Case Else
End Select
Tirage.Repaint  '/// ajout pmo
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : module de classe, userform, image et loadpicture

Bonjour à tous

Bonjour,
Stapple1600 : Le but étant de travailler un peu mes modules de classe, cette solution ne me convient pas.
Mon but à moi n'est pas forcément de fournir une solution.
D'ailleurs, je parlais ici de: suggestion
Suggestion qui n'est pas à la seule destination du demandeur mais à tous les lecteurs potentiels de ton fil. ;)
Et c'est bien là l'essentiel (à mon sens) :
partager questions, solutions, suggestions, discussions sur le forum public qu'est XLD. ;)
 

bof

XLDnaute Occasionnel
Re : module de classe, userform, image et loadpicture

Bonjour,

Stapple1600 : Je l'ai bien compris comme cela.
Modeste : Je connaissais déjà. Dommage que Pierre n'ai jamais développé la 2ème partie...

Bonne année à tous !

Mon fichier finalisé en pièce jointe. (Doit-être décompressé dans un sous-répertoire Excel : pas dans Temp)

A+
 

Pièces jointes

  • MemCard.zip
    91.9 KB · Affichages: 27

bof

XLDnaute Occasionnel
Re : module de classe, userform, image et loadpicture (3: le retour... cards.dll)

Bonjour,
Stapple :
Maintenant que j'ai à peu près digéré le module de classe (pour cet usage...) Je me suis penché un peu sur ton fichier
Il me produite une erreur 53 (Fichier introuvable).
(Win 7 (Office Pro et Excel 2010)
Une idée ?
J'ai vu dans Google qu'il y avait pas mal de littérature autour de cette DLL...
Un conseil ?
Merci
A+
 

Staple1600

XLDnaute Barbatruc
Re : module de classe, userform, image... (3: le retour... cards.dll)

Bonjour à tous

bof
Si le fichier est introuvable, c'est qu'il n'est pas sur ton disque dur
Donc copie-le sur ton PC
Testes la macro
Si ca ne fonctionne pas, regardes comment sur le net comment enregistrer une dll avec regsvr32

NB: Chez moi, Windows 7 64 bit, le code VBA fonctionne
(sauf que cards.dll est dans un répertoire autre que Windows et je ne sais plus ce que j'ai fait pour que cela fonctionne ;)
Si je supprime le cards.ll, j'ai le même message d'erreur que toi (fichier introuvable)
Et si je copie cards.dll dans C:\Windows\system32 ou C:\Windows\sysWOW64 et j'essaie d’enregistrer la dll j'ai un message d'erreur
Par contre dés que je remets cards.dll dans le répertoire où il était le code VBA refonctionne de nouveau.
 

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 054
Membres
103 443
dernier inscrit
ttttttttttttttttt