Remplacer "For each cell in Range" par une variable tableau

Salut !

Ca faisait un moment que je n'était pas passé (donc je dois m'améliorer ).

Là j'ai une petite macro qui test si une cellule contient une formule, et si ce n'est pas le cas la peint en rouge. Ça marche bien, mais j'ai ~130 feuilles à traiter et c'est un peu trop long :p

Voici la macro d'origine :

    Dim sh As Worksheet
    cell As Range, myrange as Range

    For Each sh In Sheets
        If IsNumeric(sh.Name) Then
            With sh
                myrange = Range("O7:AM55,AO7:BM55,BO7:CM55,CO7:DM55") '3 plages dans chaque feuille.

                For Each cell In myrange
                    If Not cell.HasFormula Then
                    cell.Interior.ColorIndex = 3
                    End If
                Next cell
            End With
        End If
    Next sh

Voici ce que j'essaie de faire avec une variable tableau, mais évidemment ça plante Erreur 1004 à la définition de myrange. Comme il yt a 3 plages, faut-il créer 3 tableaux ?

    Dim sh As Worksheet
    Dim c1&, c2&, myrange As Variant

    For Each sh In Sheets
        If IsNumeric(sh.Name) Then
            With sh
                myrange = Range("O7:AM55,AO7:BM55,BO7:CM55,CO7:DM55")
                For c1 = LBound(myrange, 1) To UBound(myrange, 1)
                    For c2 = LBound(myrange, 2) To UBound(myrange, 2)
                        If Not myrange(c1, c2).HasFormula Then
                            myrange(c1, c2).Interior.ColorIndex = 3
                        End If
                    Next c2
                Next c1
            End With
        End If
    Next sh

Merci d'avance

Bonjour Kit

Un tableau VBA ne comporte que des données en mémoire.

Tu ne peux pas colorer une donnée en mémoire...

Pour ton exemple on peut voir autrement :

 Dim sh As Worksheet, myrange As Range
    For Each sh In Sheets
        If IsNumeric(sh.Name) Then
            Set myrange = sh.Range("O7:AM55,AO7:BM55,BO7:CM55,CO7:DM55") '3 plages dans chaque feuille
            On Error Resume Next 'au cas où ne trouve QUE des formules
            myrange.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 3
            If Err Then Err.Clear ' si il y a eu une erreur on la supprime
        End If
    Next sh

Cela évite de boucler sur chaque cellule.

Cordialement

Je savais qu'on pouvais ignorer des erreurs, mais pas les effacer.

Malin le coup xlCellType !

Merci

Edith : J'ai quand même une erreur 1004 ("Pas de cellules correspondantes") qui n'est pas gérée.

Re

Chez moi pas d'erreur 1004, pas d'erreur du tout...

Cordialement

Bonjour à tous,

SpecialCells renvoie une erreur quand aucune cellule du type cherché n'est trouvée... Il est généralement judicieux de mettre la maoeuvre sous gestion d'erreur...

Cordialement.

Salut,

N'est-ce pas ce qu'est sensé faire On error resume next ?

Oui en effet !

Ton erreur est sur quelle ligne ?

myrange.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 3

Cela ne devrait pas provoquer d'erreur !

Qu'y a-t-il exactement dans ton code ? S'il reproduit celui d'Efgé, pas de raison d'erreur !

En dehors de quelques application.[...] = False pour accélérer la procédure j'ai purement copié-collé le script de Efgé, confer le screenshot.

Aurais-je désactivé des options sans le savoir ?

sans titre

Bonjour,

Je ne vois pas au premier coup d'oeil, et pas le temps de plus...

Mais à part ScreenUpdating = False (qu'il est inutile de remettre à True, Excel s'en charge !) le reste est inutile et à virer !!

Cordialement.

edit : Je conseillerais donc de virer tout ça et vérifier à tout hasard si l'erreur demeure !

Bonjour Kit, Bonjour MFerrand

De mon coté je n'arrive pas à reproduire l'erreur.

Sans un exemple de ton fichier (anonyme et significatif), je ne peux rien faire de plus.

Cordialement

Ouais je mets toujours ses blocs pour accélérer mes macros, mais effectivement sur un truc aussi simple c'est pas forcément utile.

Ci-joint un fichier expurgé avec une seule feuille, le problème demeure.

5xlprat-copie.xlsm (118.27 Ko)

Chez moi pas d'erreur....

Cordialement

5xlprat-copie-2.xlsm (129.55 Ko)

Ca marche si j'ai au moins une cellule sans formule, mais sinon j'ai de nouveau l'erreur

Bonjour à tous,

Pas constaté d'erreur...

Bonjour à tous,

Dans l'environnement VBA, l'option Outils/Options.../Général/Récupération d'erreur/Arrêt sur toutes les erreurs ne serait-elle pas cochée ?

Bien vu MaPoire, j'ai switché sur "Erreur non gérées" et ça marche parfaitement.

Merci à tous !

Rechercher des sujets similaires à "remplacer each range variable tableau"