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 !
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...
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+
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
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
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
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
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é.
A°
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 !"
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
Bonjour
Cette vérification est conçue pour prévenir d'éventuelles erreurs en s'assurant que "Target" correspond bien à la cellule AM6, cependant, elle peut être omise si nécessaire.
A+
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.
Re
Je vous remercie pour vos commentaires. Il semble donc que cela ne soit pas nécessaire.
Pour plus de détails sur le code, veuillez consulter le post n°7.
Merci.