Décaler l'application d'une macro de gauche à droite puis de haut en bas
- Messages
- 19
- Excel
- 365 FR
- Inscrit
- 25/10/2022
- Emploi
- Consultant ingénieur industrialisation
Bonjour à tous.
Je souhaiterais pouvoir appliquer une macro de 1 à 3 fois vers la droite puis recommencer l'opération vers le bas jusqu’à ce que un nombre soit atteint.
'======================================================================================
' IMPORTATION DE L'IMAGE D'UNE PIECE
'======================================================================================
Sub Import_Thumbnail()
'01/RECUPERER LE NOM COMPLET DE L'IMAGE A INSERER (avec son adresse et son extention) :
'a°)Le nom du dossier contenant les fichiers JPG :
If Part_Ref = "" Then
Project_Code = Left(Product_Ref, 6)
'= Isoler les 6 caractères gauche de la référence 17AB73-45600
'Résultat: 17AB73
'b°)Le chemin complet du fichier JPG :
Part_Pict_Path = Database_Path & Welding_Folder & Project_Code & "\"
'= Chemin de la base de données & Dossier du type de process & RESULTAT PRECEDENT & \
'Résultat: C:\Industrialisation\Miniatures\02Fabrication\17AB73\
'c°)Le nom complet du fichier image (comme dans Explorer) :
Part_Pict_Full_Name = Dir(Part_Pict_Path & Product_Ref & "*.jpg")
'= Rechercher 17AB73-45600 *.jpg dans le dossier \17AB73\
'= Isoler la chaine de caractères derrière le dernier "\"
'= C:\Industrialisation\Miniatures\02Fabrication\17AB73\17AB73-45600*.jpg
'Résultat: 17AB73-45600_B sup. distributeur.jpg
If Part_Pict_Full_Name = "" Then
'd°)Boite d'information en cas de fichier image absent ou mal écrit
MsgBox ("Vérifier la présence ou l'orthographe du fichier " & Part_Ref & ".JPG dans : " & Part_Pict_Path)
End If
'd°)Le nom de la miniature dans Excel :
Part_Pict_Name = Left(Part_Pict_Full_Name, 15)
'= Isoler dans ce résultat les 15 caractères gauche
'==>17AB73-45600_B sup. distributeur.jpg
'Résultat: 17AB73-45600_B
'e°)L'adresse complète du fichier image
Part_File_name = Part_Pict_Path & Part_Pict_Full_Name
'= Chemin de la base de données & nom complet du fichier image
'Résultat : C:\Industrialisation\Miniatures\02Fabrication\17AB73\17AB73-45600_B sup. distributeur.jpg
'f°)Gerer l'erreur en cas d'image déjà présente
On Error Resume Next 'Si présente, passer à la suite
'02_DEFINIR LES PARAMETRES DE L'IMAGE A INSERER
'a°)Lier la cellule dans laquelle va être insérée l'image et le "cadre"
Set Part_Thumbnail = Part_Pict_Cell.Parent.Shapes(Product_Ref)
'b°)Les dimensions du cadre
Part_Thumbnail_H = 57 'Hauteur
Part_Thumbnail_L = 99 'Largeur
Else
Project_Code = Left(Part_Ref, 6)
Part_Pict_Path = Database_Path & Production_Folder & Project_Code & "\"
Part_Pict_Full_Name = Dir(Part_Pict_Path & Part_Ref & "*.jpg")
If Part_Pict_Full_Name = "" Then
MsgBox ("Vérifier la présence ou l'orthographe du fichier " & Part_Ref & ".JPG dans : " & Part_Pict_Path)
End If
Part_Pict_Name = Left(Part_Pict_Full_Name, 15)
Part_File_name = Part_Pict_Path & Part_Pict_Full_Name
On Error Resume Next 'Si présente, passer à la suite
Set Part_Thumbnail = Part_Pict_Cell.Parent.Shapes(Part_Ref)
Part_Thumbnail_H = 42 'Hauteur
Part_Thumbnail_L = 73 'Largeur
End If
'c°)La position du cadre (centré dans la cellule réservée)
If Err Then
Err.Clear
Part_Offset_H = Part_Pict_Cell.Left + 10 'Décaler par rapport au bord gauche de la cellule
Part_Offset_V = Part_Pict_Cell.Top + 3 'Décaler par rapport au bord haut de la cellule
Else 'sinon
Part_Offset_H = Part_Thumbnail.Left 'A partir du bord gauche
Part_Offset_V = Part_Thumbnail.Top 'A partir du bord haut
'Appliquer le dimensionnement
Part_Thumbnail_H = Int(Part_Thumbnail.Height) 'Hauteur
Part_Thumbnail_L = Int(Part_Thumbnail.Width) 'Largeur
'Effacer l 'image
'Part_Thumbnail.Delete
End If
'03 EFFACER LES IMAGES EXISTANTES SUR LA FEUILLE ACTIVE
'a°)Selectionner TOUTES les images
ActiveSheet.Pictures.SelectAll
'b°)Effacer la selection
Selection.Delete
'04 INTEGRER L'IMAGE DANS LE CADRE AVEC TOUS SES PARAMETRES
'a°)Les dimensions et la position
If Part_Pict_Full_Name <> "" Then 'Si présente, passer directement au positionnement et redimensionnement de l'image
Set Part_Thumbnail = Part_Pict_Cell.Parent.Shapes.AddPicture( _
Part_File_name, _
True, True, _
Part_Offset_H, _
Part_Offset_V, _
Part_Thumbnail_L, _
Part_Thumbnail_H)
Else 'sinon
Resume Next 'passer à l'instruction suivante
End If
'b°)Le nom (dans Excel)
Part_Thumbnail.Name = Part_Pict_Name
'c°)Les propriétés "Déplacer et dimensionner avec les cellules"
Part_Thumbnail.Placement = xlMoveAndSize
'd)°Gestion des erreurs
On Error GoTo 0
End Sub
Dans un base de données, il existe par exemple 5 pièces commençant par 17AB73.
Ma macro fonctionne dans la zone A4 à K5. Je souhaiterais quelle remplisse les données dans la zone L4 à V5, puis W4 à AG5 (3x vers la droite)
et elle recommence en dessous sur les lignes A7 à K8 et enfin de L7 à V8 et ainsi de suite pour plus de pièces comportant les mêmes 6 premiers caractères.
Quelqu'un pourrait il m'aider ?
Je le faisait avec une fonction VBA écrite dans la feuille mais cela ne convient pas aux personnes qui doivent mettre à jour le document.
Il ne veulent pas de formule dans la feuille. ni de lien externe.