IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème : Insérer dans une cellule provenant d'une image d'un userform


Sujet :

Macros et VBA Excel

  1. #21
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Au temps pour moi. Remplace le code du module de l'userform par le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub ComboBox1_Click()
        Dim Chemin As String, C As Range, ResAdr As String
        Chemin = "C:\Users\Daniel\Documents\Donnees\Daniel\mpfe"
        Me.ComboBox2.Clear
        Set C = Cells.Find(Me.ComboBox1.Value, , , xlPart)
        If Not C Is Nothing Then
            Me.ComboBox2.Clear
            ResAdr = C.Address
            Do
                If Left(C.Value, Len(Me.ComboBox1.Value)) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem C.Value
                Set C = Cells.FindNext(C)
            Loop Until C.Address = ResAdr
            If Me.ComboBox2.ListCount > 1 Then
                Me.Height = 130
                Me.ComboBox2.Visible = True
                Exit Sub
            Else
                Me.ComboBox2.Clear
                C.Offset(, 1).Select
                Set img = ActiveSheet.Pictures.Insert(Chemin & "\" & Me.ComboBox1.Value & ".jpg")
                img.Height = C.Height
            End If
        End If
        Unload Me
    End Sub
     
    Private Sub ComboBox2_Click()
        Set C = Cells.Find(Me.ComboBox2.Value, , , xlWhole)
        C.Offset(, 1).Select
        Chemin = "C:\Users\Daniel\Documents\Donnees\Daniel\mpfe"
        Set img = ActiveSheet.Pictures.Insert(Chemin & "\" & Me.ComboBox2.Value & ".jpg")
        img.Height = C.Height
        Unload Me
    End Sub
     
    Private Sub UserForm_Activate()
        Set v = Me.ComboBox1
        Me.ComboBox2.Visible = False
        Me.Height = 70
        Me.ComboBox1.Clear
        Me.ComboBox1.List = Array("20", "30", "40")
    End Sub
    Il faudra également que tu remplaces la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBox1.List = Array("20", "30", "40")
    par le remplissage réel du combobox.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  2. #22
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Bonjour à toutes et à tous,
    Malheureusement ce n'est pas tout à fait ça.
    Ce petit bout de code fait ce que je souhaite mais il y a plusieurs soucis dont :

    1) l'image s'affiche en grand (j'ai essayé avec .height et .width mais cela bug)
    2) parfois le nom de l'image n'est pas tout à fait la même que le libellé, car ce dernier peut porter des précision (20_1, 20_2,...), du coup ce code ne trouve pas l'image. Quitte à ce que ce soit l'une des image qu'il a trouvé qui s'affiche.
    3) Est-il possible de faire cela automatiquement sans cliquer sur le bouton à chaque ligne? (En fait quand l'image est trouvée, il n'y a pas besoin de cliquer.)

    Merci à tous pour votre aide.

  3. #23
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    1) l'image s'affiche en grand (j'ai essayé avec .height et .width mais cela bug)
    Oui; quel est le message d'erreur ? quelle valeur as-tu essayé d'entrer ?

    2) parfois le nom de l'image n'est pas tout à fait la même que le libellé
    Regarde le classeur joint.

    3) Est-il possible de faire cela automatiquement sans cliquer sur le bouton à chaque ligne?
    Tu veux dire : laisser le userform affiché ? Regarde le classeur joint.
    Fichiers attachés Fichiers attachés
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  4. #24
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Oui; quel est le message d'erreur ? quelle valeur as-tu essayé d'entrer ?
    Merci, voici l'erreur :

    Erreur d'exécution '1004' :

    Impossible de définir la propriété Top de la classe Range

    PS : J'ai résolu le problème de la taille.

    Oui le fait qu'il me propose d'autres propositions est intéressant.
    Par contre ne peut-il pas prendre le premier qu'il trouve dans la liste commençant par le libellé?

    Ce que je veux dire c'est qu'au clic sur le bouton, qu'il cherche automatiquement l'image en fonction du libellé (comme le code que j'avais mis précédemment) et qu'il l'insère et si le libellé n'est pas tout le même (ex : 20_2, 20_1,...), qu'il prenne le 20.jpg

    Merci pour ton aide.

  5. #25
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Soyons clair. Si 20.jpg n'existe pas, je prends 20_1.jpg s'il existe, sinon 20_2.jpg etc ?

    comme le code que j'avais mis précédemment
    Où ? Quand ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  6. #26
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Autant pour moi, voici le code dont je me suis inspirée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub j_espere_que_ca_marche()
        Dim i As Integer, path As String, sep As String, img As String
        sep = Application.PathSeparator
        path = ActiveWorkbook.path & sep & "images"
        i = 1
        'j = 8
    ' balaye la colonne H jusqu'à cellule vide
        Do Until Cells(i, 8).Value = ""
    ' indique à Excel où insérer l'image
                Cells(i, 11).Select
    ' insère une image jpg
                img = path & Cells(i, 8).Value & ".jpg"
                If Dir(img) = "" Then
                   MsgBox "Image """ & img & """ non trouvée"
                Else
                   ActiveSheet.Pictures.Insert(path & Cells(i, 8).Value & ".jpg").Select
                   Selection.Top = Cells(i, 11).Top
                   Selection.Left = Cells(i, 11).Left
                   Selection.Width = Cells(i, 11).Width
                   Selection.Height = Cells(i, 11).Height
                End If
     
                i = i + 1
        Loop
    End Sub
    Cela fonctionne parfaitement, le seul souci c'est que parfois il ne trouve pas l'image (donc msgbox), mais je souhaiterai qu'il insère tout de même une image, possédant ou commençant par le libellé trouvé.

    Merci et pardon pour l'oubli.

  7. #27
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Mets cette macro dans le module de la feuille; quand tu fais un double clic sur une cellule contenant 20, 30 ou 40, la photo vient s'insérer. Il y aura intérêt à limiter le champ d'exécution de la macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        If Target.Count <> 1 Then Exit Sub
        Dim Chemin As String, C As Range, Fich As String
        Chemin = "C:\Users\Daniel\Documents\Donnees\Daniel\mpfe"
        Cancel = True
        Fich = Dir(Chemin & "\" & Target.Value & ".jpg")
        If Fich <> "" Then
            Target.Offset(, 1).Select
            Set img = ActiveSheet.Pictures.Insert(Chemin & "\" & Fich)
            img.Height = Target.Height
        Else
            Fich = Dir(Chemin & "\" & Target.Value & "*.jpg")
            Set img = ActiveSheet.Pictures.Insert(Chemin & "\" & Fich)
            img.Height = Target.Height
        End If
    End Sub
    Regarde le classeur joint.
    Fichiers attachés Fichiers attachés
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  8. #28
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Oui ceci fonctionne merci.
    Simplement 3 petites remarques :
    1) l'image se met sur le libellé, ne pourrait-elle pas s'insérer dans la colonne d'à coté?
    2) s'il ne trouve pas d'image, il y a une erreur d'exécution '1004'. Ne pourrait-il pas y avoir une msgbox pour simplement dire que l'image est inexistante par exemple
    3) avec un bouton (ou autre), ne peut-on pas faire cette manipulation automatiquement, sans double-cliquer sur chaque cellule?

    Merci beaucoup en tout cas

  9. #29
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Attache cette macro à un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub CommandButton1_Click()
        Dim Chemin As String, C As Range, Fich As String, Img
        Chemin = "C:\Users\Daniel\Documents\Donnees\Daniel\mpfe"
        Fich = Dir(Chemin & "\" & ActiveCell.Value & ".jpg")
        If Fich <> "" Then
            ActiveCell.Offset(, 1).Select
            Set Img = ActiveSheet.Pictures.Insert(Chemin & "\" & Fich)
            Img.Height = ActiveCell.Height
        Else
            Fich = Dir(Chemin & "\" & ActiveCell.Value & "*.jpg")
            If Fich = "" Then
                MsgBox "Image introuvable"
                Exit Sub
            End If
            ActiveCell.Offset(, 1).Select
            Set Img = ActiveSheet.Pictures.Insert(Chemin & "\" & Fich)
            Img.Height = ActiveCell.Height
        End If
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  10. #30
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 197
    Points : 50
    Points
    50
    Par défaut
    Bonjour à toutes et à tous.

    Je viens d'attacher cette macro à un bouton, mais le petit souci c'est que cela fait image par image, pas automatiquement.

    L'idéal serait comme le code joint précédemment, mais avec un *.jpg s'il ne trouve pas l'image exacte, mais sans succès.

    Merci pour ton aide.

  11. #31
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Je viens d'attacher cette macro à un bouton, mais le petit souci c'est que cela fait image par image, pas automatiquement.

    L'idéal serait comme le code joint précédemment, mais avec un *.jpg s'il ne trouve pas l'image exacte, mais sans succès.
    La macro insère une image à droite de la cellule active. Si ce n'est pas cela, explique ce que tu veux. Si elle ne trouve pas, par exemple, elle insère 20_1, sinon, 20_2 etc. Est-ce que ce n'est pas ce qui se passe ?
    Mets en PJ ton classeur avec une photo que je puisse tester.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  12. #32
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Regarde le classeur joint et la photo "20_1.jpg. En A13, il y a "20". Sélectionne la cellule et presse le bouton. La photo 20_1 va s'insérer en B13.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/01/2015, 08h27
  2. [XL-2003] macro copier plage une de cellules et l'insérer dans la cellule active
    Par grimou dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/05/2009, 23h42
  3. différencier une cellule vide d'une cellule nulle
    Par schwarzy2 dans le forum VB.NET
    Réponses: 4
    Dernier message: 02/09/2008, 13h50
  4. incrémenter une cellule jusqu'a une cellule variable
    Par derf3183 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/07/2006, 14h48
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo