Macro limitée par le nombre de cellule ?

Bonjour,

Je n' y connais pas grand chose en VBA, mais avec l'outil "Enregistrer une macro" (très pratique pour les deb.), j'ai réussi à faire une macro simple : un bouton pour effacer certaines cellules. J'ai utilisé cette macro dans plusieurs tableaux simples sans problème.

Or j'en ai besoin pour un tableau un peu plus complexe de type formulaire, avec 133 cellules à remplir (et à effacer,donc). Bizarrement, la macro ne marche que jusqu'à 26 plages/cellules sélectionnées ; à partir de 27, j'ai le message "erreur d'exécution '1004' La méthode 'range' ...gnagnagna. Pour info, toutes ces cellules sont fusionnées, certaines "contenant" beaucoup de cellules, peut-être que ça vient de là ?

Y a-t-il un moyen de résoudre ce problème ?

Merci beaucoup.

Pour info, voici la macro quand elle marche :

Sub Effacer()

'

' Effacer Macro

'

'

If MsgBox("Sûr de vouloir effacer ?", 36, "Confirmation") = vbYes Then

Range( _

"U5:AC5,BT5:DA5,U7:AI7,BB7:BK7,AA12:AJ12,BE12:BF12,CD12:CE12,AA14:AJ14,AA16:AJ16,AA18:AJ18,AA20:AJ20,CD14:CN14,CD16:CN16,CD18:CN18,AA25:AJ25,AA27:AJ27,AA29:AJ29,AA31:AJ31,AA33:AJ33,AA35:AJ35,AA37:AJ37,AA39:AJ39,AA41:AJ41,AA44:AJ44,AK31:AT31,AU31:BD31" _

).Select

Range("AU31").Activate

Selection.ClearContents

Range("U5:AC5").Select

End If

End Sub

Bonsoir,

cette partie là n'est pas nécessaire :

.Select
 Range("AU31").Activate
 Selection

En effet, il n'est pas utile de sélectionner en VBA pour effacer, la sélection que l'on trouve avec l'enregistreur de macro est souvent du au fait que l'on sélectionne les cellule avec la souris, du coup l'enregistreur enregistre, Mais sous VBA pour effacer une donnée dans une cellule il suffit de donnée l'adresse de la cellule et effacer : Range("A1").clearContents.

Ensuite si ces cellules sont toujours les mêmes, vous pourriez sous Excel les sélectionner, puis en haut à gauche à coté de la barre de formule donner un nom à la sélection : MesZones (par exemple)

C'est laborieux au départ de le faire mais après dans le code VBA c'est tellement plus simple :

Range("MesZones").ClearContents

@ bientôt

LouReeD

Bonjour et merci beaucoup pour votre réponse rapide,

Je n'avais pas pensé à définir un nom, et je garde l'idée pour un autre cas. Car là, ça ne marche pas : j'ai essayé, même avec une seule cellule.

Pour exemple, j'ai nommé "essai" la cellule fusionnée U5:AC5.

Si j'écris "Range("U5:AC5").ClearContents" la macro marche, mais si j'écris "Range("essai").ClearContents" ça ne marche pas, il m'affiche : "Erreur d'exécution 1004 Cette action ne peut pas être appliquée à une cellule fusionnée".

Pensez-vous qu'il y ait un moyen de contourner le problème ?

Et bien j'en apprends tous les jour !

Je n'ai jamais été confronté aux cellules fusionnées dans ce système.

Non pas d'idée...

Après on peut se poser la question : Pourquoi sont elles fusionnées ces cellules ?

Un alignement sur plusieurs colonnes ne suffirait-il pas ?

Et en vertical, Steelson propose en téléchargement une option de pseudo centrage sur cellule non fusionnée (ou l'inverse ?)

@ bientôt

LouReeD

Bonjour,

c'est que ton nom essai n'est pas défini ou qu'il ne couvre qu'une partie des plages fusionnées.

Eventuellement dépose un fichier.

eric

J'ai essayé, et en effet eriiic, si une cellule est fusionnée dans le champ nommé, cela ne fonctionne pas...

Ou bien j'ai raté quelque chose...

Bon j'ai trouvé : définition de la zone cellules défusionnées, puis une fois la définition du nom faite, fusionner les zones devant être fusionnées.

@ bientôt

LouReeD

Bonsoir,

Ah ben je suis content de vous avoir fait découvrir un truc

En fait j'ai pensé à ça aussi mais sans essayer car je me suis dit qu'à coup sûr, une fois refusionnées ça ne marcherait plus. Je vais essayer. Je vous tiens au courant.

Pour répondre à votre question : Pourquoi sont elles fusionnées ces cellules ?

Difficilement explicable ; je peux vous envoyer le fichier pour info. En fait c'est un formulaire fait en urgence par le service administratif de ma boîte, que je m'évertue à optimiser pour qu'il soit plus facilement utilisable par le personnel de terrain. Je suis donc limité, je ne peux pas le remanier complètement.

Comment je vous l'envoie ? En MP ?

Bonjour le fil

Juste une petite astuce, effectivement VBA ne sait pas faire un ClearContents sur une plage nommée

(je viens de le découvrir également )

En revanche on peut très bien faire (ma zone ce nomme "CellulesFusionnées")

Range("CellulesFusionnées").Value = ""

Ou alors en tenant compte de la possibilité de cellules fusionnées

Sub Test()
  If Sheets("Feuil1").Range("CellulesFusionnées").MergeCells Then
    Sheets("Feuil1").Range("CellulesFusionnées").MergeArea.ClearContents
  Else
    Sheets("Feuil1").Range("CellulesFusionnées").ClearContents
  End If
End Sub

@+

Attention ! Il sait le faire mais apriori il faut que la zone soit nommée avant d'effectuer les fusions...

Bizarre...

@ bientôt

LouReeD

J'ai retrouvé le lien du fusionné non fusionné !

C'est ICI.

@ bientôt

LouReeD

Bah moi j'ai un super excel

J'ai fait un .ClearContents sur une plage nommée de 6 cellules dont 2 fusionnées sans aucun problème.

Si le nom ne contient pas toute la fusion là oui, erreur 1004.

eric

Et bien essayez ceci :

commencez par fusionner la plage A1:F1

puis une autre de C5:C10

Sélectionnez ces deux plages plus deux ou trois cellules seules supplémentaires.

Elles sont sélectionnées (toutes), vous pouvez les passer en couleur bleue par exemple.

Une fois ceci fait vous pouvez leur donner un nom soit dans la zone de texte soit par "formules" "gestionnaire des noms"

Disons MaZone

un petit code VBA

Sub Test Effface()
Range("MaZone").Clearcontents
End Sub

retournez sous excel, entrez des valeurs dans les cellules bleues, puis lancez la macro : erreur !

Maintenant défusionnez tout, supprimez le nom créé précédemment, sélectionnez la même plage (facile les cellules sont bleues) donnez le nom MaZone, fusionnez la plage A1:F1, fusionnez la plage C5:C10, entrez des données, puis lancez le code : pas de soucis !

Le clearcontents fonctionne si les fusions sont faites après la définition de zone...

@ bientôt

LouReeD

Ah ok.

Oui, si ce sont des plages disjointes il faut boucler sur les areas cellules:

    Dim c As Range
    For Each cIn [nom]
        c.MergeArea.ClearContents
    Next c

eric

Et bien j'en connais un qui va être content !

Et moi j'apprends, j'apprends, j'apprends.... éternellement j'apprends...

Quand Est-ce que je saurais ?

@ bientôt

LouReeD

J'ai corrigé, en fait c'est sur les cellules qu'il faut boucler.

Et pour avoir le meilleur des 2 :

    Dim c As Range
    If [test3].Areas.Count = 1 Then
        [test3].ClearContents
    Else
        For Each c In [test3]
            c.MergeArea.ClearContents
        Next c
    End If

vitesse maxi si plage d'un seul tenant, même avec des fusionnées (complètement !) à l'intérieur.

eric

Bon comme même j'avais trouvé le contournement en fusionnant après le nommage !

C'est comme même déjà bien !

@ bientôt

LouReeD

Si c'est sur les cellules pourquoi MergeArea ?

@ bientôt

LouReeD

Parce que ça :

2020 05 06 00 16 49

On a que la 1ère cellule des plages fusionnées, MergeArea non donne la plage de la fusion nécessaire à ClearContents.

Et par cellule parce que .ClearContents n'aime pas non plus l'area $E$5:$E6

Il est bien susceptible au fond...

eric

Merci à tous,

Je vais essayer ces solutions et je reviens vers vous (mais j'avoue que je suis un peu largué avec les "mergearea"...

A+

Bonjour,

Désolé eriiic, mais je ne suis pas assez calé pour vous suivre.

Par contre j'ai essayé la solution de BrunoM45 :

Range("CellulesFusionnées").Value = ""

Ça marche, mais en partie seulement, je m'explique :

J'ai sélectionné toutes mes cellules et ai donné un nom (dans un premier temps sans les défusionner avant). Puis j'ai appliqué la macro de BrunoM45. Ça marche, pas de message d'erreur, mais seulement une partie des cellules s'effacent (69 sur 133). J'ai réessayer plusieurs fois, des fois que je me sois planté, toujours pareil. J'ai ensuite fait pareil mais avec le conseil de Loureed, en défusionnant avant de nommer puis refusionnant. Le résultat est le même. Seul le début du document s'efface....

Une idée ?

Merci

Rechercher des sujets similaires à "macro limitee nombre"