WITH - END WITH

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

  • Votes
  • Date
  • Date décroissante
  1. Merci bien pour ta réponse Gord21 . Elle est très claire et complète.
    Merci encore pour ton aide précieuse.
    1. 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. Merci GORD21, ta réponse est très claire et complète.
        Merci pour ton aide précieuse.