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 !
Sub CommandButton5_Cliquer()
'place les photos dans la colonne A (le prénom est en colonne B et le nom en colonne C
‘les photos dans TROMBINOSCOPE sont nommées Prénom + espace + Nom.JPG
[A3:A161].ClearContents: [A2] = 0
'placement des formules
Application.ScreenUpdating = True
[A3].FormulaLocal = "=NBVAL(B3)+A2*NBVAL(B3)"
'en ce qui concerne mon fichier actuel :
'en [A3] prend la valeur 1,
'en [A4] prend la valeur 2, etc ...
'jusqu'à la ligne 99 où [A99] prend la valeur 99
Range("A3").Copy Range("A4:A161")
'efface les photos éventuellement en place
Dim s As Shape
'Application.ScreenUpdating = False
For Each s In ActiveSheet.Shapes
If Not Intersect(s.TopLeftCell, [A3:A161]) Is Nothing Then
s.Delete
End If
Next
'place les photos du TROMBINOSCOPE
Dim Row As Integer, col As Integer
Dim File As Variant, Fso As Object
Set Fso = CreateObject("Scripting.FileSystemObject")
Application.ScreenUpdating = False
[A1] = 0
Row = 3
col = Columns("A").Column
[A3].FormulaLocal = "=NBVAL(B3)+A2*NBVAL(B3)"
PhotoDir = [AM1] & "TROMBINOSCOPE\"
For Row = 3 To 161
For Each File In Fso.GetFolder([PhotoDir]).Files
If File.Name Like "*.jpg" Then
[A1] = [A1] + 1
If Cells(Row, col + 1) & " " & Cells(Row, col + 2) = Fso.getBasename(File) Then
'la ligne suivante bloque la macro :
PlaceThePictureInCenterRange Cells(Row, col), Shapes.AddPicture(File, False, True, 20, 20, -1, -1), 90
' la photo .JPG n'apparaît pas dns la cellule...
'Je ne trouve pas l'erreur.
End If
End If
Next
Next
Set Fso = Nothing ' Libération mémoire
Application.ScreenUpdating = True
End Sub
Ces instructions :dans la zone A1, j'ai quelques boutons d'appel de macro... qui s'effacent à l'issue du fonctionnement de ces lignes vba.
For Each s In .Shapes
If Not Intersect(s.TopLeftCell, .Columns(1)) Is Nothing Then s.Delete 'RAZ
Next s
Sub PlacerPhotos()
Dim chemin$, W#, s As Shape, lig&, fichier$
chemin = ThisWorkbook.Path & "\TROMBINOSCOPE\"
Application.ScreenUpdating = False
With ActiveSheet
.Columns(1).ColumnWidth = 16 'largeur de colonne A à adapter
W =...
Heu, c'est ce que fait ma macro non ?Mon souhait de départ : sur chaque ligne la macro compare donc la concaténation 'Prénom colonne B + " " + Nom colonne C' avec le nom des .jpg dans TROMBINOSCOPE pour placer en colonne A la photo correspondante, les colonnes B et C n'étant pas modifiées pendant le fonctionnement de la macro
Bon d'accord alors finalement c'est plus simple, vous pouvez utiliser cette macro :Je ne dois pas modier le contenu des colonnes B et C entre les lignes 3 et 161 parce que mon fichier réel contient dans cette feuille en colonnes B et C les prénoms et les noms déjà rapatriés d'une autre feuille Paramètres qui elle répertorie la liste de tous mes bénévoles inscrits.
C'est pour cela que je désire conserver les valeurs de la colonne B et C en cet état, avant d'aller placer en cellule A la photo correspondante.
Sub PlacerPhotos()
Dim chemin$, W#, s As Shape, lig&, fichier$
chemin = ThisWorkbook.Path & "\TROMBINOSCOPE\"
Application.ScreenUpdating = False
With ActiveSheet
.Columns(1).ColumnWidth = 12 'largeur de colonne A à adapter
W = .Columns(1).Width 'largeur en points
For Each s In .Shapes
If Not Intersect(s.TopLeftCell, .Columns(1)) Is Nothing Then s.Delete 'RAZ
Next s
For lig = 3 To .Cells(.Rows.Count, 3).End(xlUp).Row
fichier = .Cells(lig, 2) & " " & .Cells(lig, 3) & ".jpg"
If Dir(chemin & fichier) <> "" Then 'si le fichier existe dans le dossier
Set s = .Shapes.AddPicture(chemin & fichier, msoFalse, msoTrue, 0, .Rows(lig).Top, 0, 0)
s.LockAspectRatio = True
s.Width = W 'la photo prend la largeur de la cellule
.Rows(lig).RowHeight = W * s.Height / s.Width + 0.7 'la cellule prend la hauteur de la photo + marge
End If
Next lig
End With
End Sub
Regardez bien, toutes les macros que j'ai données ajustent la hauteur des lignes à la hauteur des photos.peut-on garder l'isomorphisme en proposant aux lignes en colonne A de varier de hauteur en fonction de la hauteur de la photo JPG insérée.
Ces instructions :dans la zone A1, j'ai quelques boutons d'appel de macro... qui s'effacent à l'issue du fonctionnement de ces lignes vba.
For Each s In .Shapes
If Not Intersect(s.TopLeftCell, .Columns(1)) Is Nothing Then s.Delete 'RAZ
Next s
Sub PlacerPhotos()
Dim chemin$, W#, s As Shape, lig&, fichier$
chemin = ThisWorkbook.Path & "\TROMBINOSCOPE\"
Application.ScreenUpdating = False
With ActiveSheet
.Columns(1).ColumnWidth = 16 'largeur de colonne A à adapter
W = .Columns(1).Width 'largeur en points
For Each s In .Shapes
If s.Type = msoPicture Then If Not Intersect(s.TopLeftCell, .Columns(1)) Is Nothing Then s.Delete 'RAZ
Next s
For lig = 3 To .Cells(.Rows.Count, 3).End(xlUp).Row
fichier = .Cells(lig, 2) & " " & .Cells(lig, 3) & ".jpg"
If Dir(chemin & fichier) <> "" Then 'si le fichier existe dans le dossier
Set s = .Shapes.AddPicture(chemin & fichier, msoFalse, msoTrue, 0, .Rows(lig).Top, 0, 0)
s.LockAspectRatio = True
s.Width = W 'la photo prend la largeur de la cellule
.Rows(lig).RowHeight = W * s.Height / s.Width + 0.7 'la cellule prend la hauteur de la photo + marge
End If
Next lig
End With
End Sub
Set s = .Shapes.AddPicture(chemin & fichier, msoFalse, msoTrue, 0, .Rows(lig).Top, 0, 0)
Set s = .Shapes.AddPicture(chemin & fichier, msoFalse, msoTrue, 0, .Rows(lig).Top, -1, -1)
Sinon, c'est écrit dans l'aide en ligne de Microsoft sur la fonction Shapes.AddPicture.Merci pour cette dernière précision qui me sera bien utile ; je la note dans mon petit lexique de codes vba.
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?