VBA - Inconvénients de ClearContents

job75

XLDnaute Barbatruc
Bonjour à tous,

Je connaissais un inconvénient de "ClearContents" : plage.ClearContents peut entrainer un bug quand plage contient des cellules fusionnées.

Alors que plage = "" ne pose pas de problème.

Au post #17 de ce fil je découvre un autre inconvénient :

https://www.excel-downloads.com/threads/resolu-extraction-doublon-ligne-dans-plage.226619/

Quelqu'un peut-il expliquer dans ce dernier cas le fonctionnement de "ClearContents" et pourquoi = "" ne pose aucun problème ?

Merci d'avance et A +

Edit : la référence au fil d'Annette a compliqué la compréhension du problème.

Je l'ai reformulé simplement au post #32 :

https://www.excel-downloads.com/threads/vba-inconvenients-de-clearcontents.226675/

A+
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : VBA - Inconvénients de ClearContents

Salut :D

Par flemme et flegme, je privilégie "" au détriment de .ClearContents :p.

Avec la seconde expression, un Application.Calculate en fin de procédure permet de s’en sortir.

Cela peut laisser penser que les 2 traitements n’appellent pas les mêmes routines d’Excel et, désolé, mais je ne suis pas assez costaud pour expliquer le pourquoi de l’existence de ClearContents.

Affaire à suivre …
 

job75

XLDnaute Barbatruc
Re : VBA - Inconvénients de ClearContents

Bonjour Si...

Avec la seconde expression, un Application.Calculate en fin de procédure permet de s’en sortir.

Oui, mais alors il vaut mieux utiliser les Application.Calculation, comme je l'ai fait dans ma solution du post #16, on évite ainsi 2 recalculs des fonctions.

Cela n'explique pas pourquoi ClearContents met le binz.

A+
 

Hellboy

XLDnaute Accro
Re : VBA - Inconvénients de ClearContents

Bonjour,

Je n,ai pas testé le code non plus, mais...
je me demande si ce n'est pas à cause que la routine est évènementiel ?
À chaque cellules qui s'efface, c'est un évènement et ceci ferait partir en boucle cette routine particulière.
Private Sub Worksheet_Change(ByVal Target As Range)

Donc, si l'on rajoutait un code qui stop l'évènement durant le traitement, ça devrait être nikel.
Sub
Application.EnableEvents = False

code

Application.EnableEvents = True
End Sub

Après tests, les cellules fusionné, sont effectivement problématique.
Pour que cela fonctionnne, il faut tenir compte de la plage étendue de la fusion(si possible)
 
Dernière édition:

Hellboy

XLDnaute Accro
Re : VBA - Inconvénients de ClearContents

Bonsoir job75,

Même si c'est le cas, si il y a la commande Resize... ça ne "trig" pas un changement sur la feuille ?

aussi,

If Intersect(Target, [Q2:U2]) Is Nothing Then Exit Sub
Dim ncol%, x$, ta, tb(), i&, y$, n&, j%
ncol = 4
If Application.Count([Q2:U2]) < 5 Then GoTo 1
.....
[L2].Offset(n).Resize(Rows.Count - n - 1, ncol) = ""


Est-ce que sans le goto
ont aurait pu remplacer par:

If Intersect(Target, [Q2:U2]) Is Nothing Then
Exit Sub
elseif Application.Count([Q2:U2]) < 5 then
[L2].Offset(n).Resize(Rows.Count - n - 1, ncol) = ""
exit sub
end if

x = [Q2] & " " & [R2] & " " & [S2] & " " & [T2] & " " & [U2]
ta = [t] 'matrice, plus rapide
ReDim tb(1 To UBound(ta), 1 To ncol)

.....

End sub
 

job75

XLDnaute Barbatruc
Re : VBA - Inconvénients de ClearContents

Bonjour le fil, le forum,

Si l'on remplace la dernière ligne de la macro :
Code:
1 [L2].Offset(n).Resize(Rows.Count - n - 1, ncol).ClearContents
par un copier-coller :

Code:
1 With [L2].Offset(n)
  .Value = ""
  .Copy .Resize(Rows.Count - n - 1, ncol)
End With
rien n'est changé, c'est toujours le binz.

On peut donc dire que d'une certaine manière l'instruction ClearContents fonctionne comme un copier-coller, tout du moins elle fait autre chose que simplement vider les cellules.

Alors que bien sûr = "" ne fait que remplacer les valeurs des cellules.

A+
 

Efgé

XLDnaute Barbatruc
Re : VBA - Inconvénients de ClearContents

Bonjour Job :), salut à tous
Et si tu remplaces Rows.count par un chiffre (65 536 au hasard) ?
Chez moi sous 2007 ton code ne plante pas, et comme tu es sous 2003....
Cordialement
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA - Inconvénients de ClearContents

Bonjour Efgé,

Mes macros n'ont jamais planté, ce sont les fonctions VBA en Feuil5 qui posent problème avec ClearContents.

Le phénomène a lieu même en remplaçant Rows.Count par 2.

A+
 

Discussions similaires

Réponses
12
Affichages
330

Statistiques des forums

Discussions
312 319
Messages
2 087 213
Membres
103 494
dernier inscrit
JP9231