XL 2013 Afficher des UserForms en fonction des mois

chaelie2015

XLDnaute Accro
Bonsoir FORUM

J'ai développé trois UserForms, chacun étant spécifiquement dédié à une cellule précise dans la feuille intitulée 'Jours fériés'. Plus précisément, il s'agit des cellules de la plage I2:I45 où des formules génèrent des chiffres correspondant à des mois.

Mon objectif est le suivant : à partir de la feuille 'CRT', je souhaite examiner la cellule AM6 (qui contient également une formule générant un chiffre de mois) et vérifier si ce chiffre correspond à l'un des chiffres présents dans la colonne I de la feuille 'Jours fériés'. Si une correspondance est trouvée, je voudrais alors afficher l'UserForm associé à cette cellule.

Je vous remercie d'avance pour toute aide ou conseil que vous pourriez me fournir !

A+
 
Solution
Bonjour

Je ne vois pas l'interet d'afficher un formulaire puis un autre..
à quoi servent tes formulaires?

ci dessous pas de tempo, le second formulaire est affiché lorsque tu fermes le premier
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim USF As Object
    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        For i = 2 To 45
            If .Range("I" & i) = Target Then
            
    '        Set trouve = .Range("I2:I45").Find(Target, LookIn:=xlValues)
    '        If Not trouve Is Nothing Then
                'NomUsf = trouve.Offset(0, 1)
                NomUsf = .Range("J" & i)
                For Each USF In ThisWorkbook.VBProject.VBComponents
                    If...

chaelie2015

XLDnaute Accro
Bonjour chaelie2015

Je pense que c'est faisable, oui, mais sans fichier... c'est plus compliqué 🤪

A+
Bonjour BrunoM45, Forum
Vous avez raison, c'était une omission de ma part. Étant donné l'heure à laquelle je l'ai envoyé, j'étais très fatigué, parfois la fatigue peut jouer des tours. Cependant, je vous ai joint le fichier exemple pour que vous puissiez avoir une meilleure idée de la situation.
A+
 

Pièces jointes

  • Charlie Affichage USF selon cellule.xlsm
    14.9 KB · Affichages: 12

vgendron

XLDnaute Barbatruc
Hello

Code à placer dans le code de la feuille CRT
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim USF As Object
    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        Set trouve = .Range("I2:I45").Find(Target, LookIn:=xlValues)
        If Not trouve Is Nothing Then
            NomUsf = trouve.Offset(0, 1)
            For Each USF In ThisWorkbook.VBProject.VBComponents
                If USF.Name = NomUsf Then
                    VBA.UserForms.Add(NomUsf).Show
                    Exit Sub
                End If
            Next USF
        End If
    End With
End Sub
 

chaelie2015

XLDnaute Accro
Hello

Code à placer dans le code de la feuille CRT
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim USF As Object
    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        Set trouve = .Range("I2:I45").Find(Target, LookIn:=xlValues)
        If Not trouve Is Nothing Then
            NomUsf = trouve.Offset(0, 1)
            For Each USF In ThisWorkbook.VBProject.VBComponents
                If USF.Name = NomUsf Then
                    VBA.UserForms.Add(NomUsf).Show
                    Exit Sub
                End If
            Next USF
        End If
    End With
End Sub
Bonjour vgendron
Merci pour la réponse , supposons que dans la colonne I de la feuille Jours fériés j'ai un chiffre pour deux UserForm différent? je souhaite les afficher un âpres l'autre, ( exemple Dans la cellule I7=3 pour UserForm2 et dans la cellule I8 = 3 pour UserForm3)
merci par avance
 

chaelie2015

XLDnaute Accro
Bonjour Forum,vgendron
Merci pour la réponse , je reformule mon souci. Supposons que dans la colonne I de la feuille Jours fériés j'ai un chiffre pour deux UserForm différent. Je souhaite afficher les deux USF un âpres l'autre avec une temporisation si c'est possible ?
Exemple: Dans la cellule I7=3 pour UserForm2 et dans la cellule I8 = 3 pour UserForm3 Alors afficher USF2 ensuite USF3
merci par avance
 

vgendron

XLDnaute Barbatruc
Bonjour

Je ne vois pas l'interet d'afficher un formulaire puis un autre..
à quoi servent tes formulaires?

ci dessous pas de tempo, le second formulaire est affiché lorsque tu fermes le premier
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim USF As Object
    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        For i = 2 To 45
            If .Range("I" & i) = Target Then
            
    '        Set trouve = .Range("I2:I45").Find(Target, LookIn:=xlValues)
    '        If Not trouve Is Nothing Then
                'NomUsf = trouve.Offset(0, 1)
                NomUsf = .Range("J" & i)
                For Each USF In ThisWorkbook.VBProject.VBComponents
                    If USF.Name = NomUsf Then
                        VBA.UserForms.Add(NomUsf).Show
                    End If
                Next USF
            End If
        Next i
    End With
End Sub
 

chaelie2015

XLDnaute Accro
Bonjour

Je ne vois pas l'interet d'afficher un formulaire puis un autre..
à quoi servent tes formulaires?

ci dessous pas de tempo, le second formulaire est affiché lorsque tu fermes le premier
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim USF As Object
    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        For i = 2 To 45
            If .Range("I" & i) = Target Then
           
    '        Set trouve = .Range("I2:I45").Find(Target, LookIn:=xlValues)
    '        If Not trouve Is Nothing Then
                'NomUsf = trouve.Offset(0, 1)
                NomUsf = .Range("J" & i)
                For Each USF In ThisWorkbook.VBProject.VBComponents
                    If USF.Name = NomUsf Then
                        VBA.UserForms.Add(NomUsf).Show
                    End If
                Next USF
            End If
        Next i
    End With
End Sub
Bonjour vgendron
Merci pour la réponse et Merci pour cette question. J'ai utilisé deux USF qui contiennent des images pour chaque jour férié. Mon objectif est d'afficher des images en fonction de l'événement au cours d'un mois donné.
 

chaelie2015

XLDnaute Accro
dans ce cas, pourquoi ne pas utiliser qu'un SEUL formulaire, et charger l'image en fonction du besoin..
ca me parait plus pratique
Bonjour
Merci pour ta suggestion ! Utiliser un seul formulaire et charger l'image en fonction du besoin peut certainement simplifier les choses. Nous allons explorer cette option et voir comment nous pouvons la mettre en œuvre.
Si tu as des idées spécifiques sur la façon dont nous pourrions le faire, n'hésite pas à les partager. Nous apprécions toujours les contributions des "Excel lien" ;) pour améliorer nos fichiers.
Merci encore !"
 

chaelie2015

XLDnaute Accro
Bonjour

Je ne vois pas l'interet d'afficher un formulaire puis un autre..
à quoi servent tes formulaires?

ci dessous pas de tempo, le second formulaire est affiché lorsque tu fermes le premier
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim USF As Object
    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        For i = 2 To 45
            If .Range("I" & i) = Target Then
           
    '        Set trouve = .Range("I2:I45").Find(Target, LookIn:=xlValues)
    '        If Not trouve Is Nothing Then
                'NomUsf = trouve.Offset(0, 1)
                NomUsf = .Range("J" & i)
                For Each USF In ThisWorkbook.VBProject.VBComponents
                    If USF.Name = NomUsf Then
                        VBA.UserForms.Add(NomUsf).Show
                    End If
                Next USF
            End If
        Next i
    End With
End Sub
Re
Je souhaite copier ce code dans un module de la manière suivante :

VB:
Sub AffichageUserForm()
    Dim USF As Object
    Dim Target As Range
    Set Target = ActiveSheet.Range("AM6") ' Vous pouvez spécifier une autre feuille ou une autre cellule si nécessaire

    If Intersect(Target, Range("AM6")) Is Nothing Then Exit Sub
    With Sheets("Jours fériés")
        For I = 2 To 46
            If .Range("I" & I) = Target Then
                NomUsf = .Range("J" & I)
                For Each USF In ThisWorkbook.VBProject.VBComponents
                    If USF.Name = NomUsf Then
                        VBA.UserForms.Add(NomUsf).Show
                    End If
                Next USF
            End If
        Next I
    End With
End Sub

Voici comment je souhaite que le code soit inséré dans un module. Y a-t-il des paramètres spécifiques à modifier ?
Merci d'avance
 

TooFatBoy

XLDnaute Barbatruc
Cette vérification est conçue pour prévenir d'éventuelles erreurs en s'assurant que "Target" correspond bien à la cellule AM6
Sur la deuxième ligne tu testes s'il y a une intersection entre Target et la cellule AM6, mais sur la première ligne tu as assigné la cellule AM6 à la variable "Target", donc il y a forcément une intersection (il y a même "égalité") et du coup la deuxième ligne ne sert à rien puisque le résultat du test sera toujours Vrai.

Ceci dit, le plus gros problème est à mon avis la logique de ta macro, ou de son appel : telle quelle je ne suis pas sûr qu'elle soit correcte. 😕
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 266
Membres
103 168
dernier inscrit
isidore33