Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Lecture et écriture des valeurs de cellule | Travail Avec Les Données Excel
VBA Excel Pour l'Automatisation des Entreprises

Lecture et écriture des valeurs de cellule

Glissez pour afficher le menu

La fonctionnalité la plus basique de VBA consiste à lire et écrire la valeur d'une cellule :

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
 
Debug.Print ws.Range("C2").Value      ' Acme Corp
ws.Range("I2").Value = "Shipped"      ' overwrite the Status cell

Cells(row, column) fait la même chose avec des numéros au lieu de lettres — particulièrement utile lors de l'utilisation de boucles, car une variable de boucle est un nombre, pas une lettre :

Debug.Print ws.Cells(2, 3).Value      ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped"      ' same as Range("I2")

Value vs. Formula vs. Formula2

Ces propriétés semblent interchangeables mais ne le sont pas :

ws.Range("H2").Value                  ' returns the calculated result: 202.5
ws.Range("H2").Formula                ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2               ' like Formula, but supports newer dynamic-array functions
Figure.3.1

Utiliser .Value lorsque seule la valeur numérique est nécessaire. Utiliser .Formula pour écrire une formule dans une cellule — par exemple, pour générer la colonne Total de manière programmatique au lieu de la saisir une fois puis de la copier :

ws.Range("H2").Formula = "=E2*F2*(1-G2)"

NumberFormat

Contrôle l'affichage d'une valeur sans modifier le nombre sous-jacent :

ws.Range("F2:F6").NumberFormat = "$#,##0.00"     ' currency
ws.Range("G2:G6").NumberFormat = "0%"              ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy"      ' date

Cet aspect est plus important qu'il n'y paraît — une cellule peut contenir 0.1 et afficher "10%" en même temps, et seul NumberFormat contrôle cette seconde partie.

Tâche

  1. Écrire une Sub qui lit le client et le total de la commande ORD1003 dans deux variables et les affiche dans une MsgBox.
  2. Modifier le statut de ORD1002 en "Shipped" en utilisant Cells(row, column) au lieu de Range.
  3. Appliquer NumberFormat = "$#,##0.00" aux colonnes Unit Price et Total, et "0%" à la colonne Discount %.
Indice
expand arrow

1. Lecture du client et du total pour ORD1003

  • Commencer par identifier la ligne où se trouve ORD1003 — comptez les lignes du tableau à partir des données d'ouverture du chapitre 3 : ORD1001 est en ligne 2, donc ORD1003 est deux lignes plus bas.
  • Customer et Total sont deux colonnes différentes — comptez les colonnes à partir de la ligne d'en-tête (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) pour trouver la lettre de chacune.
  • Déclarer une variable pour le nom du client (String) et une pour le total (Double), référencer la feuille explicitement comme vu au chapitre 3 (ThisWorkbook.Worksheets("Orders")), puis lire la propriété .Value de chaque cellule dans la variable correspondante.
  • Concaténer les deux variables dans un seul message avec & avant de les passer à MsgBox — vous avez déjà utilisé ce modèle au chapitre 2.

2. Modification du statut de ORD1002 avec Cells(row, column)

  • Cells(row, column) utilise des numéros, pas des lettres — vous savez déjà dans quelle ligne se trouve ORD1002 ; pour la colonne, comptez simplement la position (Status est la neuvième colonne).
  • Il s'agit d'une simple affectation : .Cells(row, column).Value = "Shipped", inutile de lire la valeur avant.

3. Application de NumberFormat à trois colonnes

  • NumberFormat s'applique de la même façon à une plage qu'à une cellule unique — il suffit de l'appliquer à F2:F6, H2:H6 et G2:G6 (vérifiez bien à quelle lettre correspondent Unit Price, Total et Discount % avant de les saisir).
  • Chaque colonne a sa propre ligne, car Unit Price/Total nécessitent un format monétaire et Discount % un format pourcentage — n'essayez pas d'appliquer les deux formats sur une seule ligne.
  • Référencer la plage via la même variable ws déjà définie permet de garder les trois lignes courtes et cohérentes.
Solution
expand arrow
Sub ExploreOrdersData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Read ORD1003's Customer and Total ---
    Dim customerName As String
    Dim orderTotal As Double

    customerName = ws.Range("C4").Value
    orderTotal = ws.Range("H4").Value

    MsgBox "Customer: " & customerName & " | Total: " & orderTotal

    ' --- 2. Change ORD1002's Status using Cells(row, column) ---
    ws.Cells(3, 9).Value = "Shipped"

    ' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
    ws.Range("F2:F6").NumberFormat = "$#,##0.00"   ' Unit Price
    ws.Range("H2:H6").NumberFormat = "$#,##0.00"   ' Total
    ws.Range("G2:G6").NumberFormat = "0%"           ' Discount %
End Sub
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 3. Chapitre 1
some-alt