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 :

Tester si un Range est "grouper" ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    Bonjour,

    est-il possible de tester si un range est déjà groupé ou pas ?

    car si j'essaie de dégrouper une sélection qui n'est pas groupé, ça m'indique une erreur ...

    merci

    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
     
    Private Sub maj_Click()
     
        Dim val As Integer
        val = Cells(69, 3).Value
     
        On Error GoTo etq_error
     
        If (val = 1) Then
            Range(Cells(1, 41), Cells(1, 41).Offset(0, 200)).Select
            Selection.Ungroup
            Exit Sub
        End If
     
        Range(Cells(1, 41), Cells(1, 41).Offset(0, 200)).Select
        Selection.Ungroup
        Range(Cells(1, 41), Cells(1, 41).Offset(0, val - 2)).Select
        Selection.Group
     
        Cells(1, 1).Select
     
    etq_error:
    If Err.Number <> 0 Then
        If Err.Number = 1004 Then
            Resume Next
        Else
            MsgBox "erreur " & Err.Number
            GoTo etq_fin_fonction
     
        End If
     
    End If
     
    etq_fin_fonction:
     
    End Sub
    j'ai trouvé ça en attendant mais si vous avez une meilleure solution

    je prends !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    regarde le fonctionnement de ce petit bout de code qui permet de trouver la plage de cellules fusionnées.

    le fait de faire un select sur une des cellules de la plage fusionné sélectionne cette plage et il ne reste plus qu'à vérifier que la sélection effective correspond à ce qu'on a demandé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
      Range("A1").Select
      If selection.Address <> "$A$1" Then
        MsgBox "les cellules de la plage" & selection.Address & "sont fusionnées"
      End If
    End Sub
    Si ça te conviens !

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut AllyKo, zyhacket le forum

    AllyKo, pas assez d'infos sur le but à atteindre et l'état des goupement pour aider efficacement, mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range(Cells(1, 41), Cells(1, 41).Offset(0, 200)).Select
    Selection.Ungroup
    Les groupement agissant sur les lignes/colonnes et non sur les cellules, je verrais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Columns(41), Columns(41+200)).Ungroup
    Après, c'est une question d'habitude :
    on error : première ligne après le titre, traitement des erreurs en dernier avec un resume sortie
    le traitement commence par la déclaration des variables et finit par l'adresse de sortie et Exit sub (avec toutes les remises en état Application entre les 2)
    mais c'est une question d'habitude : je préfère sépararer les fonction dans mon code


    zyhacket Le groupement(Données>>créer un plan) est différent d'une fusion.
    Sinon, l'idée est bonne, mais il vaut mieux éviter les select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    If Range("A1").MergeCells Then MsgBox Range("A1").MergeArea.Address(0, 0)
    End Sub
    A+

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour,

    à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub maj_Click()
        Dim Vale As Integer 'éviter Val qui est le nom d'une fonction de base
        Vale = Cells(69, 3).Value
        If Vale = 1 Then
            On Error Resume Next
            Range(Cells(1, 41), Cells(1, 41).Offset(0, 200)).Ungroup
        End If
        If Vale < 218 Then Range(Cells(1, 41), Cells(1, 41).Offset(0, Vale - 2)).Group
        Cells(1, 1).Select
    End Sub
    en faisant attention au contenu de C69 et avec correction éventuelle donnée par Gorfael.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    Merci pour toute ces suggestions

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

Discussions similaires

  1. Tester si un objet Range est définit
    Par niavlys26 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/11/2007, 13h10

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