Agrandir automatiquement un formulaire

Bonjour à tous,

Je vous contacte car ça fait 2 jours que je bûche sur un truc mais je n'arrive à rien !

J'ai créé un Userform qui permet de remplir une fiche Excel.

Lorsque la Race et le genre sont remplis, j'aimerai que le Userform se déploie pour montrer une image.

Jusque là aucun problème. Mon code donne ça :

Private Sub cmdTEST_Click()

        If cboRace.Value = "Nain" And cboGenre.Value = "Femelle" Then

            With FrmPersonne
            .Width = 420
            .Height = 360
            Naine.Visible = True
            End With
        Else
        End If

End Sub
image image

Le souci c'est que je n'arrive pas à créer une procédure qui déploie ce volet automatiquement lorsque les ComboBox sont remplies.

J'ai essayé avec le code suivant mais rien n'y fait. Lorsque j'entre des "valeurs" il ne se déploie pas tout seul :(

Sub Ajout_personnage()

        If cboRace.Value <> "" And cboGenre.Value <> "" Then

                If cboRace.Value = "Elfe Clair" And cboGenre.Value = "Femelle" Then

                    With FrmPersonne
                    .Width = 420
                    .Height = 360
                    ElfeClairF.visiblue = True
                    End With

                'Là il y aurait des ELSEIF pour insérer tous les autres combos Race/Genre

                End If
        End If
End Sub

Voilà donc pour résumer, quand j'entre une race et un genre, le volet reste comme sur la première image, tant que je n'ai pas l'action d'un bouton ça ne marche pas.

Avez-vous une idée ?

Je vous remercie par avance.

Beoden

Bonjour,

Regarde cet exemple,

Dés que tu auras mis une valeur ou lettre quelconque dans le 1er textbox, l'USF double en largeur

Dés que tu auras mis une valeur ou lettre quelconque dans le 2ème textbox, l'USF revient à l'origine

9beoden.xlsm (15.19 Ko)

Bonjour l'équipe.

Un exemple très simple (avec ton image) :

8exemple.xlsm (48.23 Ko)

Il faut que les conditions de remplissage d'ensemble se trouvent dans CHAQUE combo.

Merci à vous deux pour vos réponses.

En terme de rendu final, ce que je recherche se rapproche plus de ce que M12 me propose.

J'ai essayé de l'appliquer encore une fois à mon cas, mais toujours rien.

Sub AjoutPersonnage_AfterUpdate()

        If Me.cboRace.Value <> "" And Me.cboGenre.Value <> "" Then

#############
Ici je fais donne mes conditions
#############

                If Me.cboRace.Value = "Elfe Clair" And Me.cboGenre.Value = "Femelle" Then
                    With FrmPersonne
                    .Width = 420
                    .Height = 360
                    ElfeClairF.Visible = True
                    End With

                ElseIf Me.cboRace.Value = "Elfe Clair" And Me.cboGenre.Value = "Mâle" Then
                    With FrmPersonne
                    .Width = 420
                    .Height = 360
                    ElfeClairM.Visible = True
                    End With

                ElseIf Me.cboRace.Value = "Elfe Sombre" And Me.cboGenre.Value = "Femelle" Then
                    With FrmPersonne
                    .Width = 420
                    .Height = 360
                    ElfeSomF.Visible = True
                    End With

                ElseIf Me.cboRace.Value = "Elfe Sombre" And Me.cboGenre.Value = "Mâle" Then
                    With FrmPersonne
                    .Width = 420
                    .Height = 360
                    ElfeSomM.Visible = True
                    End With

#############
Je termine par ça
#############

            Else
            If Me.cboRace.Value = "" And Me.cboGenre.Value = "" Then
            With FrmPersonne
            .Width = 260
            .Height = 360
            End With

        End If

End Sub

Je n'ai pas précisé que je débute un peu dans le VBA ^^ Peut-être que je ne cerne pas le problème, mais pour moi ça devrait fonctionner...

Bonsoir,

un autre exemple :

@ bientôt

LouReeD

Bonjour à tous,

Avec un USF ressemblant au modèle

5beoden.xlsm (17.63 Ko)

Ton problème vient de ce que tu n'as pas dû faire au départ un bon vieil organigramme fonctionnel (crayon, papier, gomme).

On le voit tout de suite quand tu écris :

If cboRace.Value <> "" And cboGenre.Value <> "" Then
If cboRace.Value = "Elfe Clair" And cboGenre.Value = "Femelle" Then
Bla...bla...la...
'Là il y aurait des ELSEIF pour insérer tous les autres combos Race/Genre
End If
End If

parce que la condition If cboRace.Value <> "" And cboGenre.Value <> "" Then ne sert à rien. Si tu l'enlèves, le résultat sera identique.

En fait tout se passe comme si tu ne savais pas exactement ce qui doit déclencher l'élargissement de ton formulaire.

Si l'élargissement doit être automatique dès qu'il y a un contenu dans les deux combos quel qu'il soit, alors tu peux t'inspirer de la base ci-dessous. Mais je te confirme que c'est dans les combos que ça se passe.

Naine.xlsm



Merci à tous pour vos retours !

J'ai réussi à obtenir ce que je souhaitais.

En effet Optimix, en relisant tout ça je me suis rendu compte que certaines choses étaient en trop, que ça ne servait à rien et je l'avais même volontairement supprimé avant même de lire ton commentaire ^^.

If cboRace.Value <> "" And cboGenre.Value <> "" Then

J'arrive donc au résultat que je souhaitais. Pour que ce soit parfait il me manquerait une chose mais je n'arrive pas à le faire... Je ne sais pas si c'est mon manque de vocabulaire ou si je suis parti de biais encore une fois...

Je me suis rendu compte que dans mon formulaire, les images ont un ordre (suivant la création de ces dernières dans le Userform). Et donc, si je commence par un Nain (qui est au bas de la liste) et que je souhaite changer par la suite et passer sur un Elfe, la dernière image que j'ai créée dans le Userform étant Nain, elle reste par dessus et maintenant activée par la macro.

Conséquence : Lorsque l'on joue avec les combobox Race et Genre, ça ne suit pas comme il le faudrait, la dernière image créée reste affichée.

J'ai essayé de donner le nom de l'image choisie à une variable (Vimage) et j'ai essayé de cacher l'image si les combobox changent de valeur, mais je ne suis arrivé à rien.

J'ai aussi essayé de changer la position de l'image pour qu'elle passe en 1er plan mais je n'y suis pas arrive non plus.

Avez-vous une idée (Ca sera ma dernière demande promis ^^)

Je met mon code ci-dessous le classeur est trop lourd...

Option Explicit

    Dim Vimage As String

'###############################################
'BOUTON FERMER
'###############################################

Private Sub cmdAnnuler_Click()

    FrmPersonne.Hide
    Unload FrmPersonne

End Sub

'###############################################
'BOUTON OK
'###############################################

Private Sub cmdOK_Click()

'###############################################
'REMPLISSAGE DE LA FICHE
'###############################################

    'INFORMATIONS PERSONNAGE
    Cells(5, 3) = cboRace.Value
    Cells(2, 9) = UCase(txtNom.Value)
    Cells(2, 7) = (txtPrenom.Value)
    Cells(6, 3) = cboGenre.Value
    Cells(6, 8) = txtPro.Value

    'CLASSE
    If optWar.Value = True Then
        Cells(4, 3) = "Guerrier"
    ElseIf optMage.Value = True Then
        Cells(4, 3) = "Mage"
    ElseIf optRogue.Value = True Then
        Cells(4, 3) = "Éclaireur"
    End If

    'ASCENDANT
    Cells(5, 3) = cboAsc.Value

    'CROYANCE
    If optCroy.Value = True Then
        Cells(7, 14) = "Croyant"
    ElseIf optAT.Value = True Then
        Cells(7, 14) = "Athée"
    ElseIf optInd.Value = True Then
        Cells(7, 14) = "Indécis"
    End If

End Sub

Sub cboRace_Change()

        If cboRace.Value <> "" And cboGenre.Value <> "" Then
            Call Ajout_Perso

            'UTILISATION DE LA VARIABLE VIMAGE POUR CACHER LES IMAGES
            '(Ne fonctionne pas)
'            Vimage.Visible = False
        Else
            Me.Width = 260
        End If

End Sub

Sub cboGenre_Change()

        If cboRace.Value <> "" And cboGenre.Value <> "" Then
            Call Ajout_Perso
            'UTILISATION DE LA VARIABLE VIMAGE POUR CACHER LES IMAGES
            '(Ne fonctionne pas)
'            Vimage.Visible = False
        Else
            Me.Width = 260
        End If

End Sub

Sub Ajout_Perso()

'###############################################
'MONTRER L'IMAGE CORRESPONDANTE
'###############################################

        If cboRace.Value = "Elfe Clair" And cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            ElfeClairF.Visible = True
            Vimage = ElfeClairF.Name
            End With
            Exit Sub

        ElseIf cboRace.Value = "Elfe Clair" And cboGenre.Value = "Mâle" Then

            With FrmPersonne
            Me.Width = 420
            ElfeClairM.Visible = True
            Vimage = ElfeClairM.Name
            End With
            Exit Sub

        ElseIf cboRace.Value = "Elfe Sombre" And cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            ElfeSomF.Visible = True
            Vimage = ElfeSomF.Name
            End With
            Exit Sub

        ElseIf cboRace.Value = "Elfe Sombre" And cboGenre.Value = "Mâle" Then

            With FrmPersonne
            Me.Width = 420
            ElfeSomM.Visible = True
            Vimage = ElfeClairM.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Elfe Sylvestre" And Me.cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            ElfeSylF.Visible = True
            Vimage = ElfeSylF.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Elfe Sylvestre" And Me.cboGenre.Value = "Mâle" Then

            With FrmPersonne
            Me.Width = 420
            ElfeSylM.Visible = True
            Vimage = ElfeSylM.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Faune" And Me.cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            FauneF.Visible = True
            Vimage = FauneF.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Faune" And Me.cboGenre.Value = "Mâle" Then

            With FrmPersonne
            Me.Width = 420
            FauneM.Visible = True
            Vimage = FauneM.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Halfelin" And Me.cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            HalfelinF.Visible = True
            Vimage = HalfelinF.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Halfelin" And Me.cboGenre.Value = "Mâle" Then

            With FrmPersonne
            Me.Width = 420
            HalfelinM.Visible = True
            Vimage = HalfelinM.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Humain" And Me.cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            Humaine.Visible = True
            Vimage = Humaine.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Humain" And Me.cboGenre.Value = "Mâle" Then

        With FrmPersonne
            Me.Width = 420
            Humain.Visible = True
            Vimage = Humain.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Nain" And Me.cboGenre.Value = "Femelle" Then

            With FrmPersonne
            Me.Width = 420
            Naine.Visible = True
            Vimage = Naine.Name
            End With
            Exit Sub

        ElseIf Me.cboRace.Value = "Nain" And Me.cboGenre.Value = "Mâle" Then

            With FrmPersonne
            Me.Width = 420
            Nain.Visible = True
            Vimage = Nain.Name
            End With
            Exit Sub

        End If

End Sub

Private Sub UserForm_Initialize()

    cboGenre.AddItem "Mâle"
    cboGenre.AddItem "Femelle"

    cboRace.AddItem "Elfe Clair"
    cboRace.AddItem "Elfe Sombre"
    cboRace.AddItem "Elfe Sylvestre"
    cboRace.AddItem "Faune"
    cboRace.AddItem "Halfelin"
    cboRace.AddItem "Humain"
    cboRace.AddItem "Nain"

    With FrmPersonne
    Me.Width = 260
    End With

End Sub

Bonjour Beoden, le Forum,

Il suffit après la visibilité de chaque image de rajouter la propriété ZOrder

ElfeSomM.Visible = True
ElfeSomM.Zorder 0

Ainsi l'image en sélection sera chaque fois au dessus des autres.

Je ne pense pas que ce soit une bonne idée que d'encapsuler les images dans ton fichier Excel. Ton fichier va souffrir inutilement d'obésité. La fonction LoadPicture() permet d'avoir toutes les images dans un dossier séparé du fichier Excel en ressources externes. Dans l'exemple ci-dessous, si tu sélectionnes "Nain" et "Femelle", la photo se chargera de façon dynamique. Je ne l'ai pas mise dans un dossier à part, mais dans le dossier où se trouve le fichier Excel pour faire simple. Ci-dessous les fichiers à mettre dans le même dossier.

Bien sûr, le nom "nain.jpg" est dans le dur dans cet exemple, mais ce sera à toi de mettre les noms dans un tableau.

4naine.zip (30.90 Ko)
4naine.xlsm (21.25 Ko)

X Cellus,

Merci pour ta réponse, c'est parfait :)

Optimix,

En effet c'est une bonne idée. Je vais essayer de manipuler tout ça pour optimiser mon fichier :)

Merci à tous pour votre aide et merci à toi Optimix pour tes supers conseils !

Bonne continuation.

Bonjour… (d’un nouveau personnage)

qui utilise des tableaux (ListObjects), des noms simples et qui n'abuse pas du Me. afin d’initialiser simplement la largeur et mettre en évidence l’information nécessaire.

Reste à installer les images (non jointes) remplacées ici par des étiquettes en gardant (ou adaptant) des noms identiques à celles-ci.

Si leur nombre et leur poids ne sont pas importants, tu peux les garder dans le classeur sinon tu auras intérêt à adopter l’avis de Optimix .

5usf-jeu.xlsm (30.84 Ko)
Rechercher des sujets similaires à "agrandir automatiquement formulaire"