Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2016VBA - ajouter un drapeau dans une cellule suivant le pays choisi
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 !
Tu as bien cerné ma demande, il y a juste deux problèmes: le fichier bug (il se ferme tout seul) et parfois les drapeaux disparaissent lorsque l'on change de sélection :/
bonjour
une autre proposition
sans avoir a préciser le nom de l'image puisqu'il est senser avoir la liste dans la feuil2
connaissez vous la méthode Application.CopyObjectsWithCells = True
avec cette méthode activée tu copy une cell avec toutes shapes ou picture qui s'y trouverait (peu importe son nom)
partie de la il te suffit de trouver la valeur de target dans ton tableau en feuille 2 colonne"B"
ensuite tu copie l'offset (,1)
et tes shapes n'ont pas besoins d'avoir le nom du pays qu'elle représentent
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plagerecherche As Range, cel As Range, c&
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub
c = Target.Offset(, -1).Interior.Color ' au cas ou la couleur ne serait pas la meme on la memoreise
Application.CopyObjectsWithCells = True
For Each shap In Feuil1.Shapes
x = shap.TopLeftCell.Address(0, 0): y = Target.Offset(, -1).Address(0, 0)
If x = y Then shap.Delete: Exit For
DoEvents
Next
tablo = Feuil2.Range("Tableau1").Columns(1)
For i = 1 To UBound(tablo)
If tablo(i, 1) = Target Then Set cel = Feuil2.Range("Tableau1").Cells(i, 2): Exit For
Next
If Not cel Is Nothing Then cel.Copy Target.Offset(, -1)
Application.CopyObjectsWithCells = False
Target.Offset(, -1).Interior.Color = c ' au cas ou la couleur ne serait pas la meme on la remet
End Sub
Au cas ou vous auriez simplement copié le code dans le projet d'un autre classeur sans avoir vu que les images modèles doivent avoir pour noms ceux de leurs pays, ajoutez ça dans le module Feuil2 (Données pays) :
Code:
Option Explicit
Private Sub Worksheet_Activate()
NommerShapes
End Sub
Private Sub Worksheet_Deactivate()
NommerShapes
End Sub
Private Sub NommerShapes()
Dim Rng As Range, Shp As Shape, Cel As Range, DifCol As Integer
With Me.ListObjects(1)
Set Rng = .ListColumns("Flag").DataBodyRange
DifCol = .ListColumns("Country").Index - .ListColumns("Flag").Index
End With
For Each Shp In Me.Shapes
Set Cel = Intersect(Rng, Shp.TopLeftCell)
If Not Cel Is Nothing Then
Shp.Name = Cel.Offset(0, DifCol).Value
Shp.Left = Cel.Left + (Cel.Width - Shp.Width) / 2
Shp.Top = Cel.Top + (Cel.Height - Shp.Height) / 2
End If
Next Shp
End Sub
bonjour
une autre proposition
sans avoir a préciser le nom de l'image puisqu'il est senser avoir la liste dans la feuil2
connaissez vous la méthode Application.CopyObjectsWithCells = True
avec cette méthode activée tu copy une cell avec toutes shapes ou picture qui s'y trouverait (peu importe son nom)
partie de la il te suffit de trouver la valeur de target dans ton tableau en feuille 2 colonne"B"
ensuite tu copie l'offset (,1)
et tes shapes n'ont pas besoins d'avoir le nom du pays qu'elle représentent
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim plagerecherche As Range, cel As Range, c&
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub
c = Target.Offset(, -1).Interior.Color ' au cas ou la couleur ne serait pas la meme on la memoreise
Application.CopyObjectsWithCells = True
For Each shap In Feuil1.Shapes
x = shap.TopLeftCell.Address(0, 0): y = Target.Offset(, -1).Address(0, 0)
If x = y Then shap.Delete: Exit For
DoEvents
Next
tablo = Feuil2.Range("Tableau1").Columns(1)
For i = 1 To UBound(tablo)
If tablo(i, 1) = Target Then Set cel = Feuil2.Range("Tableau1").Cells(i, 2): Exit For
Next
If Not cel Is Nothing Then cel.Copy Target.Offset(, -1)
Application.CopyObjectsWithCells = False
Target.Offset(, -1).Interior.Color = c ' au cas ou la couleur ne serait pas la meme on la remet
End Sub
Au cas ou vous auriez simplement copié le code dans le projet d'un autre classeur sans avoir vu que les images modèles doivent avoir pour noms ceux de leurs pays, ajoutez ça dans le module Feuil2 (Données pays) :
Code:
Option Explicit
Private Sub Worksheet_Activate()
NommerShapes
End Sub
Private Sub Worksheet_Deactivate()
NommerShapes
End Sub
Private Sub NommerShapes()
Dim Rng As Range, Shp As Shape, Cel As Range, DifCol As Integer
With Me.ListObjects(1)
Set Rng = .ListColumns("Flag").DataBodyRange
DifCol = .ListColumns("Country").Index - .ListColumns("Flag").Index
End With
For Each Shp In Me.Shapes
Set Cel = Intersect(Rng, Shp.TopLeftCell)
If Not Cel Is Nothing Then
Shp.Name = Cel.Offset(0, DifCol).Value
Shp.Left = Cel.Left + (Cel.Width - Shp.Width) / 2
Shp.Top = Cel.Top + (Cel.Height - Shp.Height) / 2
End If
Next Shp
End Sub
- 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