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

Probleme sur l'import et exploitation des images sur Vba

Vindediou

XLDnaute Nouveau
Bonjour

J'aimerai inserer des photos dans des tableaux qui se suivent.
Les tableaux sont toujours les memes et disposés a la suite.
donc pour mon premier tableau j'importe les photos et les mets dans le premier tableau (ok).
mais lorsque je passe au secoond et au troisieme les photos ne s'importent meme pas
CF fichier joint
Pouvez vous m'aiguiller.
 

Pièces jointes

  • image.xlsm
    29.7 KB · Affichages: 40

Paf

XLDnaute Barbatruc
Bonjour,

si on le fait pour un tableau,une boucle permettrait de reproduire le code pour chaque tableau.
Si vous nous disiez combien d'image et comment vous voulez les disposer dans le premier tableau, s'il y a un ordre à respecter ....une proposition précise pourrait vous être faite.

A+
 

Vindediou

XLDnaute Nouveau
Bonjour Paf
elle doit permettre a l'utilisateur de selectionner les photos (Maximum 7 photos) et de les inserer dans le tableau

Par exemple si la cellule A1 est pas vide alors on propose de selectioner les photos et elle sont inserées dans les cellules a coté B2,B3,B4,..,B8
on passe a la A2 idem
jusqu'a une cellule Ax vide ou l'on arrete

j espère avoir été suffisamment clair
Merci d'avance
 

Paf

XLDnaute Barbatruc
Re,

J'aimerai inserer des photos dans des tableaux qui se suivent.
Par exemple si la cellule A1 est pas vide alors on propose de selectioner les photos et elle sont inserées dans les cellules a coté B2,B3,B4,..,B8

Dans le classeur joint, je vois bien 3 tableaux. Ils contiennent 7 zones (constituées de cellules fusionnées) identiques.
Pour le premier tableau on trouve:
zone 1 en A1,zone 2 en U1, zone 3 en A12, zone 4 en U12, zone 5 en AF12, zone 6 en U18 et zone 7 en AF18

Même si les emplacements précisés au post 2 ne correspondent pas, je crois comprendre qu'on propose de sélectionner une photo uniquement pour les zones vides ??

A+
 

Vindediou

XLDnaute Nouveau
"Même si les emplacements précisés au post 2 ne correspondent pas, je crois comprendre qu'on propose de sélectionner une photo uniquement pour les zones vides ??"

Je suis pas un super doué en vba mais tu as s'en doute raison.
J'ai bidouillé une macro qui permet d'inserer les images dans l'espace vide selectionné. Mais malheureusement meme en guidant un peu les images lors de la seconde boucle les images n'apparaise meme pas.
 

Paf

XLDnaute Barbatruc
Re,

un essai comportant deux sub( pour démarrer lancer la première), à copier dans un module standard.
A tester

VB:
Sub Vindediou()
Dim i As Byte, j As Integer, PosImage, Décal As Byte, OK As Boolean
Décal = 0
PosImage = Array("A1", "U1", "A12", "U12", "AF12", "U18", "AF18")
With Worksheets("Feuil1")
For i = 1 To 47 Step 23 ' pour chacun des 3 tableaux(ligne 1, 24 et 47)
    ActiveWindow.ScrollRow = 23 * Décal + 1
    For j = LBound(PosImage) To UBound(PosImage) ' pour chaque adresse de zone image
        .Range(PosImage(j)).Offset(Décal * 23, 0).Select
        For Each sh In .Shapes()
            If sh.Type = 13 Then
                If sh.TopLeftCell.Address(0, 0) = .Range(PosImage(j)).Offset(Décal * 23, 0).Address(0, 0) Then
                    OK = True
                    Exit For
                End If
            End If
        Next
        If Not OK Then
            Msg = "Voulez vous Insérer la Photo N°" & j + 1  ' Définit le message.
            Style = vbYesNo + vbDefaultButton2     ' Définit les boutons.
            Title = "Insertion Photo dans le tableau " & Décal + 1 ' Définit le titre.
            Rep = MsgBox(Msg, Style, Title)
            If Rep = vbYes Then    ' L'utilisateur a choisi Oui.
                Insert_Image .Range(PosImage(j)).Offset(Décal * 23, 0).Address(0, 0)
            End If
        End If
        OK = False
    Next
    Décal = Décal + 1
Next
End With
ActiveWindow.ScrollRow = 1
End Sub
et
Code:
Sub Insert_Image(Adresse)
Dim C As Range, Img 
Img = Application.GetOpenFilename("Images JPEG (*.jpg), *.jpg", , "Choisissez l'image ") ' choix nom du fichier
If Img <> False Then
    nom = Adresse
    With Worksheets("Feuil1")
     Set C = Range(Adresse).MergeArea ' pour gérer globalementles cellules fusionnées de la zone
     .Pictures.Insert(Img).Name = nom
     .Shapes(nom).Left = C.Left
     .Shapes(nom).Top = C.Top
     .Shapes(nom).LockAspectRatio = msoFalse
     .Shapes(nom).Height = C.Height
     .Shapes(nom).Width = C.Width
    End With
End If
End Sub

A+
 

Paf

XLDnaute Barbatruc
re,

Dans la Sub Insert_Image(Adresse), il faudrait modifier cette ligne:
Set C = Range(Adresse).MergeArea
en
Set C = .Range(Adresse).MergeArea

si la macro est toujours lancée de la feuille Feuil1, ça n'a pas d'importance, sinon il y a risque de soucis.

A+
 

Vindediou

XLDnaute Nouveau
Re

j'ai deux petits probleme si vous pouvez m'aider svp je suis coincer avec le vrai tableau
pour plus de facilité je mais qu'une parti sinn ca deveindrai vraiment brouillon (et aussi a moi d'apprendre)

le bouton est sur la feuil2 et du coup ca bug a ce niveau
.Range(PosImage(j)).Offset(Décal * 40, 0).Select

et les image ne se place pas correctement j'arrive pas a voir pourquoi mais petit a petit elles se decalent

desolé
 

Pièces jointes

  • image aide AVEC VRAI TABLEAU.xlsm
    228.7 KB · Affichages: 53

Paf

XLDnaute Barbatruc
re,

cette ligne(.Range(PosImage(j)).Offset(Décal * 40, 0).Select) permet de visualiser l'emplacement où sera copié la photo. Si ce n'est pas indispensable on peut supprimer la ligne, sinon juste après With Worksheets("Feuil1") ajouter
.Activate pour forcer l'affichage de la feuille 1 à l'écran.


Après avoir rempli les 3 tableaux de photos, je ne constate pas de décalage dans les images.
Par contre si je relance la macro , même si l'image existe dans la zone, il est proposé d'y copier une photo, et là la photo copiée n'est pas redimensionnées.

Je regarde pourquoi il est proposé d'insérer une image alors qu'elle existe déjà.

A+
 

Paf

XLDnaute Barbatruc
Re,

quelques modifications pour n'insérer des images que s'il n'y en a pas déjà une, et quelques babioles.

VB:
Sub Bouton1_Clic()

Msg = "Voulez vous insérer ls photos avec la macro"      ' Définit le message.
Style = vbYesNo + vbDefaultButton2          ' Définit les boutons.
Title = "Inserter les photos avec la macro "    ' Définit le titre.
rep = MsgBox(Msg, Style, Title)
If rep = vbNo Then Exit Sub   ' L'utilisateur a choisi non, on quitte.
                   
               


Dim i As Byte, j As Integer, PosImage, Décal As Byte, OK As Boolean
Décal = 0
PosImage = Array("W1", "AQ1", "W12", "AQ12", "BB12", "AQ18", "BB18")
With Worksheets("Feuil1")
.Activate

For i = 1 To 81 Step 40 ' pour chacun des 3 tableaux(ligne 1, 41 et 81)
   If .Cells(1 + 40 * Décal, 17) = "" Then Exit For
   If .Cells(1 + 40 * Décal, 17) <> "" Then
    ActiveWindow.ScrollRow = 40 * Décal + 1
        For j = LBound(PosImage) To UBound(PosImage) ' pour chaque adresse de zone image
            .Range(PosImage(j)).Offset(Décal * 40, 0).Select
            For Each sh In .Shapes()
                If sh.Type = 13 Then
                    nblignes = Range(PosImage(j)).MergeArea.Rows.Count - 1
                    If sh.TopLeftCell.Address(0, 0) = .Range(PosImage(j)).Offset(Décal * 40 + nblignes * (Décal > 0), 0).Address(0, 0) Then
                    OK = True
                        Exit For
                    End If
                End If
            Next
            If Not OK Then
                Msg = "Voulez vous Insérer la Photo N°" & j + 1  ' Définit le message.
                Style = vbYesNo + vbDefaultButton2     ' Définit les boutons.
                Title = "Fiche " & .Cells(1 + 40 * Décal, 17) ' Définit le titre.
                rep = MsgBox(Msg, Style, Title)
                If rep = vbYes Then    ' L'utilisateur a choisi Oui.
                    Insert_Image .Range(PosImage(j)).Offset(Décal * 40 + nblignes * (Décal > 0), 0).Address(0, 0)
                Else: rep = vbNo
                Exit For
                End If
            End If
            OK = False
        Next
        Décal = Décal + 1
   End If
Next
End With
ActiveWindow.ScrollRow = 1
End Sub

Pas réussi à reproduire le souci du décalage des Photos.

Peut-être un problème de version XL, je suis en 2003.

A+
A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…