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 :

Les objets groupés sur Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Par défaut Les objets groupés sur Excel
    Comment gère t on les modifications sur les objets groupés. Exemple: une image avec deux "zone text"? Si je modifie le texte d'une des "zone text" comment je peut le voir par code?

    Dans le code ci dessous, je scrute la feuille à activation et à la désactivation de celle ci, puis je compare pour voir les modifications.

    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
    'boucle sur les objets de la feuille
    Public Function BoucleImagesFeuille(s_NomFeuille As String, i_Colonne As Integer) As Integer
        Dim Obj As Shape
        Dim i_Iteration As Integer
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        Sheets("DonneesFeuille").Cells.Columns(i_Colonne).ClearContents
        'Compte le nombre de formes dans la feuille
        Sheets("DonneesFeuille").Cells(1, i_Colonne + 1).Value = Worksheets(s_NomFeuille).Shapes.Count
        'Boucle sur les formes contenues dans la feuille
        i_Iteration = 0
        For Each Obj In Worksheets(s_NomFeuille).Shapes
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Name
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Height
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Width
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Top
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Left
                'là je sais que c'est un objet groupé mais je n'ai pas accès aux "zone text"
                If InStr(Obj.Name, "Text Box") >= 1 Or InStr(Obj.Name, "Group") >= 1 Then
                    i_Iteration = i_Iteration + 1
                    Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.AlternativeText
                End If
            Application.ScreenUpdating = True
        Next Obj
        Application.ScreenUpdating = True
        BoucleImagesFeuille = 1
    End Function

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut L'objet group est considéré comme un seul objet
    Voilà une piste pour ce que vous voulez. Je crois.

    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
    83
    84
    85
    86
    Public Function BoucleImagesFeuille(s_NomFeuille As String, i_Colonne As Integer) As Integer
     
    '---A J O U T  1 ---
    Dim tabGroup As Variant
    tabGroup = Array()
     
    '----F I N   A J O U T   1 -------------
    Dim Obj As Shape
        Dim i_Iteration As Integer
        Application.DisplayAlerts = True
        Application.ScreenUpdating = False
     
        Sheets("DonneesFeuille").Cells.Columns(i_Colonne).ClearContents
     
        ' un groupe de forme est considéré comme une seule forme
        'Compte le nombre de formes dans la feuille
      Sheets("DonneesFeuille").Cells(1, i_Colonne + 1).Value = _
        Worksheets(s_NomFeuille).Shapes.Count & " forme(s) avant dégroupage"
     
     
        'Boucle sur les formes contenues dans la feuille
        i_Iteration = 0
     
     
    '---A J O U T  2---
        ' S'il y a des formes groupées, on cherche le nom de la dernière forme
        'pour pouvoir regrouper plus tard et on place cette valeur dans un tableau
        'dynamique
        For Each Obj In Worksheets(s_NomFeuille).Shapes
          If Obj.Type = msoGroup Then
            ReDim Preserve tabGroup(UBound(tabGroup) + 1)
            tabGroup(UBound(tabGroup)) = Obj.GroupItems(Obj.GroupItems.Count).Name
          End If
        Next
        ' une autre boucle pour dissocier les groupes
        For Each Obj In Worksheets(s_NomFeuille).Shapes
          If Obj.Type = msoGroup Then Obj.Ungroup
        Next
     
            'Maintenant on peut compter le nombre de formes dans la feuille et de groupes
        Sheets("DonneesFeuille").Cells(2, i_Colonne + 1).Value = _
             Worksheets(s_NomFeuille).Shapes.Count & " forme(s) après dégroupage"
        Sheets("DonneesFeuille").Cells(3, i_Colonne + 1).Value = _
             UBound(tabGroup) + 1 & " groupe(s)"
     
    '----F I N   A J O U T   2-------------
     
     
        For Each Obj In Worksheets(s_NomFeuille).Shapes
                 i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Name
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Height
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Width
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Top
                i_Iteration = i_Iteration + 1
                Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Left
                'là je sais que c'est un objet groupé mais je n'ai pas accès aux "zone text"
                ' Normal l'objet groupé est considéré comme seul
                'comparez les Shapes.Count
                If InStr(Obj.Name, "Text Box") >= 1 Or InStr(Obj.Name, "Group") >= 1 Then
                   i_Iteration = i_Iteration + 1
                    Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.AlternativeText
                End If
            ''''''Application.ScreenUpdating = True
        Next Obj
     
    '---A J O U T  3 ---
    'on regroupe les formes
             'on sélectionne la feuille
             Worksheets(s_NomFeuille).Select
             'on initialise la cellule active pour ne pas rester sur une forme à la fin de la macro
             AC = ActiveCell.Address
             For g = 0 To UBound(tabGroup)
               Worksheets(s_NomFeuille).Shapes(tabGroup(g)).Select
               Selection.ShapeRange.Regroup
             Next g
             Application.Goto Range(AC)
     
    '----F I N   A J O U T   3-------------
     
       Application.ScreenUpdating = True
        BoucleImagesFeuille = 1
        End Function
    Salutations

Discussions similaires

  1. Automatiser les reportings Adwords sur Excel
    Par babou5921 dans le forum Autres outils décisionnels
    Réponses: 1
    Dernier message: 13/09/2012, 04h59
  2. [COM] Existe-t'il un document qui reprend les objets COM de Excel ?
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/02/2009, 09h43
  3. Réponses: 2
    Dernier message: 22/01/2009, 10h28
  4. manipuler les objets graphique d'excel sur access
    Par technopole dans le forum Access
    Réponses: 4
    Dernier message: 21/07/2006, 10h37
  5. Lister les "objets" présents sur le réseau
    Par n8ken dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 05/07/2006, 10h32

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