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
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
- Écrire une
Subqui lit le client et le total de la commande ORD1003 dans deux variables et les affiche dans uneMsgBox. - Modifier le statut de ORD1002 en "Shipped" en utilisant Cells(row, column) au lieu de Range.
- Appliquer
NumberFormat = "$#,##0.00"aux colonnes Unit Price et Total, et "0%" à la colonne Discount %.
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é.Valuede 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
NumberFormats'applique de la même façon à une plage qu'à une cellule unique — il suffit de l'appliquer àF2:F6,H2:H6etG2: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
wsdéjà définie permet de garder les trois lignes courtes et cohérentes.
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
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion