Recherche par validation de données

maval

XLDnaute Barbatruc
Bonjour,

J'ai une feuille "Flag" ou il y a des drapeaux et une feuille "Liste ou j'ai des validations de données qui correspond au non des drapeaux en colonne "G" et en colonne "H" j'ai des contrôles images.
Tous les drapeaux sont nommé par les noms des pays correspondant.
J'aimerai que lorsque j'affiche un nom de pays dans la validations de données le drapeaux correspondant s'affiche dans le contrôles
images.

Je vous remercie de votre aide

Cordialement

Max
 

Pièces jointes

  • Classeur_drapeaux.xlsm
    172.2 KB · Affichages: 118
  • Classeur_drapeaux.xlsm
    172.2 KB · Affichages: 121
  • Classeur_drapeaux.xlsm
    172.2 KB · Affichages: 120

JHA

XLDnaute Barbatruc
Re : Recherche par validation de données

Bonsoir

Une solution du forum un peu différente

JHA
 

Pièces jointes

  • Classeur_drapeaux.xlsm
    169.2 KB · Affichages: 107
  • Classeur_drapeaux.xlsm
    169.2 KB · Affichages: 116
  • Classeur_drapeaux.xlsm
    169.2 KB · Affichages: 113

job75

XLDnaute Barbatruc
Re : Recherche par validation de données

Bonjour maval, JHA,

Voyez le(s) fichier(s) joint(s) et cette macro dans la feuille Liste :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, o As OLEObject, fich As String
Set r = Intersect(Target, [G4:G17])
If r Is Nothing Then Exit Sub
For Each r In r 'si plusieurs cellules (effacement)
  '---détermination du contrôle image---
  For Each o In OLEObjects
    If o.TopLeftCell.Address = r(1, 2).Address Then Exit For
  Next
  o.Object.Picture = LoadPicture("")
  If r <> "" Then
    '---création du fichier gif---
    fich = ThisWorkbook.Path & "\" & r & ".gif"
    With Sheets("Flag").Pictures(r.Text)
      .CopyPicture
      With Me.ChartObjects.Add(0, 0, .Width, .Height).Chart
        .Parent.Select
        .Paste
        .Export fich, "GIF"
        .Parent.Delete
      End With
    End With
    '---chargement et suppression du fichier gif---
    o.Object.Picture = LoadPicture(fich)
    Kill fich
  End If
Next
End Sub
Edit : Application.ScreenUpdating = False n'est pas nécessaire.

A+
 

Pièces jointes

  • Classeur_drapeaux(1).xlsm
    196 KB · Affichages: 67
  • Classeur_drapeaux(1).xls
    264.5 KB · Affichages: 63
Dernière édition:

job75

XLDnaute Barbatruc
Re : Recherche par validation de données

Re,

Si l'on veut que le contrôle image soit entièrement rempli :

Code:
o.Object.PictureSizeMode = 1
Fichier (2).

A+
 

Pièces jointes

  • Classeur_drapeaux(2).xls
    264 KB · Affichages: 29
  • Classeur_drapeaux(2).xlsm
    196 KB · Affichages: 42
Dernière édition:

job75

XLDnaute Barbatruc
Re : Recherche par validation de données

Re,

Une autre solution est de créer une fois pour toutes tous les fichiers gif.

Dans le code de la feuille Flag :

Code:
Private Sub CommandButton1_Click()
'---création des fichiers gif---
Dim p As Picture
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
MkDir ThisWorkbook.Path & "\Drapeaux"
If Err Then MkDir ThisWorkbook.Path & "/Drapeaux" 'ça arrive...
For Each p In Me.Pictures
  p.CopyPicture
  With Me.ChartObjects.Add(0, 0, p.Width, p.Height).Chart
    .Parent.Select
    .Paste
    .Export ThisWorkbook.Path & "\Drapeaux\" & p.Name & ".gif", "GIF"
    .Parent.Delete
  End With
Next
End Sub
L'exécution prend un peu de temps.

Bien sûr la macro de la feuille Liste est plus simple et plus rapide :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, flag As Boolean, o As OLEObject, fich As String
Set r = Intersect(Target, [G4:G17])
If r Is Nothing Then Exit Sub
For Each r In r 'si plusieurs cellules (effacement)
  '---détermination du contrôle image---
  flag = True
  For Each o In OLEObjects
    If o.TopLeftCell.Address = r(1, 2).Address Then flag = False: Exit For
  Next
  If flag Then MsgBox "Contrôle image absent...": Exit Sub
  o.Object.Picture = LoadPicture("")
  o.Object.PictureSizeMode = 1
  If r <> "" Then
    '---chargement du fichier gif---
    fich = ThisWorkbook.Path & "\Drapeaux\" & r & ".gif"
    If Dir(fich) = "" Then MsgBox "Fichier '" & r & ".gif ' introuvable...": Exit Sub
    o.Object.Picture = LoadPicture(fich)
  End If
Next
End Sub
Fichiers joints.

A+
 

Pièces jointes

  • Drapeaux création des fichiers gif(1).xlsm
    200 KB · Affichages: 41
  • Drapeaux création des fichiers gif(1).xls
    253.5 KB · Affichages: 29

maval

XLDnaute Barbatruc
Re : Recherche par validation de données

Bonjour Job75

Je vous remercie beaucoup mais j'ai un petit problème avec mon premier code qui a était fait par mapomme que je remercie encore et salut au passage;
Lorsque je veut ajouter votre code au sien j'ai des messages d'erreur "erreur définie par l’application ou par l'objet" certainement par ma faute mais je n'arrive pas a les faire fonctionner ensemble.

Je vous joint les deux fichier si vous pouvez faire quelque chose.

Je vous remercie d'avance

Cordialement

Max
 

Pièces jointes

  • Classeur_Photo 1.xlsm
    535.5 KB · Affichages: 85
  • Drapeaux création des fichiers gif1.xlsm
    188 KB · Affichages: 61

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Recherche par validation de données

bonjour maval :), le fil :), le forum,

Comme j'ai travaillé sur le fichier Classeur_Photo, je l'ai repris pour intégrer l'affichage des drapeaux à la fois sur la feuille "Feuil2" et dans le formulaire. Mais je peux comprendre et partager les réactions de certains quand, après avoir planché sur un sujet, on s'aperçoit que les données du problème ont changé et que le travail qu'on a fait serait à refaire. Il vaut mieux, Maval, fournir tout de suite l'environnement réel du problème car les solutions à un même problème dans deux environnements différents bien que semblant similaires peuvent en réalité aboutir à des solutions bien différentes.

Pour ce qui est du fichier joint:

Feuil1:
un double-clique sur le nom d'un chien fait apparaître le formulaire.

Feuil2:
un clique sur la photo d'un chien fait apparaître le formulaire.
une liste de validation dans les cellules de la colonne G permettent de choisir le pays.
Le choix d'un pays fait apparaître le drapeau du pays dans le colonne H.

Formulaire:
Il intègre l'image du chien et du drapeau du pays.
On peut quitter le formulaire par la touche Escape.
 

Pièces jointes

  • Classeur_Photo v4.xlsm
    721.5 KB · Affichages: 129

maval

XLDnaute Barbatruc
Re : Recherche par validation de données

Bonjour Mapomme

Jr te remercie beaucoup vraiment nickel.
Et je m'excuse si j'ai froissé quelqu'un je pense a Job75 en trotte se n'était vraiment pas le but mille excuses

Bonne journée à tous

Max
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Recherche par validation de données

(re)maval,

Concernant le fichier que j'ai fourni (v4), il est basé sur la copie des images (chien & drapeau) figurant sur les feuilles Feuil2 et Flag.
Ces images augmentent considérablement la taille de ton fichier.

Un (rapide) calcul en se basant sur une image moyenne de chien d'env. 55Ko aboutit à une taille de fichier d'env 20 Mo (excel 2010 - si on table sur à peu près 350 races de chien). De plus, si on veut modifier les images, on est obligé d'envoyer à chacun, une mise à jour complète du fichier.

Il vaut sans doute mieux construire un fichier sans les images de chien intégrées au fichier et distribuer les images à part. Ainsi le fichier est moins lourd. Ces images, comme l'ont suggéré certains, pourrait être situées dans un sous-répertoire du dossier du fichier. Ainsi si on désire remplacer une image par une autre, il suffit d'envoyer la mise à jour d'un seul fichier image (env. 55Ko). c'est d'ailleurs aussi envisageable avec la liste des chiens et les commentaires s'ils changent souvent.

Le code de gestion des images en serait simplifié. Tout avantage ayant un côté pile, il faudrait gérer, le chargement des images (voire de la liste des chiens et des commentaires) à l'ouverture du fichier pour tenir compte des éventuelles mise à jour de fichier. Il faudrait aussi, effacer les images à la fermeture du fichier pour lui conserver la taille minimale.

Comme toujours, il y a un équilibre à trouver entre longueur et complexité du code, entre taille mémoire et taille disque utilisées, selon l'environnement (réseau ou pas, simple utilisateur ou multiples, matériel), selon le temps de développement qu'on désire y consacrer (donc le budget), selon la facilité de maintenance désirée du code et des données et selon le cahier des charges du client (il ne faut pas l'oublier, le client).

ex: si le fichier est peu diffusé, si les données (images, listes de chiens et commentaires) sont relativement stables , si les quelques utilisateurs ont tous du matériel performant et au moins excel 2007, etc. alors on pourrait estimer qu'une solution en un seul fichier puisse convenir (rapport gain/coût)

Bref, il n'y a que l'auteur du fichier qui peut préférer une solution à une autre. Sur XLD, nous suggérons simplement mais avec ferveur :eek: .
 
Dernière édition:

maval

XLDnaute Barbatruc
Re : Recherche par validation de données

Re Mapomme?

je te remercie de ton intervention et tes commentaires qu'ils sont toujours très intéressantes. Si j'ai bien compris il faudrait avoir dans un sous dossier, toutes les images (chien & drapeau)de façon d'avoir un fichier beaucoup plus léger. Cela était ma première idées mais je n’aie pas osées de le demander....!
Si le temps te le permet et l'envie je suis preneur et reste a ta disposition pour le réaliser.

Je te remercie et te souhaite une bonne journée.

@+

Max
 

maval

XLDnaute Barbatruc
Re : Recherche par validation de données

Bonjour

Suite a l'intervention de mapomme que je remercie et salut au passage je suis toujours à la recherche de façon a mettre les images dans un sous dossier
Il vaut sans doute mieux construire un fichier sans les images de chien intégrées au fichier et distribuer les images à part. Ainsi le fichier est moins lourd. Ces images, comme l'ont suggéré certains, pourrait être situées dans un sous-répertoire du dossier du fichier. Ainsi si on désire remplacer une image par une autre, il suffit d'envoyer la mise à jour d'un seul fichier image (env. 55Ko). c'est d'ailleurs aussi envisageable avec la liste des chiens et les commentaires s'ils changent souvent.

Si quelqu'un à une idée je vous remercie de votre aide

Cordialement

Max
 

Discussions similaires

M
Réponses
6
Affichages
452

Statistiques des forums

Discussions
312 357
Messages
2 087 573
Membres
103 598
dernier inscrit
f-laurent