Microsoft 365 Frame sur Userform

TCHIS

XLDnaute Occasionnel
Bonjour à tous et à toutes.

Je me suis lancé dans la conception de BD sous excel depuis peu.

Alors il y a certaines fonctions je voudrai attribuer à mon USF.

D'abord mon USF possède un fond d'image et je souhaiterai avoir une Frame dont le fond est transparent et qui s'afficherai après l'appui sur un bouton (le sens d'apparition de cette frame serait du bas vers le haut pour s'arrêter net en dessous d'une Listview qui est déjà opérationnelle ).

Pourriez vous s'il vous plait m'apporter de vos lumières ?
 

patricktoulon

XLDnaute Barbatruc
re
avec la methode simulation de transparence
ton userform1
a la base il est comme ceci( j'ai ajouté une frame pour l'exemple )
1676977836066.png
avec mon code yper simple dans activate

VB:
Private Sub UserForm_Activate()
'on met la copie bmp du fond de l'userform dans un nouveau control image dynamique
'l'image aura la meme taille que l'interieur du userform
'la meme propriété d'affichage
' reste plus qu'a la depacer de exactement le left et le top de la frame mais !!!! en negatif
'comme c'est le dernier controls ajouté on le met en arriare plan "zorder 1"
    Set img = Me.Frame1.Controls.Add("forms.Image.1", "fondframe")
    With img
        .Move 0 - Frame1.Left - 1, 0 - Frame1.Top - 1, Me.InsideWidth, Me.InsideHeight
        .Picture = Me.Picture
        .PictureSizeMode = Me.PictureSizeMode
        .ZOrder 1
    End With
End Sub

résultat a l'ouverture il est comme cela

1676977958600.png
 

patricktoulon

XLDnaute Barbatruc
re
?????????????????????🤔
faut faire plus d'effort dans vos demandes ,on comprend rien a ce que vous dites
et mon décodeur est en panne
quelle frame la quelle qui a les 3 trois labels
la quelle qui doit avoir l'animation
sur quel bouton on clique
faite moi un exemple dans un fichier vierge avec juste ce qu'il faut
 

fanch55

XLDnaute Barbatruc
Bonjour,
Si vous voulez une Frame transparente, oubliez cela n'existe pas .
Même les subterfuges pour y palier ne fonctionnent pas ou pas correctement ou pas dans tous les cas .
Le palliatif est d'utiliser un objet Picture et de regrouper tous les controles de la pseudo frame dans un même objet Dictionary au sein de cette Picture .
Attention au poids de l'image ....
 

Pièces jointes

  • FRmTrans.xlsm
    274.1 KB · Affichages: 6

patricktoulon

XLDnaute Barbatruc
Bonsoir
@fanch55
Si vous voulez une Frame transparente, oubliez cela n'existe pas .
Même les subterfuges pour y palier ne fonctionnent pas ou pas correctement ou pas dans tous les cas
Ah bon!!
méthode api 1 par les macro 4
demo.gif


et j'en ai d'autres en réserve si tu veux
et ça fonctionne très bien 32/64 bits

méthode 2
l'astuce la plus simple et la plus connue qui (SIMULE!!) la transparence
c'est une picture dans la frame de la même taille que le inside du userform
le left et top en négatif simetriquement au left et pop positif de la frame

avec les api déclarées je vais même plus loin la frame transparente et avec les angles arrondis
mais celle là il faut que je prenne le temps de la refaire en macro 4 (pour le fun )
 

TCHIS

XLDnaute Occasionnel
Bonsoir
@fanch55

Ah bon!!
méthode api 1 par les macro 4
Regarde la pièce jointe 1163886

et j'en ai d'autres en réserve si tu veux
et ça fonctionne très bien 32/64 bits

méthode 2
l'astuce la plus simple et la plus connue qui (SIMULE!!) la transparence
c'est une picture dans la frame de la même taille que le inside du userform
le left et top en négatif simetriquement au left et pop positif de la frame

avec les api déclarées je vais même plus loin la frame transparente et avec les angles arrondis
mais celle là il faut que je prenne le temps de la refaire en macro 4 (pour le fun )
 

TCHIS

XLDnaute Occasionnel
Bonsoir
@fanch55

Ah bon!!
méthode api 1 par les macro 4
Regarde la pièce jointe 1163886

et j'en ai d'autres en réserve si tu veux
et ça fonctionne très bien 32/64 bits

méthode 2
l'astuce la plus simple et la plus connue qui (SIMULE!!) la transparence
c'est une picture dans la frame de la même taille que le inside du userform
le left et top en négatif simetriquement au left et pop positif de la frame

avec les api déclarées je vais même plus loin la frame transparente et avec les angles arrondis
mais celle là il faut que je prenne le temps de la refaire en macro 4 (pour le fun )
Bonsoir merci pour une réponse si rapide.
Je voudrai bien essayer cette méthode mais le souci est que l'image d'arrière plan que j'ai mis dans Userform je l'ai fait par code VBA via un chemin d'accès.

Code
With UserFormOpen
.Picture = LoadPicture("C:\Users\Tchis\Desktop\DTC-S.A.S\Images\Image1.jpg")
.PictureSizeMode = fmPictureSizeModeStretch
.Height = Me.Height
End With


Quand je met l'image directement via la propriété picture de l'userform celle-ci ne s'affiche pas bien c'est-à-dire que l'userform ne prend pas les dimension direct de l'image.
Ce qui fait que si j'applique l'image à la farme celle-là aussi ne prend pas les dimension direct de l'image
 

patricktoulon

XLDnaute Barbatruc
démonstration
demo.gif


c'est tout bète
VB:
rivate Sub CommandButton1_Click()
'load une image pour le fond de l'userform
    fichier = Application.GetOpenFilename("Text Files (*.jpg;*.gif;*.bmp;*.wmf), *.jpg;*.gif;*.bmp;*.wmf", 1, "ouvrir une image")
    If fichier = False Then Exit Sub
    Me.Picture = LoadPicture(fichier)
End Sub

Private Sub CommandButton2_Click()
'on met la copie bmp du fond de l'userform dans un nouveau control image dynamique
'l'image aura la meme taille que l'interieur du userform
'la meme propriété d'affichage
' reste plus qu'a la depacer de exactement le left et le top de la frame mais !!!! en negatif
'comme c'est le dernier controls ajouté on le met en arriare plan "zorder 1"
    Set img = Me.Frame1.Controls.Add("forms.Image.1", "fondframe")
    With img
        .Move 0 - Frame1.Left - 1, 0 - Frame1.Top - 1, Me.InsideWidth, Me.InsideHeight
        .Picture = Me.Picture
        .PictureSizeMode = Me.PictureSizeMode
        .ZOrder 1
    End With
End Sub

et voilà on croirait vraiment que ta frame est transparente

c'est simple non ?
 

Pièces jointes

  • simulation de frrame transparente .xlsm
    14.8 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
ya pas de soucis
si ta frame a une caption (titre) il faut modifier un peu
VB:
Private Sub CommandButton1_Click()
'load une image pour le fond de l'userform
    fichier = Application.GetOpenFilename("Text Files (*.jpg;*.gif;*.bmp;*.wmf), *.jpg;*.gif;*.bmp;*.wmf", 1, "ouvrir une image")
    If fichier = False Then Exit Sub
    Me.Picture = LoadPicture(fichier)
End Sub

Private Sub CommandButton2_Click()
'on met la copie bmp du fond de l'userform dans un nouveau control image dynamique
'l'image aura la meme taille que l'interieur du userform
'la meme propriété d'affichage
' reste plus qu'a la depacer de exactement le left et le top de la frame mais !!!! en negatif
'comme c'est le dernier controls ajouté on le met en arriare plan "zorder 1"
    If Frame1.Caption <> "" Then l = 2: t = 6 Else l = 1: t = 1
    Set img = Me.Frame1.Controls.Add("forms.Image.1", "fondframe")
    With img
        .Move 0 - Frame1.Left - l, 0 - Frame1.Top - t, Me.InsideWidth, Me.InsideHeight
        .Picture = Me.Picture
        .PictureSizeMode = Me.PictureSizeMode
        .ZOrder 1
    End With
End Sub

Private Sub CommandButton5_Click()
    Me.Frame1.Controls.Remove "fondframe"
End Sub
 

TCHIS

XLDnaute Occasionnel
démonstration
Regarde la pièce jointe 1163890

c'est tout bète
VB:
rivate Sub CommandButton1_Click()
'load une image pour le fond de l'userform
    fichier = Application.GetOpenFilename("Text Files (*.jpg;*.gif;*.bmp;*.wmf), *.jpg;*.gif;*.bmp;*.wmf", 1, "ouvrir une image")
    If fichier = False Then Exit Sub
    Me.Picture = LoadPicture(fichier)
End Sub

Private Sub CommandButton2_Click()
'on met la copie bmp du fond de l'userform dans un nouveau control image dynamique
'l'image aura la meme taille que l'interieur du userform
'la meme propriété d'affichage
' reste plus qu'a la depacer de exactement le left et le top de la frame mais !!!! en negatif
'comme c'est le dernier controls ajouté on le met en arriare plan "zorder 1"
    Set img = Me.Frame1.Controls.Add("forms.Image.1", "fondframe")
    With img
        .Move 0 - Frame1.Left - 1, 0 - Frame1.Top - 1, Me.InsideWidth, Me.InsideHeight
        .Picture = Me.Picture
        .PictureSizeMode = Me.PictureSizeMode
        .ZOrder 1
    End With
End Sub

et voilà on croirait vraiment que ta frame est transparente

c'est simple non ?
Pas vraiment rien que la première ligne du code ne veut pas passer (tout juste après load une image pour le fond de l'userform)
ça dit erreur de compilation.
En plus l'image de fond du l'userform je préfèrerai qu'elle se charge dès l'ouverture de l'userform
 

Statistiques des forums

Discussions
312 215
Messages
2 086 333
Membres
103 188
dernier inscrit
evebar