reherchev pour inserer des images

14 réponses
Avatar
domicol
Bonjour,
j ai une colonne avec plusieurs résultat qui n on pas un ordre définie ex:
1gi
22tr
2c
11p
etc.....................................
ou un autre exemple
22vb
14v
1g1
2vc
etc......................................
dans cet exemple il y a "e;1gi"e; en commun entre les 2 listes mais ne sont pas au même endroit dans liste;en suite la macro me fera remonter l image qui correspond a "e;1gi"e; pour la coller sur une feuille excel.et il doit aussi me coller toutes les autres images correspondante a la liste ;le nombre de cases plaine est variable suivant les solutions
bonne soirée

10 réponses

1 2
Avatar
MichD
Bonjour,
Dans mon exemple,
Le nom de l'onglet de la feuille : "Feuil1"
Le nom des images se trouve dans la colonne A de A1:Ax
Comme tes noms dans tes cellules n'ont pas d'extension de fichier, j'ai
supposé qu'il s'agissait de .jpg
Les images sont insérées dans la cellule à droite de la cellule
contenant le nom et aux mêmes dimensions de la cellule.
Tu dois déterminer les 2 répertoires où sont tes fichiers images.
'---------------------------------------------
Sub TestMonImage()
Dim Img As String
Dim RepImage As String
Dim RepImage2 As String
Dim Rg As Range, C As Range
Dim cellule As Range
Dim reponse As String
Dim Message As String, X As Long
'---------------------------------------------------------------
' donner le répertoire ou se trouve les fichiers
'images qui sont en xxxx.jpg à la ligne ci-dessous.
'---------------------------------------------------------------
RepImage = "E:Images"
'Chemin du répertoire contenant la deuxième image pour "1g1"
RepImage2 = "E:UnAutreRépertoire"
Application.ScreenUpdating = False
With Worksheets("Feuil1") ' Nom onglet feuille à déterminer
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
For Each C In Rg
If C <> "" Then
'La hauteur de chaque ligne aura 350 points.
'à adapter si besoin...
C.RowHeight = 30
If C.Value = "1g1" Then
X = X + 1
End If
If X = 1 Then
Img = RepImage2 & Trim(C.Value) & ".jpg"
X = 0
Else
Img = RepImage2 & Trim(C.Value) & ".jpg"
End If
If Dir(Img) <> "" Then
InsererImage Rg.Parent.Name, C.Offset(, 1), Img, Trim(C)
Else
Message = Message & Img & vbCrLf
End If
End If
Next
Set Rg = Nothing: Set C = Nothing
If Message <> "" Then
MsgBox "Ces images n'ont pas été trouvées." & vbCrLf & _
Message, vbCritical + vbOKOnly, "Attention"
End If
Application.ScreenUpdating = True
End Sub
'---------------------------------------------
Sub InsererImage(feuille As String, ByVal Rg As Range, _
NomImage As String, SonNom As String)
Dim Largeur As Double
Dim Hauteur As Double
Dim Image As Object
With Worksheets(feuille)
Largeur = Rg.Offset(, 1)(, Rg.Columns.Count).Left - Rg.Left
Hauteur = Rg.Offset(Rg.Rows.Count).Top - Rg(1).Top
Set Image = .Pictures.Insert(NomImage)
.Shapes(Image.Name).LockAspectRatio = msoFalse
End With
With Image
'nom de l'image
.Name = SonNom
.Left = Rg.Left + 0.01
.Top = Rg.Top + 0.01
'Largeur de l'image = largeur - 0.01
Image.Width = Largeur - 0.01
'Hauteur de l'image
Image.Height = Hauteur - 0.01
'l'image doit se déplacer avec les cellules
.Placement = xlMoveAndSize
'note, possibilité xlmove et freefloating
'verrouillé ou pas par true ou false
.Locked = True
End With
End Sub
'---------------------------------------------
MichD
Avatar
domicol
Le mardi 12 Mai 2020 à 18:06 par domicol :
Bonjour,
j ai une colonne avec plusieurs résultat qui n on pas un ordre
définie ex:
1gi
22tr
2c
11p
etc.....................................
ou un autre exemple
22vb
14v
1g1
2vc
etc......................................
dans cet exemple il y a "e;1gi"e; en commun entre les 2 listes mais
ne sont pas au même endroit dans liste;en suite la macro me fera remonter
l image qui correspond a "e;1gi"e; pour la coller sur une feuille
excel.et il doit aussi me coller toutes les autres images correspondante a la
liste ;le nombre de cases plaine est variable suivant les solutions
bonne soirée
merci je me suis inspiré de votre macro
je travaille avec toutes les feuilles dans le même fichier
j ai fais cette moaro qui ne marche pas entièrement et je ne trouve pas l'erreur
Dim P1 As String
Dim P2 As String
Dim P3 As String
etc.....
Dim P300 As String
Dim Plage As Range
Set F1 = Worksheets("image")'feuille ou il y a les images
Set Plage = F1.Range("L1:L250") 'plage de cellule ou il y a la valeur exemple"3C"
For Each point In Plage
MsgBox point.Value
'je voudrai que chaque fois que la "MsgBox" affiche un résultat elle exécute la macro qui correspond au résultat
'exemple:
'1er info de la "MsgBox : 1C "il exécute la macro 1C
'2em info de la "MsgBox : 50v "il exécute la macro 50v
'3em info de la "MsgBox : 3C "il exécute la macro 3c
'etc variable un jour il y a 10 info ,2 jours après il n y en aura peut être 20 ou 2 ....
Next
If point = "3C" Then 'si point est égale a 3C tu execute la macro suivante
Call MsgBox("dans 3C")
Sheets("image").Select 'feuille ou se trouve les images
ActiveSheet.Shapes("3C").Select
Selection.Copy
Sheets("bilan").Select 'feuiile ou je colle l'image
Range("R11").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -22
Selection.ShapeRange.IncrementTop 5
Selection.Name = "Image 120"
Range("Y2").Select
End If
Avatar
MichD
Voici un fichier exemple. Évidemment, tu devras adapter le nom des
feuilles, la plage de cellules...
https://www.cjoint.com/c/JEntOeejFvj
MichD
Avatar
domicol
Le mardi 12 Mai 2020 à 18:06 par domicol :
Bonjour,
j ai une colonne avec plusieurs résultat qui n on pas un ordre
définie ex:
1gi
22tr
2c
11p
etc.....................................
ou un autre exemple
22vb
14v
1g1
2vc
etc......................................
dans cet exemple il y a "e;1gi"e; en commun entre les 2 listes mais
ne sont pas au même endroit dans liste;en suite la macro me fera remonter
l image qui correspond a "e;1gi"e; pour la coller sur une feuille
excel.et il doit aussi me coller toutes les autres images correspondante a la
liste ;le nombre de cases plaine est variable suivant les solutions
bonne soirée
Merci
J ai regardé, une question
Je peux choisir la position des images ?
Les images vont se positionner sur une carte pour la compléter .
Bonne soirée
Avatar
MichD
Je peux choisir la position des images ?

OUI, encore faut-il que tu définisses la position que tu désires!
Les images vont se positionner sur une carte pour la compléter .

Qu'est-ce que tu veux que je te réponde? De quelle carte parles-tu? À
quoi ressemble cette carte? Je n’en sais rien...
MichD
Avatar
domicol
Le mardi 12 Mai 2020 à 18:06 par domicol :
Bonjour,
j ai une colonne avec plusieurs résultat qui n on pas un ordre
définie ex:
1gi
22tr
2c
11p
etc.....................................
ou un autre exemple
22vb
14v
1g1
2vc
etc......................................
dans cet exemple il y a "e;1gi"e; en commun entre les 2 listes mais
ne sont pas au même endroit dans liste;en suite la macro me fera remonter
l image qui correspond a "e;1gi"e; pour la coller sur une feuille
excel.et il doit aussi me coller toutes les autres images correspondante a la
liste ;le nombre de cases plaine est variable suivant les solutions
bonne soirée
Je definie Les positions une fois comme cela
ActiveSheet.Shapes("3C").Select
Selection.Copy
Sheets("bilan").Select 'feuiile ou je colle l'image
Range("R11").Select
ActiveSheet.Paste
Selection.ShapeRange.IncrementLeft -22
Selection.ShapeRange.IncrementTop 5
Selection.Name = "Image 120"
Avatar
MichD
Selection.ShapeRange.IncrementLeft -22
Selection.ShapeRange.IncrementTop 5
Selection.Name = "Image 120"

Dans mon exemple, pour déplacer légèrement l'image copiée selon ce que
tu indiques plus haut, tu fais comme ceci dans mon exemple :
Tu remplaces la ligne : ShDest.Paste ShDest.Range("D" & X)
With ShDest
.Paste .Range("R11")
.Shapes(C.Value).IncrementLeft -22
.Shapes(C.Value).IncrementTop 5
End With
Si tu utilises une adresse de cellules .Range("R11") dans une boucle,
cela signifie que toutes les images de la boucle seront insérées au même
endroit.
Le code que tu as publié est réalisé à l'aide de l'enregistrement d'une
macro. Cela aide beaucoup pour débuter, mais si tu veux apprendre à
programmer en VBA-Excel, je te suggère d'utiliser un bon livre.
Une suggestion d'un livre qui date... mais qui est excellent pour les
débutants, tu le trouveras peut-être dans une bibliothèque :
Auteur: John Walkerbach
Titre : Excel 2000 et VBA, le guide du développeur.
MichD
Avatar
domicol
Le mardi 12 Mai 2020 à 18:06 par domicol :
Bonjour,
j ai une colonne avec plusieurs résultat qui n on pas un ordre
définie ex:
1gi
22tr
2c
11p
etc.....................................
ou un autre exemple
22vb
14v
1g1
2vc
etc......................................
dans cet exemple il y a "e;1gi"e; en commun entre les 2 listes mais
ne sont pas au même endroit dans liste;en suite la macro me fera remonter
l image qui correspond a "e;1gi"e; pour la coller sur une feuille
excel.et il doit aussi me coller toutes les autres images correspondante a la
liste ;le nombre de cases plaine est variable suivant les solutions
bonne soirée
merci pour une foi je suis arrivé à faire marcher la macro.
un détail
exemple il me faut placer sur la carte de France des villes
aujourd'hui il me faut placer
Toulouse
Marseille
Paris
etc jusqu'a 250 villes
je place Toulouse a ça place sur la carte mais après comment je fais pour placer Paris et Marseille
demain j ai une autre liste
Brest
Toulon
Lille
etc
comment cela va se passer
merci pour l info du livre
il doit être très bien car il est introuvable en rupture partout même d'occasion introuvable
bonne soirée
Avatar
MichD
Le 14/05/20 à 12:31, domicol a écrit :
Le mardi 12 Mai 2020 à 18:06 par domicol :
Bonjour,
j ai une colonne avec plusieurs résultat qui n on pas un ordre
définie ex:
1gi
22tr
2c
11p
etc.....................................
ou un autre exemple
22vb
14v
1g1
2vc
etc......................................
dans cet exemple il y a "e;1gi"e; en commun entre les 2 listes mais
ne sont pas au même endroit dans liste;en suite la macro me fera remonter
l image qui correspond a "e;1gi"e; pour la coller sur une feuille
excel.et il doit aussi me coller toutes les autres images correspondante a

la
liste ;le nombre de cases plaine est variable suivant les solutions
bonne soirée

merci pour une foi je suis arrivé à faire marcher la macro.
un détail
exemple il me faut placer sur la carte de France des villes
aujourd'hui il me faut placer
Toulouse
Marseille
Paris
etc jusqu'a 250 villes
je place Toulouse a ça place sur la carte mais après comment je fais pour
placer Paris et Marseille
demain j ai une autre liste
Brest
Toulon
Lille
etc
comment cela va se passer
merci pour l info du livre
il doit être très bien car il est introuvable en rupture partout même d'occasion
introuvable
bonne soirée

Bonjour,
Pour ce que tu cherches à faire, Excel ne va pas te faciliter la tâche.
Pour chaque cellule, ou chaque objet dans la feuille de calcul, tu as 4
propriétés de base. La mesure de base est le "Point".
Left : la distance entre le bord de la fenêtre jusqu'à la cellule ou l'objet
Top : la distance entre le haut de la feuille de calcul et le haut de
la cellule ou l'objet
Width = La largeur de la cellule ou de l'objet
Height = la hauteur de la cellule ou de l'objet
Par exemple, sur la carte de France, il n'y a aucun moyen direct de
demander à VBA de situer un objet tout près de cette ville.
Pour obtenir un endroit précis sur la carte, tu répètes pour toutes les
villes ce que tu as fait.
A ) Tu tentes d'identifier la cellule (sous la carte) la plus proche de
la ville désirée et avec l'enregistreur Macro, tu adaptes la position de
l'objet sur la carte, tu obtiendras des valeurs différentes pour chacune
des villes. Si tu as 250 villes, tu devras refaire manuellement 250 la
même macro pour chacune des villes.
.IncrementLeft -22
.Shapes(C.Value).IncrementTop 5
Après avoir obtenir l'adresse de la cellule la plus près d'une ville et
les valeurs suivantes .IncrementLeft et IncrementTop, il est possible
d'utiliser des "Tableaux "array, et dans ces tableaux d'inclure ces données.
Dans une feuille de calcul (feuille que tu peux masquer au besoin, tu as
4 colonnes :
Colonne A : Le nom de la ville
Colonne B : L'adresse de la cellule
Colonne C : la valeur de IncrementLeft
Colonne D : La valeur de IncrementTop
Comme tu le vois, c'est une tâche très fastidieuse qui t'attend. Lorsque
tu auras toutes ces données, il sera facile de faire la macro que tu
désires.
P.S. Attention, assure-toi que la position de la carte est bien celle
désirée de même que sa grandeur, sinon, tu devras recommencer ces
manipulations.
À mon avis, c'est plus court de faire ce travail manuellement que par macro!
MichD
Avatar
MichD
Concernant le livre mentionné, comme cela date de l'an 2000, il ne doit
plus en rester beaucoup en librairie sur les tablettes.
L'adresse Internet de l'éditeur :
Http://www.editions-eyrolles.com
adresse :
Asman Eyrolles Multimedia
1, rue Thénard
75005 Paris
Télécopie : 01 44 41 11 85
ISBN du livre : 2-7464-0048-0
Ceci étant dit, il y en a d'autres du même auteur beaucoup plus récent,
au moins un pour chaque version d'Excel depuis l'an 2000. (2000, 2003,
2007, 2010, 2013, 2016, je n'ai pas vérifié pour 2019.
Pour chacune de ces années, il a aussi un livre traitant seulement sur
les formules dans Excel.
MichD
1 2