Excel - Power Query - Power Pivot - VBA

Office Scripts pour Excel : Comparaison avec VBA

Introduction

Ce support de cours présente les concepts fondamentaux d’Office Scripts pour Excel, en établissant des parallèles avec VBA (Visual Basic for Applications). Ce document est conçu pour faciliter la transition des utilisateurs familiers avec VBA vers Office Scripts, la nouvelle solution d’automatisation pour Excel dans le cloud.

Table des matières

1. Présentation générale

Office Scripts

Office Scripts est une technologie d’automatisation moderne pour Excel basée sur TypeScript (sur-ensemble de JavaScript). Elle permet de créer et exécuter des scripts dans Excel Online et est particulièrement adaptée à l’environnement Microsoft 365.

VBA

Visual Basic for Applications (VBA) est le langage de script traditionnel pour les applications Office, utilisé principalement dans les versions bureautiques d’Excel. Il est basé sur Visual Basic et est intégré dans les applications Office depuis des décennies.

2. Configuration de l’environnement

Office Scripts

// Aucune configuration préalable requise
// Accessible via l'onglet Automatiser dans Excel Online
Étapes d’accès :
Ouvrir Excel Online via Microsoft 365
Cliquer sur l’onglet “Automatiser”
Sélectionner “Nouveau script”

VBA

' Nécessite l'activation du développeur
' Sub EnableDeveloper()
' MsgBox "Activer l'onglet Développeur via Fichier > Options > Personnaliser le ruban"
' End Sub
Étapes d’accès :
Activer l’onglet Développeur (Fichier > Options > Personnaliser le ruban)
Cliquer sur “Visual Basic” ou utiliser Alt+F11

3. Structure de base d’un script

Office Scripts

function main(workbook: ExcelScript.Workbook) {
// Le point d'entrée principal de votre script
// workbook représente le classeur actif
let sheet = workbook.getActiveWorksheet();
// Votre code ici
sheet.getRange("A1").setValue("Hello from Office Scripts");
// Pas besoin de sauvegarder explicitement
}

VBA

Sub Main()
' Le point d'entrée principal de votre macro
' ThisWorkbook représente le classeur actif
Dim sheet As Worksheet
Set sheet = ActiveSheet
' Votre code ici
sheet.Range("A1").Value = "Hello from VBA"
' Pas besoin de sauvegarder explicitement
End Sub

4. Variables et types de données

Office Scripts

function main(workbook: ExcelScript.Workbook) {
// Déclaration avec typage explicite
let age: number = 30;
let nom: string = "Jean";
let estActif: boolean = true;
// Déclaration avec inférence de type
let salaire = 50000; // TypeScript infère le type number
// Constantes
const TAUX_TVA = 20; // Ne peut pas être modifiée
// Tableaux
let nombres: number[] = [1, 2, 3, 4, 5];
let noms: string[] = ["Jean", "Marie", "Paul"];
// Objet
let employe = {
id: 101,
nom: "Dupont",
departement: "Marketing"
};
// Type any (similaire à Variant en VBA)
let donnees: any = "texte";
donnees = 42; // Valide car type any
}

VBA

Sub Variables()
' Déclaration explicite (recommandée)
Dim age As Integer
Dim nom As String
Dim estActif As Boolean
age = 30
nom = "Jean"
estActif = True
' Constantes
Const TAUX_TVA As Integer = 20 ' Ne peut pas être modifiée
' Tableaux
Dim nombres(1 To 5) As Integer
nombres(1) = 1
nombres(2) = 2
' Collection
Dim noms As New Collection
noms.Add "Jean"
noms.Add "Marie"
' Type Variant (par défaut si non spécifié)
Dim donnees As Variant
donnees = "texte"
donnees = 42 ' Valide car type Variant
End Sub

Comparaison des types de donnéesOffice Scripts (TypeScript)VBAnumberInteger, Long, Double, SinglestringStringbooleanBooleananyVariantarray[]Array, CollectionobjectType, Class, Dictionaryundefined/nullNothing

5. Opérateurs

Office Scripts

function main(workbook: ExcelScript.Workbook) {
// Opérateurs arithmétiques
let a = 10;
let b = 3;
let somme = a + b; // 13
let difference = a - b; // 7
let produit = a * b; // 30
let quotient = a / b; // 3.333...
let modulo = a % b; // 1
let puissance = a ** b; // 1000 (10^3)
// Opérateurs d'affectation
let x = 5;
x += 3; // x = x + 3
x -= 2; // x = x - 2
// Opérateurs de comparaison
let estEgal = (a == b); // false
let estStrictementEgal = (a === b); // false (vérifie type et valeur)
let estPlusGrand = (a > b); // true
// Opérateurs logiques
let et = (a > 5 && b < 5); // true (les deux conditions sont vraies)
let ou = (a > 20 || b < 5); // true (au moins une condition est vraie)
let non = !(a > b); // false (inverse de true)
}

VBA

Sub Operateurs()
' Opérateurs arithmétiques
Dim a As Integer, b As Integer
a = 10
b = 3
Dim somme As Integer
somme = a + b ' 13
Dim difference As Integer
difference = a - b ' 7
Dim produit As Integer
produit = a * b ' 30
Dim quotient As Double
quotient = a / b ' 3.333...
Dim modulo As Integer
modulo = a Mod b ' 1
Dim puissance As Double
puissance = a ^ b ' 1000 (10^3)
' Opérateurs d'affectation
Dim x As Integer
x = 5
x = x + 3 ' x += 3 n'existe pas en VBA
x = x - 2 ' x -= 2 n'existe pas en VBA
' Opérateurs de comparaison
Dim estEgal As Boolean
estEgal = (a = b) ' False
Dim estPlusGrand As Boolean
estPlusGrand = (a > b) ' True
' Opérateurs logiques
Dim et As Boolean
et = (a > 5 And b < 5) ' True (les deux conditions sont vraies)
Dim ou As Boolean
ou = (a > 20 Or b < 5) ' True (au moins une condition est vraie)
Dim non As Boolean
non = Not (a > b) ' False (inverse de True)
End Sub

6. Structures conditionnelles

Office Scripts

function main(workbook: ExcelScript.Workbook) {
let valeur = 75;
// Structure if simple
if (valeur > 50) {
console.log("La valeur est supérieure à 50");
}
// Structure if...else
if (valeur > 80) {
console.log("La valeur est supérieure à 80");
} else {
console.log("La valeur est inférieure ou égale à 80");
}
// Structure if...else if...else
if (valeur > 90) {
console.log("Excellent");
} else if (valeur > 75) {
console.log("Très bien");
} else if (valeur > 60) {
console.log("Bien");
} else {
console.log("À améliorer");
}
// Opérateur ternaire (if sur une ligne)
let message = (valeur >= 60) ? "Réussite" : "Échec";
// Switch
let grade = "B";
switch (grade) {
case "A":
console.log("Excellent");
break;
case "B":
console.log("Très bien");
break;
case "C":
console.log("Bien");
break;
default:
console.log("Non classé");
break;
}
}

VBA

Sub StructuresConditionnelles()
Dim valeur As Integer
valeur = 75
' Structure If simple
If valeur > 50 Then
Debug.Print "La valeur est supérieure à 50"
End If
' Structure If...Else
If valeur > 80 Then
Debug.Print "La valeur est supérieure à 80"
Else
Debug.Print "La valeur est inférieure ou égale à 80"
End If
' Structure If...ElseIf...Else
If valeur > 90 Then
Debug.Print "Excellent"
ElseIf valeur > 75 Then
Debug.Print "Très bien"
ElseIf valeur > 60 Then
Debug.Print "Bien"
Else
Debug.Print "À améliorer"
End If
' If sur une ligne (forme simplifiée)
Dim message As String
If valeur >= 60 Then message = "Réussite" Else message = "Échec"
' Select Case (équivalent du Switch)
Dim grade As String
grade = "B"
Select Case grade
Case "A"
Debug.Print "Excellent"
Case "B"
Debug.Print "Très bien"
Case "C"
Debug.Print "Bien"
Case Else
Debug.Print "Non classé"
End Select
End Sub

7. Boucles

Office Scripts

function main(workbook: ExcelScript.Workbook) {
// Boucle for (itération avec compteur)
for (let i = 0; i < 5; i++) {
console.log("Itération " + i);
}
// Boucle while (tant que condition vraie)
let compteur = 0;
while (compteur < 5) {
console.log("Compteur: " + compteur);
compteur++;
}
// Boucle do...while (exécute au moins une fois)
let j = 0;
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.