IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

redimensionner une image


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Par défaut redimensionner une image
    Bonour
    voilà mon problème , j'ai un classeur excel qui contient de multiples onglets ( c'est variable entre 10 et 30 à peu près ), je dois changer un logo A( image .jpg ) par un logo B ( aussi une image .jpg ) sur chaque onglet, le souci est que d'un onglet à l'autre le positionnement du logo A n'est pas le même ainsi que la taille du logo, ce qui veut dire que lorsque je remplace le logo A par le logo B, un coup il est bien centré par rapport à l'origine ou bien il est décentré et trop petit ou trop grand, avez vous une solution pour ça ??

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Bienvenue sur le forum.

    Pour remplacer un logo A par un logo B sur toutes les feuilles du classeur, en conservant la taille et position spécifique sur chaque feuille du logo A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
        Dim ws As Worksheet
     
        For Each ws In Worksheets
            Call LoadPict(ws, "LogoA", "C:\Documents and Settings\My Documents\Images\LogoB.jpg")
        Next ws
    End Sub
    Vérifie qu'il y a bien une image sur la feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Function DoesPictExist(ws As Worksheet, PictName As String) As Boolean
        DoesPictExist = False
     
        Dim p As Object
        For Each p In ws.Pictures
            If p.Name = PictName Then
                DoesPictExist = True
                Exit For
            End If
        Next p
    End Function
    Supprime l'image existante, et la remplace par l'image contenu dans le fichier "filename", en conservant la taille et position de l'image précédente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub LoadPict(ws As Worksheet, PictName As String, filename As String)
        Dim l As Integer, t As Integer, w As Integer, h As Integer
     
        If DoesPictExist(ws, PictName) Then
            With ws.Pictures(PictName)
                l = .Left
                t = .Top
                w = .Width
                h = .Height
                .Delete
            End With
     
           With ws.Pictures.Insert(filename)
               .Name = PictName
               .Left = l
               .Top = t
               .Width = w
               .Height = h
           End With
     
        End If
     
    End Sub
    Ce code est basé sur le principe que l'image et nommée.
    Mais en appelant la propriété Pictures(<index de l'image>)

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    En MP vous vous privez du support et avis de tous les membres du forum.
    Le mieux est toujours de poster vos questions techniques sur le forum.
    (Et en général les MP Technique finissent )
    Merci de votre compréhension.

    Citation Envoyé par hottis
    Bonjour

    pour infos voilà ce que j'avais fait, ça fonctionnait plutôt bien , mise à part la taille des images insérer (logo B) ne respectait pas la taille initiale du logo A.

    'suppression du logo A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count
    Sheets(i).Activate
     
        Dim Obj As shape
        Dim Plage As Range, PlageDonnees As Range
     
    'plage de cellules cible
     
    Set PlageDonnees = Range("a1:f4")
     
    For Each Obj In ActiveSheet.Shapes
     
        'Position du Shape dans la feuille
        Set Plage = Range(Obj.TopLeftCell.Address & ":" & _
                Obj.BottomRightCell.Address)
     
        If Not Intersect(Plage, PlageDonnees) Is Nothing Then _
            Obj.Delete
     
     
    Next Obj
    Next i
    'insertion du logo B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count
    Sheets(i).Activate
        Range("a2").Select
     
        ActiveSheet.Pictures.Insert( _
            "C:\Users\logo B.jpg" _
            ).Select
     
        Selection.shaperange.ScaleWidth 0.88, msoFalse, msoScaleFromTopLeft
        Selection.shaperange.ScaleHeight 0.88, msoFalse, msoScaleFromTopLeft
        Selection.shaperange.ScaleWidth 0.72, msoFalse, msoScaleFromTopLeft
        Selection.shaperange.ScaleHeight 0.72, msoFalse, msoScaleFromTopLeft
        Selection.shaperange.ScaleWidth 0.98, msoFalse, msoScaleFromTopLeft
        Selection.shaperange.IncrementLeft 18
        Selection.shaperange.IncrementLeft -17.25
        Selection.shaperange.IncrementTop 1.5
        Selection.shaperange.ScaleWidth 1.49, msoFalse, msoScaleFromTopLeft
     
     
    Next i
    Ok. pour l'insertion logo B, il reste des "Select/Selection" inutile. (résidu de Macro enregistré).

    Pour ce qui est du problème de la taille du logo B ne respectant pas la taille du logo A, la méthode présenté dans le post précédent
    indique comment sauvegarder les informations de taille et position du logo A, avant de le supprimer. (voir la fonction LoadPict)

  4. #4
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Par défaut
    Bonjour

    malheureusement ça ne fonctionne pas avec le code LoadPict

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    malheureusement ça ne fonctionne pas avec le code LoadPict
    Qu'est ce qui ne fonctionne pas ?

    Dans cette fonction ,tout n'est peut être pas récupérable.
    Ce qui est a garder, au minimum, c'est de récupérer l'emplacement du logo A, avant de le supprimer.
    Comme ça tu peut donner les même emplacement au logo B.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     Dim l As Integer, t As Integer, w As Integer, h As Integer
     
           ' enregistre l'emplacement du logo A, puis le supprime 
            With ws.Pictures(<logo A>) ' ou  ws.Pictures(1)  s'il n'y a qu'une image dans l'onglet
                l = .Left
                t = .Top
                w = .Width
                h = .Height
               .Delete
            End With
     
           ' insert logo B à l'emplacement du logo A
           With ws.Pictures.Insert(<nom du logo B>)
               .Left = l
               .Top = t
               .Width = w
               .Height = h
           End With

  6. #6
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 25
    Par défaut
    Bonjour

    c'est plus compliqué que cela , en effet j'ai bien visuellement une image identique sur chaque onglet, mais la taille change et le nom de l'image n'est pas le même, sur l'onglet 1 je vais avoir une image "picture 50 " , sur l'onglet 2 "picture 12" et ainsi de suite.

    Je ne peut donc pas considérer que le nom des images est toujours le même.

    En plus je peut avoir plusieurs image sur un onglet , il s'agit de dossier de fabrication , il y a de multiples images sur un onglet

    voiçi un exemple d'onglet tel qu'ils peuvent etre dans le fichier

    c'est le logo "TES" en haut à gauche qui est à remplacer par un autre
    Images attachées Images attachées   

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Redimensionner une image dans un PictureBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 05/04/2007, 18h24
  2. [32 bits] Redimensionner une image JPEG/GIF/PNG...
    Par CR_Gio dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 04/10/2005, 00h57
  3. Redimensionner une image...
    Par RhaZieL dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 22/07/2005, 09h30
  4. [VB.NET] Redimensionner une image proportionnelement
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/10/2004, 12h10
  5. [MX2004] redimensionner une image lors du chargement
    Par ouinouin dans le forum Flash
    Réponses: 8
    Dernier message: 18/02/2004, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo