Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[VBA] comparer 2 images

  • Initiateur de la discussion Initiateur de la discussion Hervé
  • 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 !

Hervé

XLDnaute Barbatruc
Bonjour tout le monde

je cherche un code me permettant de comparer deux controles images dans un userform.

afin d'etre plus clair, en pieces jointes un exemple qui me renvoi "images différentes", alors qu'il s'agit bien de la meme image😱

d'avance, merci pour l'aide.

salut
 

Pièces jointes

Re : [VBA] comparer 2 images

Bonjour hervé,

Je ne suis pas sur que d'un point de vue VBA, on puisse le faire comme tu l'as fait. Tes images sont 2 objets différents donc ne sont pas égaux (enfin je pense).

En effet il faudrait peut-être tester les caractéristiques de tes 2 images avec le width, height, puis prendre chaque point et les comparer. Mais bon la c'est plus du domaine d'une grande pointure des images et du VBA.
 
Re : [VBA] comparer 2 images

salut MJ

Tu confirmes mes craintes 😱

la solution doit passer par l'analyse de chaque pixel des images à l'aide d'api.

ca doit etre faisable mais trop lourd pour ce que je veux faire.

merci pour ton aide

bye
 
Re : [VBA] comparer 2 images

bonjour Hervé
Salut Mj13

Une idée (peut-etre a coté de la plaque)
Ces images ont été importées dans EXCEL
peut-on leur attribuer au moment de l'import une partie commune du nom (ex papillon1 et papillon2) auquel cas il suffirait ensuite de comparer les noms ?
 
Re : [VBA] comparer 2 images

bonsoir à vous et meilleurs à ceux que je n'ai pas encore eu le plaisir de croiser sur le forum ... ;o)


Tout comme PierreJean, il serait interssant de contrôler les images (ou les icônes semble t'il dans ton classeur exemple) avant de les charger dans l"UserForm.



Sinon, un exemple en utilisant la bibliothèque Windows Image Acquisition.
Les deux contrôles Images sont supposés de même dimension.

Les deux images de ton classeur renvoient curieusement Faux (la 9eme valeur du tableau Img.FileData.BinaryData est différente) mais j'ai retesté avec plusieurs autres fichiers persos et la macro proposée semble bien fonctionner.


Code:
Option Explicit
Option Base 1
 
Private Declare Function OpenClipboard& Lib "user32" (ByVal hwnd As Long)
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData& Lib "user32" (ByVal wFormat&, ByVal hMem&)
Private Declare Function CloseClipboard& Lib "user32" ()
Private Declare Function DestroyIcon& Lib "user32" (ByVal hIcon&)
 
Private Const ImgTemp1 As String = "C:\ImgTemp1.jpg"
Private Const ImgTemp2 As String = "C:\ImgTemp2.jpg"
 
Private Sub CommandButton1_Click()
    Dim iPic As StdPicture
    Dim hCopy&
    Dim Img As ImageFile
    Dim Tableau1 As Variant, Tableau2 As Variant
 
    'Place l'image dans le presse papier
    Set iPic = Me.Image1.Picture
    OpenClipboard 0&: EmptyClipboard
    hCopy = SetClipboardData(2, iPic.Handle)
    CloseClipboard
 
    'Enregistre l'image sur le disque dur
    If hCopy Then SavePicture iPic, ImgTemp1
    DestroyIcon iPic.Handle
 
    'Place l'image dans le presse papier
    Set iPic = Me.Image2.Picture
    OpenClipboard 0&: EmptyClipboard
    hCopy = SetClipboardData(2, iPic.Handle)
    CloseClipboard
 
    'Enregistre l'image sur le disque dur
    If hCopy Then SavePicture iPic, ImgTemp2
    DestroyIcon iPic.Handle
 
    Set Img = New ImageFile
    Img.LoadFile "C:\ImgTemp1.jpg"
    Tableau1 = Img.FileData.BinaryData
    Set Img = Nothing
 
    Set Img = New ImageFile
    Img.LoadFile "C:\ImgTemp2.jpg"
    Tableau2 = Img.FileData.BinaryData
    Set Img = Nothing
 
    MsgBox "Identiques: " & TableauxIdentiques(Tableau1, Tableau2)
    Kill ImgTemp1
    Kill ImgTemp2
End Sub
 
 
Function TableauxIdentiques(Tab1, Tab2) As Boolean
    Dim i As Double
 
    If UBound(Tab1) <> UBound(Tab2) Then
            TableauxIdentiques = False
            Exit Function
        Else
            For i = 1 To UBound(Tab1)
                If Tab1(i) <> Tab2(i) Then
                    TableauxIdentiques = False
                    Exit Function
                End If
            Next i
    End If
 
    TableauxIdentiques = True
End Function


Bonne soirée
MichelXld
 
Re : [VBA] comparer 2 images

bonsoir

salut à vous deux 🙂

michel, j'ai testé ton code (parfait, comme d'hab), mais trop lourd pour mon utilisation.

les images proviennent d'un imagelist et son "envoyées" aleatoirement vers des controles images, 144 controles images, j'ai peur que les temps de traitement soient trop long.

je vais m'orienter vers l'idée de pierrejean, et stochée le renvoi dans une matrice.

pour comprendre ce que je suis en train de faire, jouer à un mahjong en vba ^^

salut
 
Re : [VBA] comparer 2 images

bonsoir


les images proviennent d'un imagelist et son "envoyées" aleatoirement vers des controles images

Dans ce cas, stocke le numero d'index de l'imagelist dans la propriété Tag du controle Image, lors du chargement aléatoire.
Ensuite il suffit de comparer la propriété Tag des deux controles Image.


Bonne soirée
MichelXld
 
- 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
22
Affichages
1 K
Réponses
21
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…