WITH - END WITH

STEVENS1962 -  
 STEVENS1962 -
Bonjour,

Bonjour,

débutant enVBA , j'ai une petite routine qui : sélectionne une plage de cellule et qui centre les données en milieu de cellule. Lors de l'exécution apparait le message suivant : Erreur de compilation , Fonction ou variable attendue. L'éditeur visual Basic sélectionne le mot situé après With, c'est à dire "SELECTION". Que dois-je écrire comme fonction ou variable?
Enfin comment peut-on formuler en français ce que fait l'instruction WITH - END WITH

'Centrer toutes les données des cellules d'une plage définie'
Range("A1:B15").Select
With SELECTION.Find
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With

voici mon tableau sous EXCEL :

A B
citroen xsara
citroen picasso

peugeot 307
peugeot 407
peugeot 607

renault laguna

Merci pour votre réponse

NB j'ai une autre solution plus simple
'Centrer toutes les données des cellules d'un tableau'
ActiveSheet.Range("A1").CurrentRegion.HorizontalAlignment = xlCenter
mais je souhaite comprendre la syntaxe de la première solution
JMB

2 réponses

Gord21 Messages postés 928 Statut Membre 289
 
Bonsoir,
Dans ton code, le Find est en trop. Pour qu'il fonctionne, tu devrais écrire :
Range("A1:B15").Select
With Selection
  .HorizontalAlignment = xlCenter
  .VerticalAlignment = xlBottom
  .WrapText = False
  .Orientation = 0
  .AddIndent = False
  .ShrinkToFit = False
  .MergeCells = False
End With

ou sans sélectionner :
With Range("A1:B15")
  .HorizontalAlignment = xlCenter
  .VerticalAlignment = xlBottom
  .WrapText = False
  .Orientation = 0
  .AddIndent = False
  .ShrinkToFit = False
  .MergeCells = False
End With


Le With...End With évite de devoir répéter le nom de l'objet (dans le second exemple, Range("A1:B15")). Le second exemple est donc équivalent, en terme d'action à :
Range("A1:B15").HorizontalAlignment = xlCenter
Range("A1:B15").VerticalAlignment = xlBottom
Range("A1:B15").WrapText = False
Range("A1:B15").Orientation = 0
Range("A1:B15").AddIndent = False
Range("A1:B15").ShrinkToFit = False
Range("A1:B15").MergeCells = False

L'avantage se note également en terme de rapidité d'éxécution du code. Lors d'une syntaxe avec With, l'objet est évalué une fois et on modifie les propriétés. Dans la syntaxe sans With, l'objet est évalué pour chaque modification de propriété.

Voilà, je pense que c'est clair.

@+
1
STEVENS1962
 
Merci GORD21, ta réponse est très claire et complète.
Merci pour ton aide précieuse.
0
STEVENS1962
 
Merci bien pour ta réponse Gord21 . Elle est très claire et complète.
Merci encore pour ton aide précieuse.
0