Bonsoir mes amis:
Je pense à deux façons d'effacer un contenu dans une plage définie de cellules d'un projet VBA (sous MS Excel):
Worksheets("SheetName").Range("A1:B10").ClearContents
Worksheets("SheetName").Range(Cells(1, 1), Cells(10, 2)).ClearContents
Le problème est que la deuxième manière me montre une erreur ' 1004 ' lorsque je ne regarde pas la feuille de calcul actuelle "SheetName" (en d'autres termes, lorsque je n'ai pas "SheetName" comme ActiveSheet).
La première façon de fonctionner parfaitement dans n'importe quelle situation.
Pourquoi cela arrive-t-il? Comment puis-je utiliser la "Deuxième manière" sans ce bug?
C'est parce que vous n'avez pas qualifié Cells(1, 1)
avec un objet de feuille de calcul, et il en va de même pour Cells(10, 2)
. Pour que le code fonctionne, il devrait ressembler à ceci:
Dim ws As Worksheet
Set ws = Sheets("SheetName")
Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents
Alternativement:
With Sheets("SheetName")
Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With
EDIT: L'objet Range héritera de la feuille de calcul des objets Cells lorsque le code sera exécuté à partir d'un module standard ou d'un formulaire utilisateur. Si vous exécutez le code à partir d'un module de code de feuille de calcul, vous devez également qualifier Range
, comme suit:
ws.Range(ws.Cells(1, 1), ws.Cells(10, 2)).ClearContents
ou
With Sheets("SheetName")
.Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With
En effet, vous ne qualifiez pas complètement votre objet de cellules. Essaye ça
With Worksheets("SheetName")
.Range(.Cells(1, 1), .Cells(10, 2)).ClearContents
End With
Notez le DOT avant les cellules?
Pour l’adressage numérique des cellules, cochez la case S1O1 dans les paramètres MS Excel. C’est le deuxième onglet à partir du haut (c’est-à-dire les formules), quelque part au milieu de la page dans ma version hongroise.
Si activé, il gère l’adressage VBA dans les deux styles, à savoir Range ("A1: B10") et Range (Cells (1, 1), Cells (10, 2)). Je suppose qu'il ne gère que le style Range ("A1: B10"), s'il n'est pas activé.
Bonne chance!
(Notez que Range ("A1: B10") représente un carré 2x10, tandis que Range (Cells (1, 1), Cells (10, 2)) représente 10x2. L'utilisation de numéros de colonne au lieu de lettres n'affectera pas l'ordre d'affichage. .)