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 :

problème arrière plan excel vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut problème arrière plan excel vba
    Bonjour à tous!!! (Bonjour à Fred parce que c'est toujours lui qui me répond et qui résoud mes problèmes!)
    Voici mon problème:
    J'ai une image en arrière plan sur une feuille Excel qui fait la taille de mon écran (elle se répète sur toute la feuille excel). Cependant le problème est que lorsque j'ouvre cette feuille avec un autre PC que le mien (de taille d'écran différente), l'image ne s'adapte pas à la taille de l'écran et c'est pas très beau!
    Comment faire pour adapter mon image à une taille d'écran quelconque?
    Une âme charitable (comme Fred) pourrait me venir en aide s'il vous plaît?

  2. #2
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Bonjour xav30

    pour le tag Resolu, je parlais de ce post

    Comment insères tu ton image d'arrière plan, par macro ou manuellement?

    @+

  3. #3
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour xav30

    Je n'ai trouvé qu'une solution qui consiste à transporter ton image de fond dans le dossier où est ton classeur.
    À l'ouverture du classeur, il s'affiche l'image de fond redimensionnées par rapport à la résolution d'écran.

    cordialement

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Option Explicit
    'pour l'obtention de la resolution d'écran en pixels
    Private Declare Function GetDC Lib "user32.dll" ( _
      ByVal hwnd&) As Long
    Private Declare Function ReleaseDC Lib "user32.dll" ( _
      ByVal hwnd&, ByVal hDC&) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32" ( _
      ByVal hDC&, ByVal nIndex&) As Long
     
    ''------------------------------------------------------
    ''Dans le module de code ThisWorkbook
    ''------------------------------------------------------
    'Option Explicit
    '
    'Private Sub Workbook_Open()
    'AjusterImage
    'End Sub
    ''------------------------------------------------------
    ''Fin module de code ThisWorkbook
    ''------------------------------------------------------
    Sub AjusterImage()
    'D'après un excellent tutoriel de SilkyRoad
    'http://silkyroad.developpez.com/VBA/WindowsImageAcquisition/
     
       Dim Img As Object 'WIA.ImageFile
       Dim IP As Object 'WIA.ImageProcess
       Dim Ext As String
       Dim monImage As String
       Dim ImageFond As String
       Dim CvtPtPixel As Single
     
      'Ton image de fond doit être dans le même dossier que ton classeur
      monImage = ThisWorkbook.Path & Application.PathSeparator & "monImage.jpg" ' A adapter
     
       'conversion des points en pixel
       CvtPtPixel = 0.75
       Ext = InStr(1, StrReverse(monImage), ".", vbTextCompare)
       ImageFond = Left(monImage, Len(monImage) - Ext) & "-Fond" & Right(monImage, Ext)
     
       ' suppression de l'image si elle existe
       On Error Resume Next
          Kill ImageFond
       On Error GoTo 0
     
       'Création conteneur pour l'image à manipuler
       Set Img = CreateObject("WIA.ImageFile")
       'Création du gestionnaire de filtre
       Set IP = CreateObject("WIA.ImageProcess")
       'Chargement de l'image dans le conteneur
       Img.LoadFile monImage
       'Ajoute le filtre pour redimensionner l'image (Scale)
       IP.Filters.Add IP.FilterInfos("Scale").FilterID
       'Définit la largeur maxi pour le redimensionnement
       IP.Filters(1).Properties("MaximumWidth") = ResolEcran(0) * CvtPtPixel
       'Définit la hauteur maxi pour le redimensionnement
       IP.Filters(1).Properties("MaximumHeight") = ResolEcran(1) * CvtPtPixel
    'remarque :
    'Les proportions sont conservées. Le filtre prend en compte
    'les ratios et adapte la taille pour ne pas dépasser les valeurs maxi définies.
    'Application du filtre à l'image
       Set Img = IP.Apply(Img)
       'Enregistre l'image redimensionnée
       Img.SaveFile ImageFond
    'mise en place de l'arrière plan
    ActiveSheet.SetBackgroundPicture Filename:=""
    ActiveSheet.SetBackgroundPicture Filename:=ImageFond
    Set IP = Nothing
    Set Img = Nothing
    End Sub
     
    Function ResolEcran(item As Byte) As Variant
    Dim lDC&
     Static maResolution
    If Not IsArray(maResolution) Then
      ReDim maResolution(1) As Long
      lDC = GetDC(0)                               '    -->  renvoie du contexte d'affichage de l'écran
      maResolution(0) = GetDeviceCaps(lDC, 8&)      '  -->   largeur de l'écran en pixels
      maResolution(1) = GetDeviceCaps(lDC, 10&)     '  -->   hauteur de l'écran en pixels
      lDC = ReleaseDC(0, lDC)
    End If
    ResolEcran = maResolution(item)
    End Function

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut pb redimentionnement
    Salut fred!!
    Merci encore de m'avoir répondu, c'est sympa!
    Bon, j'ai essayé ton code mais j'ai un problème, il y a un message d'erreur qui apparaît: "un composant active x ne peut créer d'objet", voici l'endroit où ça buggue:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Explicit
    'pour l'obtention de la resolution d'écran en pixels
    Private Declare Function GetDC Lib "user32.dll" ( _
      ByVal hwnd&) As Long
    Private Declare Function ReleaseDC Lib "user32.dll" ( _
      ByVal hwnd&, ByVal hDC&) As Long
    Private Declare Function GetDeviceCaps Lib "gdi32" ( _
      ByVal hDC&, ByVal nIndex&) As Long
     
    Sub AjusterImage()
    'D'après un excellent tutoriel de SilkyRoad
    'http://silkyroad.developpez.com/VBA/WindowsImageAcquisition/
     
       Dim Img As Object 'WIA.ImageFile
       Dim IP As Object 'WIA.ImageProcess
       Dim Ext As String
       Dim monImage As String
       Dim ImageFond As String
       Dim CvtPtPixel As Single
     
      'Ton image de fond doit être dans le même dossier que ton classeur
      monImage = ThisWorkbook.path & Application.PathSeparator & "monImage.jpg" ' A adapter
     
       'conversion des points en pixel
       CvtPtPixel = 0.75
       Ext = InStr(1, StrReverse(monImage), ".", vbTextCompare)
       ImageFond = Left(monImage, Len(monImage) - Ext) & "-Fond" & Right(monImage, Ext)
     
       ' suppression de l'image si elle existe
       On Error Resume Next
          Kill ImageFond
       On Error GoTo 0
     
       'Création conteneur pour l'image à manipuler
       Set Img = CreateObject("WIA.ImageFile")   CA BUGGUE SUR CETTE LIGNE
       'Création du gestionnaire de filtre
       Set IP = CreateObject("WIA.ImageProcess")
       'Chargement de l'image dans le conteneur
       Img.LoadFile monImage
       'Ajoute le filtre pour redimensionner l'image (Scale)
       IP.Filters.Add IP.FilterInfos("Scale").FilterID
       'Définit la largeur maxi pour le redimensionnement
       IP.Filters(1).Properties("MaximumWidth") = ResolEcran(0) * CvtPtPixel
       'Définit la hauteur maxi pour le redimensionnement
       IP.Filters(1).Properties("MaximumHeight") = ResolEcran(1) * CvtPtPixel
    'remarque :
    'Les proportions sont conservées. Le filtre prend en compte
    'les ratios et adapte la taille pour ne pas dépasser les valeurs maxi définies.
    'Application du filtre à l'image
       Set Img = IP.Apply(Img)
       'Enregistre l'image redimensionnée
       Img.SaveFile ImageFond
    'mise en place de l'arrière plan
    ActiveSheet.SetBackgroundPicture Filename:=""
    ActiveSheet.SetBackgroundPicture Filename:=ImageFond
    Set IP = Nothing
    Set Img = Nothing
    End Sub
     
    Function ResolEcran(item As Byte) As Variant
    Dim lDC&
     Static maResolution
    If Not IsArray(maResolution) Then
      ReDim maResolution(1) As Long
      lDC = GetDC(0)                               '    -->  renvoie du contexte d'affichage de l'écran
      maResolution(0) = GetDeviceCaps(lDC, 8&)      '  -->   largeur de l'écran en pixels
      maResolution(1) = GetDeviceCaps(lDC, 10&)     '  -->   hauteur de l'écran en pixels
      lDC = ReleaseDC(0, lDC)
    End If
    ResolEcran = maResolution(item)
    End Function
    J'ai essayé d'activer dans les références : Microsoft ActiveX Data Objects 2.7 Library mais sans succès...
    Voilà merci de me venir encore en aide!
    Xav30.

  5. #5
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir,
    Je n'ai que quatre références de cochées et ça fonctionne

    EDIT essaie de cocher la référence WIA... mais à priori pas besoin ici
    Tiens nous au courant

    cordialement

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu es sur quel version d'Excel ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut pb dimentionnement image
    Salut à tous et merci de m'aider!!!
    Ma version d'excel est la version 2002.
    Fred j'ai essayé de faire ce que tu ma dit mais ça marche pas, je sais pas pourquoi.
    Si vous avez d'autres idées je suis à l'écoute.
    Merci encore!
    Xav30.

  8. #8
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonjour,

    a priori WIA n'est pris en charge qu' à partir d'Xp. Es tu sur XP ou supérieur?

    Cordialement

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut yeah!!!
    Salut Fred et ouskel'n'dor!!!
    Je tiens à vous remercier d'avoir réfléchi sur mon problème!
    J'ai trouvé la solution comme un grand (pour une fois...)!
    En fait il fallait cocher dans les références:
    DirectX8 for Visual Basic Type Library
    et ça marche!!!
    C'est beau la science des fois quand même!!
    Merci encore à vous deux et spécialement à Fred qui ne me laisse jamais en rade!
    Merci encore!
    Xav 30.
    Ps:Je clique sur RESOLU!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut ERRATUM
    En fait je me suis planté ça marche toujours pas, en fait je n'ai pas relancé Excel alors que l'appel du programme se trouve dans le Workbook open!
    Quel idiot je suis!!!
    En fait me revoilà dans la panade, quelqu'un pourrait-t-il m'aider?
    Je vais relancer une discution à ce sujet parceque comme j'ai cliqué sur résolu, je suis pas sûr qu'on me réponde...
    Merci à qui voudra bien m'aider!
    xav30.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut problème de redimentionnement
    Désolé je savais pas qu'on pouvait décocher résolu!!!
    Merci de votre aide!!
    Xav'30

  12. #12
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    bonsoir xav30,

    je ne comprenais pas trop le lien avec DirectX8...

    Tu es sur XP ou Vista?

    Est ce que tu as la dll "C:\Windows\System32\wiaaut.dll" sur ton poste?

    EDIT Si tu ne la trouves pas et que tu es sur XP SP1 ou supérieur tu la trouveras ici.
    - Télécharge le dossier WIAAutSDK.zip.
    - Extraits les fichiers
    - Copie les fichiers wiaaut.chm et wiaaut.chi dans C:\Windows\Help\
    - Copie wiaaut.dll dans C:\Windows\System32\
    - Dans la fenêtre Exécuter (touche Windows + R), saisies RegSvr32 WIAAut.dll
    - Clique sur OK --> Message de réussite
    - Lance ta macro et tiens nous au courant.

    Par contre si les autres postes n'ont pas cette dll, je te souhaite bien du courage

    EDIT2
    je n'ai pas relancé Excel alors que l'appel du programme se trouve dans le Workbook open!
    Tu peux lancer directement la macro AjusterImage sur VBE pour tester ou mettre un bouton sur ta feuille et lui affecter cette même macro.

    cordialement

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut merci
    Merci beaucoup fred!!! T'es vraiment trop balèze, ça marche!!!
    Merci beaucoup!
    Xav30

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

Discussions similaires

  1. Graphe sous PPT en arrière plan en VBA
    Par kluh dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 26/05/2010, 15h50
  2. Problème - Erreur 438 - Excel vba 2003
    Par Nanoucha dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/03/2010, 20h27
  3. Problème avec Find(), Excel Vba
    Par mmmxtina dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 28/05/2009, 11h57
  4. Problème arrière plan
    Par hugo7 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 30/01/2009, 16h52
  5. Problème avec open() [Excel VBA]
    Par heddicmi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21

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