Médiaforma

posts

Il est également possible d’affecter des couleurs d’arrière-plan aux cellules en fonction de leurs valeurs. Voici le code utilisé :

async function echelle() {

  await Excel.run(async (context) => {

    const plage = context.workbook.worksheets.getActiveWorksheet().getRange("B2:C5");

    const condFormat = plage.conditionalFormats.add(Excel.ConditionalFormatType.colorScale);

    const critere = {

      minimum: {

        formula: null,

        type: Excel.ConditionalFormatColorCriterionType.lowestValue,

        color: "green"

      },

      midpoint: {

        formula: 50,

        type: Excel.ConditionalFormatColorCriterionType.percent,

        color: "yellow"

      },

      maximum: {

        formula: null,

        type: Excel.ConditionalFormatColorCriterionType.highestValue,

        color: "red"

      }

    };

    condFormat.colorScale.criteria = critere;

  });

}

Après avoir récupéré la plage sur laquelle la mise en forme conditionnelle doit être appliquée :

const plage = context.workbook.worksheets.getActiveWorksheet().getRange("B2:C5");

On lui ajoute une mise en forme conditionnelle de type colorScale :

const condFormat = plage.conditionalFormats.add(Excel.ConditionalFormatType.colorScale);

Le bloc de code suivant définit les critères de mise en forme.

La constante utilisée est un objet JSON qui définit les clés minimum, midpoint et maximum :

const critere = {

  minimum: {},

  midpoint: {},

  maximum: {}

}

La clé minimum correspond au point minimal du critère d’échelle de couleurs. La clé maximum correspond au point maximal du critère d’échelle de couleurs et la clé midpoint au point intermédiaire.

Ces trois clés sont des objets JSON qui définissent les clés formula, type et color :

  • formula est une formule du type 0, <15, >=100 ou la valeur null si le critère ne nécessite aucune formule.
  • type est un des types suivants : invalid, lowestValue, highestValue, number, percent, formula ou percentile.
  • color est la couleur d’arrière-plan exprimée sous la forme d’une chaîne.

Dans cet exemple :

  • Les valeurs minimales (type lowestValue) seront affichées en vert.
  • Les valeurs maximales (type highestValue) seront affichées en rouge.
  • Les valeurs médianes (type percent, formula 50) seront affichées en jaune.

Une fois que le critère a été défini, il est appliqué à la plage :

condFormat.colorScale.criteria = critere;

Voici le résultat :

Pour choisir quelles barres d’outils sont visibles, déroulez le menu Affichage, pointez l’entrée Barres d’outils et cliquez sur les commandes qui correspondent aux barres d’outils que vous voulez afficher ou cacher. Lorsque vous cliquez sur une entrée qui est précédée d’une coche, la barre d’outils correspondante disparaît. Inversement, lorsque vous cliquez sur une entrée qui n’est pas précédée d’une coche, la barre d’outils correspondante est affichée :

Les barres d’outils peuvent être ancrées dans la partie supérieure, inférieure, gauche ou droite de la fenêtre de Writer ou être transformées en des palettes flottantes, librement déplaçables sur l’écran.

Pour transformer une barre d’outils en une palette flottante, pointez les pointillés qui apparaissent à l’extrême gauche de la barre d’outils, maintenez le bouton gauche de la souris enfoncé et déplacez la barre d’outils ou bon vous semble. La transformation s’effectue au relâchement du bouton gauche de la souris :

Pour ancrer une barre d’outils dans la partie supérieure, inférieure, gauche ou droite de la fenêtre de Writer, pointez les pointillés qui apparaissent à l’extrême gauche de la barre d’outils, maintenez le bouton gauche de la souris enfoncé et déplacez la barre d’outils vers un de ses points d’ancrage. Ici par exemple dans la partie gauche de la fenêtre. Le déplacement s’effectue au relâchement du bouton gauche de la souris :

Enfin, pour transformer une palette flottante en une barre d’outils, il suffit de double-cliquer dans sa barre de titre.

Non content de pouvoir être déplacées ou transformées en palettes flottantes, les barres d’outils sont également personnalisables. Lancez la commande Personnaliser dans le menu Outils. La boîte de dialogue Personnaliser s’affiche. Basculez sur l’onglet Barres d’outils. La boîte de dialogue est assez similaire à celle de l’onglet Menus.

Sélectionnez LibreOffice Writer ou votre document dans la liste déroulante supérieure droite (1) selon si vous voulez impacter tous les documents ou seulement le document en cours d’édition. Choisissez la barre d’outils que vous voulez modifier dans la deuxième liste déroulante (2).

La zone de liste inférieure (6) dresse la liste des icônes qui peuvent apparaître dans la barre d’outils sélectionnée. Cochez la case qui précède une icône pour la faire apparaître, décochez-la pour la cacher.

Si les icônes proposées par défaut ne sont pas suffisantes, vous pouvez en ajouter d’autres. Assurez-vous que l’entrée Toutes les commandes est sélectionnée dans la liste déroulante Catégorie (4). Sélectionnez l’icône que vous voulez ajouter dans la zone de liste Fonction (5) et cliquez sur la flèche orientée vers la droite (6). L’entrée sélectionnée se retrouve dans la zone de liste de droite (3). Ici par exemple, nous insérons l’icône 100% dans la barre d’outils Standard. Utilisez les flèches vers le haut ou vers le bas pour la positionner à l’endroit souhaité puis cliquez sur OK.

Désormais, l’icône 100% fait partie de la barre d’outils Standard :

Pour créer une nouvelle image, lancez la commande Nouveau dans le menu Fichier, cliquez sur l’icône Nouveau de la barre d’outils ou utilisez le raccourci clavier Ctrl+N. Quelle que soit la technique utilisée, la boîte de dialogue Nouveau s’affiche. Définissez les dimensions et la résolution de l’image. SI vous le préférez, vous pouvez choisir une taillé prédéfinie dans la liste. L’arrière-plan peut être coloré avec une couleur unie, transparent ou utiliser un motif de fond. Dans le premier cas, choisissez la couleur d’arrière-plan dans la liste Fond. Dans le deuxième cas, cochez la case Transparence automatique. Enfin, dans le troisième cas, décochez  la case Transparence automatique, cochez la case Motif de fond et faites votre choix dans la liste déroulante.

Créer une image

Remarque

PhotoFiltre mémorise les réglages effectués dans la boîte de dialogue Nouveau et les propose par défaut lorsque vous créez une nouvelle image.

Avec Calc, vous pouvez facilement comparer deux versions d’un même classeur ou deux classeurs dont le contenu est proche. Voici comment procéder :

Ouvrez la première version du classeur.

Lancez la commande Comparer le document dans le menu Edition. La boîte de dialogue Comparer à s’affiche. Désignez la deuxième version du classeur.

Quelques instants plus tard, les différences entre le premier et le deuxième classeur apparaissent dans le premier classeur sous la forme de marques de révision et la boîte de dialogue Gérer les modifications s’affiche. Utilisez cette boîte de dialogue pour modifier ou non la première feuille en fonction de la seconde :

Voyons maintenant comment afficher les nombres négatifs en rouge. Voici le code utilisé :

async function negatifEnRouge() {

  await Excel.run(async (context) => {

    const plage = context.workbook.worksheets.getActiveWorksheet().getRange("B2:C5");

    const condFormat = plage.conditionalFormats.add(Excel.ConditionalFormatType.cellValue);

    condFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" };

    condFormat.cellValue.format.font.color = "red";

  });

}

Après avoir récupéré la plage sur laquelle on désire appliquer la mise en forme conditionnelle :

const plage = context.workbook.worksheets.getActiveWorksheet().getRange("B2:C5");

On ajoute une mise en forme conditionnelle en fonction de la valeur des cellules (cellValue) sur la plage :

const condFormat = plage.conditionalFormats.add(Excel.ConditionalFormatType.cellValue);

Puis on définit la règle de mise en forme dans la propriété rule :

condFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" };

Cette propriété est un objet JSON composé de deux ou trois couples clé/valeur :

{

  formula1: 'form1',

  formula2: 'form2',

  operator: 'op'

}

Les formules sont du type =0, >=15, <0, etc..

L’opérateur est un des suivants : Invalid, Between, NotBetween, EqualTo, NotEqualTo, GreaterThan, LessThan, GreaterThanOrEqual ou LessThanOrEqual.

Dans cet exemple, on comprend que la mise en forme conditionnelle concerne les cellules dont la valeur est inférieure à zéro :

{ formula1: "=0", operator: "LessThan" }

La dernière instruction définit la couleur à affecter aux cellules lorsque la condition est vérifiée :

condFormat.cellValue.format.font.color = "red";

Voici le résultat :

Si vous utilisez un compte de courrier Office 365, Microsoft Exchange ou Outlook, la boîte de réception contient deux onglets : Prioritaire et Autres :

Ce mode d’organisation des messages peut être facilement activé ou désactivé. Basculez sur l’onglet Affichage du ruban et utilisez l’icône Afficher la boîte de réception Prioritaire du groupe Boîte de réception prioritaire pour choisir les onglets à afficher dans la boîte de réception : Prioritaire et Autres ou Tous et Non lus.

L’onglet Prioritaire rassemble les courriers qui sont le plus importants à vos yeux, tandis que le reste du courrier électronique (les newsletter et les messages publicitaires par exemple) reste facilement accessible dans l’onglet Autres. Lorsqu’un courrier arrive dans la boîte de réception Autres, vous êtes prévenu dans la partie supérieure de l’onglet Prioritaire. Bien entendu, vous pouvez à tout moment accéder au courrier non prioritaire en basculant sur l’onglet Autres :

Si vous pensez qu’un message affiché dans l’onglet Autres doit s’afficher dans l’onglet Prioritaire, cliquez dessus avec le bouton droit de la souris et choisissez Déplacer vers Prioritaire dans le menu contextuel. Inversement, si vous pensez qu’un message affiché dans l’onglet Prioritaire doit s’afficher dans l’onglet Autres, cliquez dessus avec le bouton droit de la souris et choisissez Déplacer vers Autres dans le menu contextuel.

En programmation, il est souvent nécessaire d’exécuter une portion de code plusieurs fois de suite. La répétition des instructions peut se produire un certain nombre de fois connu à l’avance ou tant qu’une condition est vérifiée. Cet article passe en revue les principales instructions de bouclage du langage VBA.

La boucle For … Next

Lorsque le nombre de répétitions est connu à l’avance, le plus simple est d’utiliser une boucle For … Next. Voici sa syntaxe :

For compteur = début To Fin Step pas

  ' Une ou plusieurs instructions

Next compteur

Compteur est une variable qui commence à début et finit à fin en progressant de pas à chaque itération de la boucle.

Remarque

Si la partie Step pas n’est pas précisée, la variable compteur va de début à fin par pas de 1.

Quelques exemples pour mieux comprendre.

Supposons que vous vouliez remplir les cellules A1 à H1 avec les valeurs 1 à 8. Voici le code à utiliser :

Dim i As Integer

For i = 1 to 8

  Cells(1, i) = i

Next i

Ici, nous utilisons la méthode Cells() en précisant le numéro de ligne et le numéro de colonne. Voici le résultat :

Supposons maintenant que vous vouliez remplir les cellules C3 à C12 avec les valeurs « a » à « j« . Voici le code à utiliser :

Dim i As Integer

For i = 3 To 12

  Cells(i, 3) = Chr(97 + i - 3)

Next i

Ici, nous utilisons la méthode Cells() en précisant le numéro de ligne (i, qui va de 3 à 12) et le numéro de colonne (fixe et égal à 3). La méthode Chr() convertit le code ASCII passé en argument en un caractère. Pour arriver au résultat souhaité, le code ASCII de la lettre « a » a été cherché dans un tableau de codes ASCII. Par exemple sur la page http://www.table-ascii.com/ :

Etant donné que i varie de 3 à 12, la formule à utiliser est 97 + i – 3. L’argument de la fonction Chr() va donc de 97 (pour i = 3) à 106 (pour i = 12).

Voici le résultat :

Supposons maintenant que vous vouliez remplir le bloc de cellules A3-C9 comme ceci :

Comment feriez-vous ?

Observez la progression numérique dans les cellules. Les valeurs vont de 1 à 21, et on change de ligne toutes les trois cellules.

Pour faire simple, nous allons imbriquer deux boucles : une pour les lignes et une pour les colonnes. Voici le code :

Dim i, j As Integer

For i = 0 To 6

  For j = 1 To 3

    Cells(i + 3, j) = j + i * 3

  Next j

Next i

La boucle la plus extérieure s’intéresse aux lignes et la boucle la plus intérieure aux colonnes. Les index des boucles ont été choisis pour simplifier au maximum la formule.

Lors de la première exécution de la boucle extérieure, i vaut 0 et j va de 1 à 3. La formule :

Cells(i + 3, j) = j + i * 3

Cible donc les cellules A3, B3 puis C3. Et la valeur affectée à ces cellules est 1, 2 et 3. Si vous ne voyez pas ce que je veux dire, simulez le fonctionnement de la boucle interne en remplaçant j par 1, 2 puis 3 et voyez le résultat. Vous obtenez :

  • Pour i=0 et j=1 : Cells(3,1) = 1, soit A3 = 1
  • Pour i=0 et j=2 : Cells(3,2) = 2, soit B3 = 2
  • Pour i=0 et j=3 : Cells(3,3) = 3, soit C3 = 3

Lorsque la boucle interne a fini de s’exécuter, la boucle externe incrémente la valeur de i, qui passe de 0 à 1. La formule :

Cells(i + 3, j) = j + i * 3

Cible alors les cellules A4, B4 et C4 et leur affecte (respectivement) les valeurs 4, 5 et 6.

La progression de i et de j se poursuit jusqu’à ce que ces index dépassent les valeurs maximales fixées à 6 et 3. Les deux boucles prennent alors fin et la plage A3-C9 est entièrement remplie.

Un dernier exemple pour illustrer l’utilisation d’un pas de progression. Supposons que vous vouliez obtenir le résultat suivant :

Plusieurs approches sont possibles, mais une des plus simples consiste certainement à utiliser un pas de progression négatif dans la boucle :

Dim i As Integer

For i = 12 To 2 Step -2

  Cells(1, i / 2) = i

Next i

Ici, la variable i passe de 12 à 2 par pas de -2. Elle vaut donc successivement 12, 10, 8, 6, 4, puis 2.

La formule :

Cells(1, i / 2) = i

Cible les cellules situées en ligne 1 et en colonne 6 (12/2), 5 (10/2), 4 (8/2), 3 (6/2), 2 (4/2) puis 1 (2/2). La valeur de i est affectée à ces cellules, ce qui donne bien le résultat attendu.

Dans certaines boucles, on ne sait pas à l’avance combien de fois les instructions seront exécutées. Dans ce cas, la boucle For … Next n’est pas appropriée. Vous utiliserez plutôt une boucle While … Wend, Do While … Loop, Do … Loop While ou Do Until … Loop.

La boucle While … Wend

La boucle While … Wend est exécutée tant qu’une condition est vérifiée. Voici sa syntaxe :

While condition

  ' Une ou plusieurs instructions

Wend

Par exemple, pour remplir les cellules A1 à H1 avec les chiffres 1 à 8 avec une boucle While … Wend, comme dans la copie d’écran suivante :

Vous pourriez utiliser ces instructions :

Dim i As Integer

i = 1

While i < 9

  Cells(1, i) = i

  i = i + 1

Wend

Ces instructions peuvent sembler plus complexes que celles utilisées dans la boucle For … Next équivalente. Examinons-les pas à pas.

  • La variable i est déclarée en tant qu’Integer et initialisée à 1.
  • La boucle se poursuit tant que i est inférieur à 9.
  • Les cellules de la ligne 1 et de la colonne 1 à 8 sont alors ciblées avec la méthode Cells() et on leur affecte la valeur de la variable i, c’est-à-dire 1 à 8.
  • La variable i est incrémentée d’un à chaque passage dans la boucle avec l’instruction i = i + 1.

Vous voyez, il n’y a rien de bien compliqué.

La boucle Do While … Loop

Nous allons maintenant utiliser une boucle Do While … Loop pour obtenir le même résultat que dans la boucle While … Wend précédente. Voici le code utilisé :

Dim i As Integer

i = 1

Do While i < 9

  Cells(1, i) = i

  i = i + 1

Loop

Le code est strictement équivalent. Il n’y a que l’écriture qui change.

La boucle Do … Loop While

Voyons maintenant comment utiliser une boucle Do … Loop While pour obtenir le même résultat. Voici le code utilisé :

Dim i As Integer

i = 1

Do

  Cells(1, i) = i

  i = i + 1

Loop While i < 9

Ici, la condition de fin de boucle est testée en fin de boucle. Quelle que soit la valeur de i, la boucle s’exécute donc au moins une fois. Mis à part cette légère différence, le code est très semblable à celui utilisé dans les boucles précédentes.

La boucle Do Until … Loop

Voyons enfin comment utiliser une boucle Do Until … Loop pour arrive au même résultat. Voici le code utilisé :

Dim i As Integer

i = 1

Do Until i > 8

  Cells(1, i) = i

  i = i + 1

Loop

Ici, le test de fin de boucle est effectué en début de boucle. La boucle prend fin quand i est supérieur à 8 (et non tant que i est inférieur à 9 comme dans les autres boucles). Mis à part ce détail, le code est similaire à celui utilisé dans les autres boucles.

Maintenant que vous connaissez les différentes boucles utilisables en VBA, vous devrez trouver celle qui est la plus appropriée à chaque cas que vous devrez traiter…

Quitter une boucle prématurément

Cet article ne serait pas complet si nous ne parlions pas des sorties prématurées des boucles. Rien de bien sorcier rassurez-vous.

Supposons que lorsqu’une condition est vérifiée, vous vouliez terminer la boucle. Dans ce cas, vous utiliserez une des instructions suivantes :

Boucle Instruction pour sortir de la boucle
For … Next Exit For
While … Wend Exit While
Do While … Loop Exit Do
Do … Loop While Exit Do
Do Until … Loop Exit Do