La méthode Ungroup de la classe Range a échoué

Bonjour,

je réalise un projet en vba et je rencontre un problème qui semble assez courant lors de mes recherches. En effet avant de poster ce message j'ai recherché par moi-même mais je n'ai pas trouvé de réponse répondant à mon besoin.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

On Error Resume Next

Dim ws As Variant

For Each ws In ThisWorkbook.Sheets

If InStr(ws.name, "tab") <> 0 Then

ws.Cells.Ungroup ' l'erreur se trouve à cette ligne

End If

Next ws

End Sub

J'ai trouvé que le problème venait tous le temps d'une personne réalisant une sélection avec une méthode de classe range mais ce n'est pas mon cas.

Je ne trouve pas la réponse pouvez-vous m'aider s'il vous plait ?

Merci d'avance pour toutes aides.

Cordialement.

Bonjour,

L'erreur se produit quand il n'y a plus de groupe.

Par ailleurs j'ai remarqué qu'il fallait le faire plusieurs fois quand des groupes de groupes ont été faits.

Et dans certains cas il faut préciser rows et/ou columns

Pour résoudre cela, il faut donc ajouter une boucle et faire la manip tant qu'il n'y a pas d'erreur.

Si tu veux aller plus loin, poste ton fichier (simplifié et anonymisé).

Merci beaucoup de cette réponse plus que rapide

Je t'avoue que je ne suis pas encore expert en VBA, je comprend donc pas explicitement ton explication de groupe.

Si j'ai bien compris, tu essayes de me dire que dans mon fichier excel il y a une feuille où il n'y a plus de cellules groupées et c'est pour cela qu'il y a une erreur ?

Ou alors au contraire qu'il faut que je le fasse plusieurs fois pour enlever l'erreur ? Et si c'est le cas quelle est la condition de fin de boucle qui correspondrait à "il n'y a plus d'erreur" ?

Je joins une version très simplifiée de mon excel, sinon trop volumineux pour, en espérant que je puisse comprendre.

Merci.

Dans ton exemple, il n'y a aucun groupe de données dans les onglets tab !

Est-ce que ce sont des lignes ou des colonnes qu'il faut dégrouper ?

Essaie ceci :

    Dim ws As Variant, erreur As Variant
    For Each ws In ThisWorkbook.Sheets
        If InStr(ws.name, "tab") <> 0 Then

            ' colonnes
            Do
                On Error Resume Next
                ws.Columns.Ungroup
                erreur = Err
                On Error GoTo 0
            Loop Until erreur <> 0 ' boucle jusqu'à ce qu'il y ait une erreur

            ' lignes
            Do
                On Error Resume Next
                ws.Rows.Ungroup
                erreur = Err
                On Error GoTo 0
            Loop Until erreur <> 0 ' boucle jusqu'à ce qu'il y ait une erreur

        End If
    Next ws

Le but est de dégrouper les lignes et les colonnes jusqu'à ce que excel trouve une erreur (qui signifie qu'il n'y a plus de groupe de données).

En fait j'ai trouvé une solution encore plus simple.

Dans Outils -> Option -> Général :

- J'ai modifié Récupération d'erreur sur Arrêt sur les erreurs non gérées

Et plus de problème mdrrr

Mais c'est grâce à toi que j'ai pensé à ça merci beaucoup de ton aide.

Car comme tu dis faut que Excel le fasse plusieurs fois sans s’arrêter sur une erreur comme celle la.

Rechercher des sujets similaires à "methode ungroup classe range echoue"