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 :

Selectionner des images et les centrer dans des colonnes différentes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Selectionner des images et les centrer dans des colonnes différentes
    Bonjour à tous,

    Voici mon problème : je dispose de 9 images nommées Picture1, Picture2 etc.. Ces images sont placées à un endroit sur la feuille et sont cachées. Mon idée est de rendre visible ces images en fonction de certains critères.. Jusqu'à là, pas de problème.

    Le souci intervient lorsqu'il faut que je définisse la place des images sur la feuille Excel.. Dans mon fichier les ranges : ("A1:A4") ; ("B1:B4") etc.. sont fusionnées et j'aimerais incrémenter pour que la première image rendue visible par le programme se place dans la première range, si possible centrée. La deuxième image dans la deuxième range etc..

    La variable pour ma range est donc les colonnes
    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
    Dim plage As Range
     
    o = 1
    For n = 1 To 9 ' Pour balayer les 9 images
    Set plage = Worksheets("Résumé_produit").Range(o & "1:" & o & "4") ' Selon moi je défini ici la Range("A1:A4") etc..
     
    With Worksheets("Résumé_produit")
     
        .Pictures("Picture" & n).Height = plage.Height / 2
        .Pictures("Picture" & n).Width = plage.Width / 2
        .Pictures("Picture" & n).Left = plage.Left + ((plage.Width - .Pictures("Picture" & n).Width) / 2)
        .Pictures("Picture" & n).Top = plage.Top + ((plage.Height - .Pictures("Picture" & n).Height) / 2)
     
    End With
     
    o = o + 1
     
    Next
    Ce code me renvoie une erreur "Unable to set the width property of the range class".. Je suppose donc que la définition de ma range à colonne variable n'est pas bonne..

    J'espère avoir été clair.. Merci pour votre aide

  2. #2
    Membre à l'essai
    Homme Profil pro
    Architecte systèmes embarqués
    Inscrit en
    Juin 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte systèmes embarqués

    Informations forums :
    Inscription : Juin 2015
    Messages : 21
    Points : 21
    Points
    21
    Par défaut Proposition de solution
    Bonjour konig69

    Citation Envoyé par konig69 Voir le message
    Set plage = Worksheets("Résumé_produit").Range(o & "1:" & o & "4") ' Selon moi je défini ici la Range("A1:A4") etc..
    Selon moi c'est cette ligne qui pose problème, mais je n'ai qu'un très faible niveau de VBA....

    o vaut 1 donc o & "1:" & o & "4" vaut 11:14 et je suppose que la méthode Range ne traite pas celà comme tu le souhaites ce qui ensuite fait planter la méthode width

    Il faut au préalable que tu recherches la lettre asociée à ta valeur de o.
    Pour ce faire j'ai utiliser cette petite routine de mon côté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function ConvertToLetter(iCol As Integer) As String
       Dim iAlpha As Integer
       Dim iRemainder As Integer
       iAlpha = Int(iCol / 27)
       iRemainder = iCol - (iAlpha * 26)
       If iAlpha > 0 Then
          ConvertToLetter = Chr(iAlpha + 64)
       End If
       If iRemainder > 0 Then
          ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
       End If
    End Function
    Enregristre là dans un module à part entière et remplace tout tes "o" par ConvertToLetter(o)

    Dis-moi ce qu'il en est !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai trouvé ce qu'il me fallait en passant par Cells au lieu de range..

    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
    o = 1
    For n = 1 To 9
     
    Set plage = Worksheets("Résumé_produit").Cells(3, o)
     
    With Worksheets("Résumé_produit")
        If .Pictures("Picture" & n).Visible = True Then
            .Pictures("Picture" & n).Height = plage.Height / 2
            .Pictures("Picture" & n).Width = plage.Width / 2
            .Pictures("Picture" & n).Left = plage.Left + ((plage.Width - .Pictures("Picture" & n).Width) / 2)
            .Pictures("Picture" & n).Top = plage.Height / 2
            o = o + 1
         End If
    End With
     
    Next
    Je ne suis pas sûr que ça soit la manière la plus élégante de le faire mais ça fonctionne..

    Merci pour ta réponse

  4. #4
    Membre à l'essai
    Homme Profil pro
    Architecte systèmes embarqués
    Inscrit en
    Juin 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte systèmes embarqués

    Informations forums :
    Inscription : Juin 2015
    Messages : 21
    Points : 21
    Points
    21
    Par défaut
    Oui en effet avec Cells ca va fonctionner très bien !!

    Cells se base sur les indices des cellules (3,4) par exemple, alors que Range se base sur la dénomination d'une cellule ("D3") pour reprendre le même exemple.

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

Discussions similaires

  1. [XL-2007] Ou stocker des images pour les utiliser dans un USERFORM?
    Par ThamAL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/11/2013, 20h55
  2. ouvrir des .txt et les copier dans des feuilles
    Par elmanu13 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2012, 12h11
  3. Recuperer le nom des onglets pour les mettre dans une colonne
    Par nico4566 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2011, 17h23
  4. Réponses: 1
    Dernier message: 17/05/2010, 12h49
  5. Réponses: 1
    Dernier message: 13/10/2009, 10h47

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