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 :

Boucle sur des objets d'une feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut Boucle sur des objets d'une feuille
    bonjour le forum

    je dispose de certains objet sur ma feuille que j'ai nommé "Rectangle" je voudrais masquer 16 d'entre eux j'ai met un code pour le faire mais malheureusement il masque tous et non pas 16.

    voici le code :

    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
    Sub MasqueFormulaire()
    Dim Sh As Shape
    Dim Tableau() As String
    Dim i As Integer
     On Error Resume Next
     
        'Boucle sur les formes de la feuille active
        For Each Sh In Feuil1.Shapes
            'Vérifie si le nom de la forme commence par "Rectangle".
            If Left(Sh.Name, 9) = "Rectangle" Then
                For i = 1 To 15
                'Redéfinit la taille du tableau et intègre le nom de la forme.
                ReDim Preserve Tableau(1 To i)
                Tableau(i) = Sh.Name
        Next
     
        'On sort si le tableau est vide.
        If i = 0 Then Exit Sub
     
        'Regroupe les formes dont le nom se trouve dans le tableau
        Set Sh = Feuil1.Shapes.Range(Tableau).Group
        'masquer les formes"
        Sh.Visible = msoFalse
        End If
        Next
     
    End Sub
    merci d'avance pour votre aide

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Pourquoi ne pas les masquer directement dans ta condition ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Left(Sh.Name, 9) = "Rectangle" Then
    Sh.Visible = msoFalse
    end if

  3. #3
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    bonjour EngueEngue merci

    le problème c'est que ce code masque tous les rectangle dans la feuille alors que moi je voudrais masqué de "Rectangle 01" a "Rectangle 16" c'est a dire 16 objets
    même si je met le code masque dans la condition comme tu l'a suggerer ça change rien.

    merci

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sub MasqueFormulaire()
    Dim Sh As Shape
    Dim i As Integer
     On Error Resume Next
     
        'Boucle sur les formes de la feuille active
    For i = 1 to 16
        For Each Sh In Feuil1.Shapes
            If Sh.Name= "Rectangle" & i Then
    Sh.Visible = msoFalse
    end if
    next sh
    next i
    end sub

  5. #5
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    salut

    j'ai essayé ton code mais apparemment il donne rien ?????????

    merci encore

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Des fois il faut essayer de voir ce qu'il se passe sans recopier sans comprendre... il manquait un espace après rectangle..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sub MasqueFormulaire()
    Dim Sh As Shape
    Dim i As Integer
     On Error Resume Next
     
        'Boucle sur les formes de la feuille active
    For i = 1 to 16
        For Each Sh In Feuil1.Shapes
            If Sh.Name= "Rectangle " & i Then
    Sh.Visible = msoFalse
    end if
    next sh
    next i
    end sub

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    pourquoi utiliser For Each (=tous !) si ce n'est pas pour tous les traiter ? …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Parce que je ne sais pas dans quel ordre il les a mis et combien de types de shapes il a..

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    A l'origine, la question s'adressait à Saïd … Mais effectivement t'es aussi concerné !

    Relire le premier post alors car c'est bien expliqué !

    Donc une seule boucle de 01 à 16 sur le nom des Shapes "Rectangle " & valeur de la boucle …


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    - A ton avis, quel est le plus grand mal de notre époque : l'ignorance ou l'indifférence ?
    - J' sais pas et j' m'en fous !

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    C'est ce que j'ai proposé mais il faut bien boucler sur les shapes pour voir si c'est bien eux! ou alors illumine moi!

  11. #11
    Invité
    Invité(e)
    Par défaut Bonjour, regarde ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub MasqueFormulaire()
    Dim i As Integer
     
        'Boucle sur les formes de la feuille active
    For i = 0 To ActiveSheet.Shapes.Count - 1
    '    Si les critères collent ?
            If CLng(Replace(1, ActiveSheet.Shapes(i).Name, "Rectangle")) > 5 And CLng(Replace(1, ActiveSheet.Shapes(i).Name, "Rectangle")) > 10 Then
                ActiveSheet.Shapes(i).Visible = False
            End If
     
    Next i
    End Sub

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Citation Envoyé par EngueEngue Voir le message
    C'est ce que j'ai proposé mais il faut bien boucler sur les shapes pour voir si c'est bien eux! ou alors illumine moi!
    Comme un sapin de Noël car c'est du niveau débutant ‼

    For N% = 1 To 16: Feuil1.Shapes("Rectangle " & Format$(N, "00")).Visible = False: Next

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


    __________________________________________________________________________________________
    A celle qui dit que les hommes sont tous pareils, lui répondre qu'il ne fallait pas tous les essayer !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Et bien depuis toujours je boucle pour aller selectionner des objets, je ne savais pas qu'on pouvait les select directement. Une bonne chose de faite hahah

  14. #14
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Un Shape est un objet comme un autre, à partir du moment qu'il dispose d'une propriété .Name


    Pensée du jour (applicable chaque jour) :

    La sélection est souvent source d'ennuis …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    Bonjour mes amis et encore merci

    c'est ce bout de code proposé par Marc qui a bien fait l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For N% = 1 To 16: Feuil1.Shapes("Rectangle " & Format$(N, "00")).Visible = False: Next


    bonne journée

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

Discussions similaires

  1. Faire une boucle sur des OptionButton d'une feuille dans une userform
    Par Marty57070 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/06/2015, 07h23
  2. [XL-2010] Fair une boucle sur des objets Ranges
    Par Escorpion dans le forum Excel
    Réponses: 6
    Dernier message: 18/03/2015, 18h14
  3. [XL-2010] Boucle sur des contrôles d'une feuille de calcul
    Par Korleone dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/01/2011, 15h16
  4. Ajouter une textures sur des objets 3D openGL
    Par rere56 dans le forum 3D
    Réponses: 1
    Dernier message: 27/07/2007, 11h08
  5. Réponses: 1
    Dernier message: 05/07/2007, 14h48

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