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

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