Microsoft 365 Images liste déroulante en VBA

  • Initiateur de la discussion Initiateur de la discussion juju91
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

juju91

XLDnaute Junior
Bonjour,
Encore besoin d'aide.
j'ai adapté un code trouvé qui affiche automatiquement une image selon le choix fait dans une liste.
Mon problème est que je n 'arrive pas à reproduire le code sur plusieurs colonnes qui sont dans la même feuille.

Ci-joint un exemple , qui sera surement plus explicite.

Par avance merci.
 

Pièces jointes

Bonsoir juju91, Patrick,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim F As Worksheet, c As Range, i As Variant, o As Object
Set F = Sheets("Images")
Application.ScreenUpdating = False
DrawingObjects.Delete 'RAZ
For Each c In Cells.SpecialCells(xlCellTypeConstants)
    If c.Column Mod 4 = 0 Then
        i = Application.Match(c, F.Columns(1), 0)
        If IsNumeric(i) Then
            For Each o In F.DrawingObjects
                If o.TopLeftCell.Address = F.Cells(i, 2).Address Then
                    o.Copy
                    Paste
                    Selection.Left = c(1, 2).Left + (c(1, 2).Width - Selection.Width) / 2
                    Selection.Top = c(1, 2).Top + (c(1, 2).Height - Selection.Height) / 2
                    Exit For
                End If
            Next o
        End If
    End If
Next c
ActiveCell.Activate
End Sub
Modifiez ou validez une cellule quelconque de la feuille "Choix".

A+
 

Pièces jointes

Bonjour patricktoulon,
Merci beaucoup c'est parfait.
j'ai une dernière demande.
Est il possible de mettre à jour plusieurs feuilles ( identiques) par rapport à la première feuille sur laquelle les ''actions sont effectuées.
Ci-joint un fichier exemple avec deux feuilles complémentaires.
Encore un grand merci à vous
 

Pièces jointes

Bonjour le forum,

Quelle idée de mettre des formules de liaison dans les cellules contenant des listes de validation ??!!

Ce code dans ThisWorkbook supprime les formules de liaison :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Workbook_SheetChange Sh, Sh.[A1] 'lance la macro
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim F As Worksheet, c As Range, i As Variant, o As Object
Set F = Sheets("Images")
If Sh.Name = F.Name Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'si aucune SpecialCell
Sh.DrawingObjects.Delete 'RAZ
With Sh.UsedRange.Offset(3)
    .Value = .Value 'supprime les formules de liaison
    .Replace 0, "", xlWhole 'supprime les zéros
    For Each c In .SpecialCells(xlCellTypeConstants)
        If c.Column Mod 4 = 0 Then
            i = Application.Match(c, F.Columns(1), 0)
            If IsNumeric(i) Then
                For Each o In F.DrawingObjects
                    If o.TopLeftCell.Address = F.Cells(i, 2).Address Then
                        o.Copy
                        Sh.Paste
                        Selection.Left = c(1, 2).Left + (c(1, 2).Width - Selection.Width) / 2
                        Selection.Top = c(1, 2).Top + (c(1, 2).Height - Selection.Height) / 2
                        Exit For
                    End If
                Next o
            End If
        End If
    Next c
End With
ActiveCell.Activate
Application.EnableEvents = True 'réactive les évènements
End Sub
Edit : ajouté On Error Resume Next 'si aucune SpecialCell

A+
 

Pièces jointes

Dernière édition:
Bonsoir le forum,

La solution du post #5 a un inconvénient : un saut d'écran très visible, du moins chez moi sur Win 11 Excel 2019.

Il se produit chaque fois qu'on modifie une feuille "Choix" ou qu'on l'active.

Pour l'éviter il ne faut pas supprimer les objets existants mais les masquer.

La suppression se faisant ensuite pour toutes les feuilles lors de l'enregistrement :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Workbook_SheetChange Sh, Sh.[A1] 'lance la macro
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim F As Worksheet, c As Range, i As Variant, o As Object
Set F = Sheets("Images")
If Sh.Name = F.Name Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'si aucune SpecialCell
Sh.DrawingObjects.Visible = False 'masque les objets existants
With Sh.UsedRange.Offset(3)
    .Value = .Value 'supprime les formules de liaison
    .Replace 0, "", xlWhole 'supprime les zéros
    For Each c In .SpecialCells(xlCellTypeConstants)
        If c.Column Mod 4 = 0 Then
            i = Application.Match(c, F.Columns(1), 0)
            If IsNumeric(i) Then
                For Each o In F.DrawingObjects
                    If o.TopLeftCell.Address = F.Cells(i, 2).Address Then
                        o.Copy
                        Sh.Paste
                        Selection.Left = c(1, 2).Left + (c(1, 2).Width - Selection.Width) / 2
                        Selection.Top = c(1, 2).Top + (c(1, 2).Height - Selection.Height) / 2
                        Exit For
                    End If
                Next o
            End If
        End If
    Next c
End With
ActiveCell.Activate
Application.EnableEvents = True 'réactive les évènements
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim w As Worksheet, o As Object
On Error Resume Next
For Each w In Worksheets
    For Each o In w.DrawingObjects
        If o.Visible Then Else o.Delete
Next o, w
Application.OnTime 1, Me.CodeName & ".Sauvegarde" 'enregistrement différé
End Sub

Sub Sauvegarde()
Application.EnableEvents = False 'désactive les évènements
Me.Save
Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

Pièces jointes

Dernière édition:
Bonsoir job75

Chez moi petit Hic lors d'un enregistrement j'ai un débocage et en plus il y à un icône parasite qui s'affiche si aucun choix n'a été fait par les listes déroulantes et qui disparait lors d'un choix

1741033447455.png



1741033298408.png
 
Bonjour Job75, le forum

J'ai testé ton dernier fichier #12 + le fichier #7 effectivement maintenant plus de débocage à l'enregistrement 👍 par contre bizarrement j'ai toujours le phénomène d'un icône parasite qui s'affiche si aucun choix effectué

Slts


Test.gif
 
L'icône parasite s'affiche quand il n'y a pas de textes sous la ligne 3.

C'est dû à la recherche par SpecialCells(xlCellTypeConstants)

On peut l'éviter facilement mais bof :
VB:
For Each c In Union(Sh.Range("D1"), .Cells).SpecialCells(xlCellTypeConstants)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
85
Retour