Eviter d'utiliser select

Bonjour,

J'ai ce code qui me permet de copier 1 image (plusieurs images groupées) dans la cellule D9

J'essaie d'utiliser dim et set ... pour éviter les select et rendre le code plus propre

J'ai cette ligne qui me dérange ou il y a 3 select:

Sh.Select: Selection.Cut: rngImageFin.Select: ws.Pictures.Paste.Select

J'ai essayé avec cette ligne mais ca ne marche

Sh.Copy rngImageFin

Pourriez vous m'aider svp? est-ce possible et utile d'éviter les select ?

Voici une partie plus large du code

    Dim ws As Worksheet: Set ws = Sheets("Feuil1"): Dim rngImageFin As Range: Set rngImageFin = Range("d9")

        Set Sh = ws.Shapes.Range(Tableau).Group 'Regroupe les formes dont le nom se trouve dans le tableau 
        Sh.Select: Selection.Cut: rngImageFin.Select: ws.Pictures.Paste.Select

        With Selection.ShapeRange
            .Top = rngImageFin.Top + 20
            .Left = rngImageFin.Left + Taille
            .Line.Visible = msoTrue
            .Line.ForeColor.ObjectThemeColor = msoThemeColorAccent2
            .Line.ForeColor.TintAndShade = 0
            .Line.ForeColor.Brightness = 0
            .Line.Transparency = 0
            .Line.Weight = 1.5
        End With

J'ai d'autres select dans mon code mais je pense que ces derniers ne peuvent pas être supprimés

Voici la totalité de mon code et ci-joint mon fichier

Private Sub InsereImage(Description As String, Taille As Integer)
    Dim Fichier As String: Dim test1 As String: Dim i As Integer: Dim phrase As Range
    Application.ScreenUpdating = True
    Set phrase = Range("d2")
    test1 = MajSansAccent$(Description): test1 = TexteEpure(test1): phrase = test1 'nettoie la chaine des accents et ponctuation
    Mots = Split(phrase.Text, " ") 'On obtient donc n mots avec  : Mots(1) = "LUCIE" , Mots(2) = "KAREN"... Donc on peux boucler  :
    Dim rngImageCell As Range: Set rngImageCell = Range("g7")
    Dim rngImageInter As Range: Set rngImageInter = Range("g1")
    Dim ws As Worksheet: Set ws = Sheets("Feuil1")
    For Index = 1 To Len(phrase)
        char = UCase(phrase.Characters(Index, 1).Text)
        If char = "H" Then
            If IsNumeric(phrase.Characters(Index - 1, 1).Text) And IsNumeric(phrase.Characters(Index - 2, 1).Text) And IsNumeric(phrase.Characters(Index + 1, 1).Text) And IsNumeric(phrase.Characters(Index + 2, 1).Text) Then
                HH = phrase.Characters(Index - 2, 1).Text & phrase.Characters(Index - 1, 1).Text & char & phrase.Characters(Index + 1, 1).Text & phrase.Characters(Index + 2, 1).Text
            ElseIf IsNumeric(phrase.Characters(Index - 1, 1).Text) And IsNumeric(phrase.Characters(Index + 1, 1).Text) And IsNumeric(phrase.Characters(Index + 2, 1).Text) Then
                HH = phrase.Characters(Index - 1, 1).Text & char & phrase.Characters(Index + 1, 1).Text & phrase.Characters(Index + 2, 1).Text
            ElseIf IsNumeric(phrase.Characters(Index - 1, 1).Text) And IsNumeric(phrase.Characters(Index - 2, 1).Text) Then
                HH = phrase.Characters(Index - 2, 1).Text & phrase.Characters(Index - 1, 1).Text & char
            ElseIf IsNumeric(phrase.Characters(Index - 1, 1).Text) Then
                HH = phrase.Characters(Index - 1, 1).Text & char
            End If
            rngImageCell = HH
        End If
    Next Index

    If HH <> "" Then 'Caractèristiques
      Dim objChrt As Chart: Dim rngImage As Range: Dim strFile As String
      On Error GoTo ErrExit 'Gestion erreur
      With ws 'Nom de la feuille (à modifier, ici pour exemple) ou se trouve la zone de texte
        Set rngImage = rngImageCell 'Choisir la cellule ou est positionnée la zone de texte selon fin de 1ière macro
        rngImage.CopyPicture Appearance:=xlScreen, Format:=xlBitmap 'puis copie de la cellule contenant la zone de texte
        strFile = "C:\Users\Sylvain Lucie\Pictures\CopieNote.jpg" 'Sous le dossier Images du disque C, Ici le dossier Images. Sinon changer par le chemin (Disque, dossier et sous-dossier) souhaité
        Set objChrt = .ChartObjects.Add(rngImage.Left, rngImage.Top, rngImage.Width, rngImage.Height).Chart 'Selon taille de la zone de texte
        With objChrt    'Réalise l'export avec l'objet Chart
            .Parent.Activate: .ChartArea.Format.Line.Visible = msoFalse 'Ligne du cadre non visible
            .Paste: .Export strFile: .Parent.Delete
        End With
      End With
ErrExit:     'Libère les objets
      Set objChrt = Nothing: Set rngImage = Nothing
    End If

    rngImageInter.Select
    For i = 0 To UBound(Mots)
            If i <= UBound(Mots) Then ' boucle sur les mots
                Fichier = Dir("C:\Users\Sylvain Lucie\Documents\images\" & Mots(i) & ".jpg") 'cherche image dans reprtoire
                If Fichier <> "" Then 'si le fichier jpg existe
                    'rngImageInter.Select 'insertion de l'image dans la cellule "G"&b
                    Set MonImage = ws.Pictures.Insert("C:\Users\Sylvain Lucie\Documents\images\" & Mots(i) & ".jpg")
                    limage = MonImage.Width: MonImage.Left = rngImageInter.Left + l: l = l + limage: haut = MonImage.Height 'insertion image cote à cote selon la largeur de l'image précédente
                'Else
                '    If Len(Mots(i)) > 1 Then MsgBox "Le fichier jpg de " & Mots(i) & " n'a pas été trouvé"
                End If
            End If
    Next i

    If HH <> "" Then
        'rngImageInter.Select
        Set MonImage = ws.Pictures.Insert("C:\Users\Sylvain Lucie\Pictures\CopieNote.jpg")
        MonImage.Top = rngImageInter.Top + haut
    End If

    l = l + 10: B = 1
    For J = 0 To UBound(Mots)
            If J <= UBound(Mots) Then ' boucle sur les mots
                Fichier = Dir("C:\Users\Sylvain Lucie\Documents\images2\" & Mots(J) & ".jpg") 'cherche image dans reprtoire
                If Fichier <> "" Then 'si le fichier jpg existe
                    If B = 1 Then
                        'rngImageInter.Select 'insertion de l'image dans la cellule "G"&b
                        Set MonImage2 = ws.Pictures.Insert("C:\Users\Sylvain Lucie\Documents\images2\fl1.jpg")
                        limage2 = MonImage2.Width: MonImage2.Left = rngImageInter.Left + l: l = l + limage2 'insertion image cote à cote selon la largeur de l'image précédente
                        B = B + 1
                    End If
                    'rngImageInter.Select 'insertion de l'image dans la cellule "G"&b
                    Set MonImage = ws.Pictures.Insert("C:\Users\Sylvain Lucie\Documents\images2\" & Mots(J) & ".jpg")
                    limage = MonImage.Width: MonImage.Left = rngImageInter.Left + l: l = l + limage 'insertion image cote à cote selon la largeur de l'image précédente
                'Else
                '    If Len(Mots(i)) > 1 Then MsgBox "Le fichier jpg de " & Mots(i) & " n'a pas été trouvé"
                End If
            End If
    Next J

    Dim xPicRg As Range: Dim k As Integer: Dim Tableau() As String: Dim xPic As Shape: Dim xRg As Range
    Set xRg = Range("e1:x2") 'selection de la plage de cellules
        For Each xPic In ws.Shapes 'recherche les images de la plage
            Set xPicRg = Range(xPic.TopLeftCell.Address & ":" & xPic.BottomRightCell.Address)
            If Not Intersect(xRg, xPicRg) Is Nothing Then
                k = k + 1: ReDim Preserve Tableau(1 To k) 'Redéfinit la taille du tableau et intègre le nom de la forme.
                Tableau(k) = xPic.Name 'insére image dans le tableau
            End If
        Next
    Dim rngImageFin As Range: Set rngImageFin = Range("d9")
    If k = 0 Then Exit Sub
    If k > 1 Then
        Set Sh = ws.Shapes.Range(Tableau).Group 'Regroupe les formes dont le nom se trouve dans le tableau 'Sh.Name = "NomGroupe" 'Renomme le groupe. 'ActiveSheet.Shapes.Range(Array("NomGroupe")).Select
        Sh.Select: Selection.Cut: rngImageFin.Select: ws.Pictures.Paste.Select
        'Sh.Copy rngImageFin
        With Selection.ShapeRange
            .Top = rngImageFin.Top + 20
            .Left = rngImageFin.Left + Taille
            .Line.Visible = msoTrue
            .Line.ForeColor.ObjectThemeColor = msoThemeColorAccent2
            .Line.ForeColor.TintAndShade = 0
            .Line.ForeColor.Brightness = 0
            .Line.Transparency = 0
            .Line.Weight = 1.5
        End With
    Else
        Set Sh = ws.Shapes.Range(Tableau) 'Regroupe les formes dont le nom se trouve dans le tableau 'Sh.Name = "NomGroupe" 'Renomme le groupe. 'ActiveSheet.Shapes.Range(Array("NomGroupe")).Select
        Sh.Select: Selection.Cut: rngImageFin.Select: ws.Pictures.Paste.Select
        With Selection.ShapeRange
            .Top = rngImageFin.Top + 20
            .Left = rngImageFin.Left + Taille
            .Line.Visible = msoTrue
            .Line.ForeColor.ObjectThemeColor = msoThemeColorAccent2
            .Line.ForeColor.TintAndShade = 0
            .Line.ForeColor.Brightness = 0
            .Line.Transparency = 0
            .Line.Weight = 1.5
        End With
    End If
End Sub

Sub Ellipse1_Cliquer()
    Dim T1 As Integer: T1 = 65
    InsereImage Range("d1").Value, T1
End Sub

Function MajSansAccent$(ByVal Chaine$)
'Ti
Const VAccent = "àáâãäåéêëèìíîïðòóôõöùúûü", VSsAccent = "aaaaaaeeeeiiiioooooouuuu"
Dim Bcle&
For Bcle = 1 To Len(VAccent)
Chaine = Replace(Chaine, Mid(VAccent, Bcle, 1), Mid(VSsAccent, Bcle, 1))
Next Bcle
MajSansAccent = UCase(Chaine)
End Function

Function TexteEpure(Texte As String) As String
' supprime tous les caractères AUTRES
' que "a à z","A à Z" ou chiffre.
' voir aide sur ASC et table de caractères ASCII.
Dim tempmot As String, TempCar As String
For i = 1 To Len(Texte)
TempCar = Mid(Texte, i, 1)
Select Case Asc(TempCar)
Case 47 To 57 'chiffre
Case 65 To 90 'caractères A à Z
Case 97 To 122 'caractères a à z
Case Else
TempCar = " "
End Select
tempmot = tempmot + TempCar
Next i
TexteEpure = tempmot
End Function
9rechfichier4.xlsm (34.53 Ko)
emilie karen lucie severine sylvain fl1

Je vous remercie

Cordialement

Rechercher des sujets similaires à "eviter utiliser select"