Manipuler les cellules en VBA avec l’objet Range [#21 FORMATION EXCEL VBA COMPLETE]

Dans ce nouveau chapitre de la formation sur l’apprentissage de VBA, nous allons découvrir comment manipuler l’un des objets les plus essentiels des macros en VBA, il s’agit de l’objet Range qui permet de manipuler des cellules ou des plages de plusieurs cellules.

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

Partie 1 : 4 METHODES POUR INSERER LA DATE DU JOUR RAPIDEMENT DANS UNE CELLULE SUR EXCEL (avec et sans VBA) (voir le tutoriel)

Partie 2 : ENREGISTRER LES HEURES DE REALISATION DES EVENEMENTS SUR LES FEUILLES EXCEL (voir le tutoriel)

Partie 3 : DECOUVRONS QUELQUES OBJETS RANGE PARTICULIERS DE VBA (voir le tutoriel)

Partie 4 : UTILISER LES COPIER/COLLER EN VBA (voir le tutoriel)

Partie 5 : AUTRES MOYENS DE MANIPULER DES CELLULES EN VBA (voir le tutoriel)

 

1. Qu’est-ce que l’objet Range

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

______________________________________________

S’il ne doit y avoir qu’un seul sous-objet à connaître en VBA, il s’agit bien évidemment de l’objet Range qui nous intéresse justement dans ce chapitre !

En effet, celui-ci permet de manipuler une cellule ou un groupe de plusieurs cellules contenues dans les feuilles de calcul Excel, afin de réaliser toutes les opérations qui vont nous intéresser dans le cadre du développement de macros en VBA :

  • Sélectionner une ou plusieurs cellules,
  • Modifier leur valeur,

 

2. Comment utiliser l’objet Range

Pour manipuler une cellule en VBA, nous spécifions les coordonnées en tant qu’argument de la fonction.

Dans les exemples à venir, nous allons utiliser la procédure de l’objet Range : Select. Comme vous pouvez vous en douter, celle-ci permet de sélectionner les cellules spécifiées en argument.

 

   2.1. Sélectionner une cellule

 

Sheets("21-Range").Range("A8").Select  ' Sélectionner la cellule A8

 

Pour sélectionner une seule cellule, il suffit de saisir ces coordonnées entre guillemets (cette coordonnée est en effet une chaîne de caractères) :

Excel formation - VBA21 - objet Range - 01

 

   2.2. Sélectionner un groupe de cellules contiguës

 

 

 Sheets("21-Range").Range("A8:B10").Select ' Sélectionner  les cellules A8 a B10

 

Pour sélectionner plusieurs cellules accolées les unes aux autres, nous saisissons les coordonnées de la première et de la dernière, en les séparant par deux points (comme nous le ferions pour une formule Excel) :

Excel formation - VBA21 - objet Range - 02

 

   2.3. Sélectionner un groupe de cellules non contiguës

 

 

 Sheets("21-Range").Range("A8,C5,D14").Select '  Sélectionner les cellules A8, C5 et D14

 

Lorsque les cellules non sont pas collées les unes aux autres, nous séparons les coordonnées de chacune d’entre elles par une virgule (la virgule remplace le point-virgule que nous utilisons dans les formules Excel) :

 

Excel formation - VBA21 - objet Range - 03

 

   2.4. Sélectionner des colonnes entières

 

 

Sheets("21-Range").Range("B:D").Select  ' Sélectionner les colonnes B à D

 

Pour sélectionner des colonnes entières, nous saisissons les lettres correspondantes

Excel formation - VBA21 - objet Range - 04

 

   2.5. Sélectionner des lignes entières

 

 

Sheets("21-Range").Range("8:10").Select  ' Sélectionner les lignes 8 à 10

 

Pour sélectionner des colonnes entières, nous saisissons les chiffres correspondants

Excel formation - VBA21 - objet Range - 05

 

3. La propriété Value

La propriété par défaut de l’objet range est la propriété Value, celle-ci permet de lire ou de modifier la valeur de la cellule (ou des cellules).

Nous pouvons ainsi facilement afficher dans une MsgBox la valeur d’une cellule :

 

MsgBox  Sheets("21-Range").Range("A3").Value ' Afficher le contenu  de la cellule A3

 

Excel formation - VBA21 - objet Range - 06

Attention, nous ne pouvons lire le contenu que d’une unique cellule ! Dans le cas contraire, cela provoquera évidemment une erreur d’exécution :

Excel formation - VBA21 - objet Range - 07

La propriété Value permet également de modifier le contenu d’une cellule en utilisant simplement le signe égal :

 

 Sheets("21-Range").Range("A8").Value = "Hello" '  Modifier la valeur de la cellule A8

 

Excel formation - VBA21 - objet Range - 08

En tant que propriété par défaut, celle-ci est d’ailleurs facultative, nous pouvons tout aussi bien saisir :

 

Sheets("21-Range").Range("A8") =  "Hello" ' Modifier la valeur de la cellule A8

 

Enfin, s’il est impossible de lire simultanément le contenu de plusieurs cellules, il est tout à fait possible de modifier les valeurs affectées à plusieurs cellules :

 

Sheets("21-Range").Range("A8:C10")  = "Hello" ' Modifier la valeur de la cellule A8

 

Excel formation - VBA21 - objet Range - 09

 

4. La propriété Formula

La propriété Value que nous venons de découvrir permet de saisir (ou de lire) une valeur à une cellule, nous pouvons également utiliser celle-ci pour saisir une formule :

 

 Sheets("21-Range").Range("A8").Value = "=NOW()" '  Afficher la date et l'heure

 

Comme vous pouvez le voir dans cet exemple, lorsque nous tapons la formule dans VBA, nous devons saisir celle-ci dans le langage natif d’Excel qui est le langage anglo-saxon. La formule MAINTENANT() est donc remplacée par son équivalent correspondant : la formule NOW().

Excel formation - VBA21 - objet Range - 10

Pour autant, lorsque nous nous rendons sur la feuille de calcul, celle-ci est bien saisie dans le langage du système, ici en français !

Maintenant, même si nous venons de voir dans cet exemple, qu’il est tout à fait possible d’utiliser kla propriét Value pour saisir une formule dans une cellule, il est préférable d’utiliser la propriété qui est spécialement dédiée : il s’agit de Formula :

 

 Sheets("21-Range").Range("A8").Formula = "=NOW()"  ' Afficher la date et l'heure

 

Ici, l’effet sera exactement le même, c’est-à-dire que la formule MAINTENANT() va être correctement insérée dans la cellule A8.

En revanche, la différence va intervenir lorsque nous allons souhaiter récupérer le contenu de la cellule :

 

    Debug.Print  Sheets("21-Range").Range("A8").Value ' Résultat :  19/02/2020 18:34:23
        Debug.Print  Sheets("21-Range").Range("A8").Formula ' Résultat : =NOW() 

 

Nous pouvons ainsi constater que lorsque nous utilisons la propriété Value, nous récupérons la valeur de la cellule, tandis que la propriété Formula permet évidemment de récupérer la formule de celle-ci (exprimé dans la langue anglo-saxonne).

En revanche, lorsque la cellule ne contient pas de formule, mais directement une valeur saisie en dure, alors les deux solutions permettrons de récupérer le contenue de celle-ci d’une manière analogue :

 

    Debug.Print  Sheets("21-Range").Range("A3").Value ' Résultat : L'objet  Range [#21 FORMATION EXCEL VBA COMPLETE]
        Debug.Print  Sheets("21-Range").Range("A3").Formula ' Résultat : L'objet  Range [#21 FORMATION EXCEL VBA COMPLETE]

 

 

5. La propriété NumberFormat

VBA va nous permettre de modifier simplement le format appliqué à une cellule en utilisant la propriété NumberFormat :

 

 Sheets("21-Range").Range("A8").NumberFormat =  "hh:mm" ' Afficher l'heure

 

Ici encore, nous devront être attentif lors de la mise en place de celui-ci qui doit correspondre au format anglo-saxon :

 

 Sheets("21-Range").Range("A8").NumberFormat =  "dd/mm/yyyy" ' Afficher la date

 

Ainsi le format jj/mm/aaaa devient dd/mm/yyyy (« d » pour day et « y » pour year).

Lorsque nous souhaitons utiliser un format complexe et dont nous ne connaissons pas l’équivalent anglo-saxon, nous pouvons utiliser la propriété NumberFormat en procédant de la manière suivante :

  • Nous commençons par sélectionner la cellule qui nous intéresse dans la feuille de calcul, puis nous effectuons un clic-droit > Format de cellule :

Excel formation - VBA21 - objet Range - 11

  • Dans la fenêtre de personnalisation du Format de Cellule, nous pouvons choisir un format pré-enregistré, ou bien créer un format de toute pièce depuis le menu Personnalisé :

Excel formation - VBA21 - objet Range - 12

  • Puis nous validons la création du format en appuyant sur le bouton OK

Excel formation - VBA21 - objet Range - 13

Il ne nous reste alors plus qu’à récupérer celui-ci en affichant le format directement depuis la fenêtre d’exécution pour en effectuer un copier-coller :

 

Debug.Print Sheets("21-Range").Range("A8").NumberFormat  ' Afficher le format de la cellule A8

 

Excel formation - VBA21 - objet Range - 14

Et enfin un collage :

Excel formation - VBA21 - objet Range - 15

6. La propriété Text

La dernière propriété que nous allons découvrir dans cette partie de la formation est la propriété Text.

Celle-ci permet de récupérer la chaîne qui est saisie dans une cellule, comme celle-ci est affiché à l’écran, c’est-à-dire avec le formatage qui lui est affecté :

 

msgbox  Sheets("21-Range").Range("A8").text ' Afficher le contenu  de la cellule A8 tel qu'il est affiché

 

Excel formation - VBA21 - objet Range - 16

Pour finir, voici une synthèse des propriétés que nous venons de découvrir dans ce chapitre qui permettent de récupérer des informations d’une cellule :

Excel formation - VBA21 - objet Range - 17

Et voilà c’est tout cette présentation de l’objet Range, qui nous a permis de faire un rapide tours d’horizon des possibilités offertes, afin de pouvoir déjà commencer à manipuler les cellules contenues dans une feuille de calcul.

Mais comme vous pouvez vous en douter, il reste encore de très nombreuses propriétés et méthodes à découvrir dès la semaine prochaine. Nous y verrons notamment comment modifier le format de cellule (couleur, police,…) effectuer des copier / coller, comment supprimer des cellules,…

 

7. Personnaliser la mise en forme d’une cellule

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

______________________________________________

Au cours du début de ce chapitre, nous avons découvert comment manipuler simplement des cellules en utilisant VBA, et plus particulièrement l’objet Range.

Maintenant que nous savons comment modifier le contenu d’une ou plusieurs cellules (lire ou modifier la valeur de la cellule, une formule, le formatage des valeurs numériques, …), voyons comment modifier l’apparence d’une cellule (taille de texte, police de caractères, gras, souligné, couleur, bordures, …).

 

   7.1. Modifier la mise en forme du texte d’une cellule : police de caractères, taille,…

 

La modification de la mise en forme des textes de cellules passe par la propriété Font de l’objet Range.

Il suffit de commencer à saisir celle-ci pour en découvrir l’ensemble des sous-propriété mise à disposition pour pouvoir personnaliser profondément l’apparence donnée aux textes saisis dans la cellule :

Excel formation - VBA21 - objet Range - 18

Comme vous pouvez le constater, cette propriété permet de modifier énormément de paramètres. Dans cette partie, nous allons analyser les principaux éléments à maîtriser.

Pour modifier plusieurs éléments en série, nous allons utiliser l’élément With que nous découvrirons dans un prochain chapitre de la formation.

Sachez juste que celui-ci permet d’exécuter une série d’instructions qui font référence à un objet déterminé. Il ne sera ainsi plus nécessaire de ressaisir cet objet par la suite.

Ainsi, lorsque nous saisissons :

 

    With Sheets("21-Range").Range("a8").Font
    
    End With

 

Il suffira de saisir une sous-propriété de Font en commençant un point, pour qu’Excel comprenne que nous souhaitons intervenir sur cette propriété en particulier.

Cette méthode de développement permet de gagner du temps lors de la saisie du code, et permet également de rendre ce dernier plus clair et plus agréable à lire.

 

Modifier la police de caractères de la cellule A8 :

Ainsi pour affecter une police Arial à la cellule A8, nous utiliserons la propriété Name :

 

    With  Sheets("21-Range").Range("a8").Font
        .Name = "Arial"
    End With

 

Pour affecter une valeur cette propriété, nous utilisons simplement le symbole égal, suivi du nom de la police de caractère entre guillemets.

Excel formation - VBA21 - objet Range - 19

 

Modifier la taille du texte de la cellule A8 :

Ensuite, pour modifier la taille du texte, nous utiliserons la propriété Size :

 

    With  Sheets("21-Range").Range("a8").Font
        .Name = "Arial"
        .Size = 10
    End With

 

Excel formation - VBA21 - objet Range - 20

 

Afficher le texte en gras :

Pour afficher le texte de la cellule en gras, nous allons intervenir sur la propriété Bold (« bold » signifiant « gras »).

Par défaut, cette propriété a pour valeur False (« faux »), nous affectons alors la valeur True (« vrai ») à cette propriété :

 

    With  Sheets("21-Range").Range("a8").Font
        .Name = "Arial"
        .Size = 10
        .Bold = True
    End With

 

Excel formation - VBA21 - objet Range - 21

 

Afficher le texte en italique :

Pour afficher le texte de la cellule en italique, nous procédons de la même manière avec la propriété Italic (inutile de traduire celle-ci !).

 

    With  Sheets("21-Range").Range("a8").Font
        .Name = "Arial"
        .Size = 10
        .Bold = True
        .Italic = True
    End With

 

Excel formation - VBA21 - objet Range - 22

 

Souligner le texte :

En revanche, le soulignement du texte de la cellule suit une méthode légèrement différente, afin de pouvoir préciser quel type de soulignement nous souhaitons mettre en place :

Excel formation - VBA21 - objet Range - 23

Pour un soulignement simple, la propriété Underline prend pour valeur xlUnderlineStyleSingle :

 

    With  Sheets("21-Range").Range("a8").Font
        .Name = "Arial"
        .Size = 10
        .Bold = True
        .Italic = True
        .Underline = xlUnderlineStyleSingle
    End With

 

Excel formation - VBA21 - objet Range - 24

La valeur xlUnderlineStyleDouble permet de doubler le soulignement :

Excel formation - VBA21 - objet Range - 25

Il est également possible de souligner, non pas simplement les textes saisis dans la cellule, mais l’ensemble de l’espace disponible dans la cellule (blancs compris), en utilisant les valeurs xlUnderlineStyleSingleAccounting (trait simple) et xlUnderlineStyleDoubleAccounting (trait doublé) :

Excel formation - VBA21 - objet Range - 26

Enfin, sachez qu’il est également possible d’utiliser la valeur True, et dans ce cas, la propriété Underline prend sa valeur par défaut, c’est-à-dire xlUnderlineStyleSingle (ces deux valeurs sont donc identiques) :

 

        .Underline = True

 

Excel formation - VBA21 - objet Range - 27

De la même manière, nous pouvons désactiver le soulignement de deux manières différentes (xlUnderlineStyleNone est équivalent à False) :

 

        .Underline = False

 

 

Bien entendu, l’ensemble des propriétés que nous venons de voir ici sont également accessible en lecture :

Excel formation - VBA21 - objet Range - 28

Cela permet également de dupliquer rapidement la mise en forme d’une cellule sur une autre cellule :

 

Sheets("21-Range").Range("a9").Font  = Sheets("21-Range").Range("a8").Font

 

Excel formation - VBA21 - objet Range - 29

 

   7.2. Modifier la couleur du texte

 

La modification de la couleur du texte de la cellule découle également de la propriété Font de l’objet Range :

Excel formation - VBA21 - objet Range - 30

Comme le montre cette capture, deux propriétés sont disponibles pour y parvenir :

  • La propriété ColorIndex : il s’agit de la propriété la plus simple que nous pouvons utiliser, en effet celle-ci nécessite seulement de saisir un nombre compris entre 1 et 56. Chacun de ces nombres correspondent à un index de couleur pré-enregistré :
  • Excel formation - VBA21 - objet Range - 31
  • La propriété Color est un peu plus complexe à utiliser, mais permet d’obtenir un résultat beaucoup précis. En effet, celle-ci consiste à donner comme valeur la couleur exacte que nous souhaitons obtenir, et pour cela, nous pouvons par exemple utiliser la fonction VBA RGB() qui retour une valeur de couleur en fonction des couleurs RGB que nous spécifions en paramètres (valeurs comprises entre 1 et 255).

Ainsi les solutions suivantes vont être strictement identiques :

    ' Afficher le texte en noir :
    Range("A8").Font.ColorIndex = 1
    Range("A9").Font.Color = RGB(1, 1, 1)
    
    ' Afficher le texte en blanc :
    Range("A8").Font.ColorIndex = 2
    Range("A9").Font.Color = RGB(255, 255, 255)
    
    ' Afficher le texte en bleu :
    Range("A8").Font.ColorIndex = 23
    Range("A9").Font.Color = RGB(0, 102, 204) 

 

Excel formation - VBA21 - objet Range - 32

Notez que l’utilisation de la fonction RGB est uniquement là pour nous aider à trouver la bonne couleur, nous pourrions directement saisir la couleur correspondante si nous la connaissons :

 

    Range("A9").Font.Color = 16777215

 

Et bien évidemment, la propriété Color permet d’obtenir des variations de couleurs qui ne figurent pas dans l’index des couleurs d’Excel :

 

     ' Afficher le texte en bordeau :
    Range("A9").Font.Color = RGB(158, 2, 52)    ' Afficher le texte en cyan :
    Range("A9").Font.Color = RGB(15, 200, 181)

 

 

   7.3. Modifier la couleur de fond d’une cellule

 

Pour modifier la couleur de fond d’une cellule, nous allons utiliser les concepts de gestion des couleurs que nous venons de voir, mais que nous allons appliquer sur la propriété Interior de l’objet Range :

 

    ' Modification des couleurs de fond de cellule
    Range("A8").Interior.ColorIndex = 12
    Range("A9").Interior.Color = RGB(100, 100,  100)
   

 

Excel formation - VBA21 - objet Range - 33

 

Ensuite pour supprimer la couleur de fond d’une cellule, nous affectons la valeur xlColorIndexNone indifféremment aux propriétés Color ou ColorIndex :

 

    Range("A8").Interior.ColorIndex =  xlColorIndexNone
    Range("A9").Interior.Color = xlColorIndexNone 

 

Excel formation - VBA21 - objet Range - 34

 

   7.4. Modifier les bordures d’une cellule

 

La gestion des bordures de cellules en VBA passe par la propriété Border de l’objet Range, laquelle admet également son lot de sous-propriétés :

Excel formation - VBA21 - objet Range - 35

Nous pouvons tout d’abord définir le type de bordure à appliquer avec la propriété Value :

 

    ' Modificaiton des bordures
    Range("a8").Borders.Value = True

 

Excel formation - VBA21 - objet Range - 36

Ensuite, nous pouvons personnaliser la bordure :

 

    With Range("a8").Borders
        .Value = True
        .Weight = 3 ' Modifier l'épaisseur de la bordure
        .ColorIndex = 10 ' Modifier la couleur de la bordure
        .LineStyle = xlContinuous ' Bordure continue
        .LineStyle = xlDash ' Bordure en pointillée
        .LineStyle = xlDashDot ' Bordure alternance de  pointillés et de points
        .LineStyle = xlDouble ' Double bordure
    End With

 

Excel formation - VBA21 - objet Range - 37

Il est également possible de définir quelle bordure exactement nous souhaitons modifier en argument de l’objet Borders :

    Range("a8").Borders(xlEdgeTop).LineStyle =  xlContinuous ' Bordure supérieure
    Range("a8").Borders(xlEdgeBottom).LineStyle =  xlDash ' Bordure inférieure
    Range("a8").Borders(xlEdgeLeft).LineStyle =  xlDashDot ' Bordure gauche
    Range("a8").Borders(xlEdgeRight).LineStyle =  xlDouble ' Bordure droite
   

 

Excel formation - VBA21 - objet Range - 38

Il existe également les bordures xlDiagonalDown et xlDiagonalUp qui permettent de personnaliser les traits correspondant aux diagonales ainsi que xlInsideHorizontal et xlInsideVertical qui affectent respectivement les bordures horizontales et verticales de l’ensemble des cellules contenues dans la plage de cellules.

 

8. Quelques objets Range particuliers

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

______________________________________________

 

Comme nous l’avons déjà abordé dans les parties précédentes de ce chapitre dédié à la découverte de la gestion des cellules Excel dans VBA, celles-ci sont gérées par l’utilisation de l’objet Range, lequel désigne une cellule ou une plage de cellules.

Il est ainsi possible de créer un nouvelle objet Range auquel nous allons assigner une correspondance de cellules ce qui nous permettra d’intervenir facilement sur celles-ci : lecture ou modification de valeur, personnalisation de la mise en forme,…

Mais VBA dispose également de son lot d’objets préconfigurés qui correspondent à des cellules bien particulières que nous allons justement analyser dans cette partie.

 

   8.1. Manipuler la plage des cellules sélectionnées : Selection

 

Le premier objet Range que nous aborderons ici est l’objet Selection.

Comme son nom l’indique, celui-ci permet d’agit sur la plage des cellules qui sélectionnées par l’utilisateur.

Par exemple, imaginons que celui-ci sélectionne les cellule C7 à D9 de la feuille de calcul active :

Excel formation - VBA21 - objet Range - 01

Nous pourrons très simplement agir sur celles-ci en utilisant les différentes propriétés et méthode de l’objet Selection :

 

    Selection = "Coucou !"
    Selection.Interior.ColorIndex = 12

 

Excel formation - VBA21 - objet Range - 02

Comme vous pouvez le constater, l’utilisation de Selection est strictement identique à celle des objets Range que nous avons déjà découvert dans les parties précédentes, à la seule différence qu’il n’est pas nécessaire de devoir instancier cette dernière.

Evidemment, lorsque la sélection est composée de plusieurs cellules, nous pouvons passer celles-ci en revue pour effectuer un traitement de masse :

 

 

Sub sommerLaSelection()
    Dim c As Range, total As Integer
    For Each c In Selection
        total = total + c
    Next
    
    MsgBox "Le total de la sélection est de "  & total
    
End Sub

 

 

Nous utilisons pour cela une boucle For Each, comme nous l’avons découvert dans un précédent chapitre.

Et pour passer chaque cellule de la sélection en revue l’une après l’autre, nous utilisons une nouvelle variable d’un type que n’a plus aucun secret pour nous : il s’agit évidemment d’un objet Range !

 

Excel formation - VBA21 - objet Range - 03

Nous pouvons également sélectionner manuellement une ou plusieurs cellules en utilisant la méthode Select

 

Sub sommerDeCellules()
    Range("c7:c9").Select
    sommerLaSelection
End Sub

 

 

Excel formation - VBA21 - objet Range - 04

 

 

   8.2. Obtenir la cellule active : Activecell

 

Ensuite, nous pouvons intervenir sur la cellule active avec l’objet Activecell.

La cellule active correspond à la cellule sur laquelle l’utilisateur effectue le clic de la souris.

Lorsqu’une seule cellule est sélectionnée, les objets Selection et Activecell sont évidemment identiques.

En revanche lorsque plusieurs cellules sont sélectionnées, seule la première cellule à avoir été sélectionnée sera identifié par l’objet Activecell.

Nous pourrons alors remarquer que la cellule active est représentée différemment des autres cellules sélectionnées :

 

Sub identifierCelluleActive()
    MsgBox "La cellule active est : " & ActiveCell.Address
End Sub

 

Excel formation - VBA21 - objet Range - 05

En effet nous remarquons ici que seule la première cellule est la cellule active.

Nous pouvons modifier celle-ci en appuyant sur la touche tabulation (ou Entrée) :

Excel formation - VBA21 - objet Range - 06

Ici la cellule active a bien été modifiée (passage de C7 à C8), alors que la sélection reste identique.

 

   8.3. Cellule liée à un évènement : Target

 

Lorsque nous analysons un évènement intervenu sur une feuille de calcul, nous allons cette-ci pouvoir compter sur l’objet Range de VBA qui porte le nom de Target.

Ainsi par exemple pour récupérer les coordonnées des cellules sélectionnées, nous pourrons utiliser la macro évènementielle suivante :

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox Target.Address
End Sub

 

Excel formation - VBA21 - objet Range - 07

Cet objet fonctionne ici comme l’objet Selection, nous pouvons ainsi sélectionner plusieurs cellules adjacentes :

Excel formation - VBA21 - objet Range - 08

Ou encore non adjacentes (en maintenant la touche Ctrl du clavier enfoncée) :

Excel formation - VBA21 - objet Range - 09

 

 

 

9. Copier et coller des cellules en VBA avec le presse-papier

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

______________________________________________

Dans cette nouvelle partie de ce chapitre de découverte de la gestion des cellules en VBA, nous allons découvrir comment réaliser automatiquement des copiers-collers en utilisant des macros commandes VBA.

Il s’agit en effet d’une des possibilités offertes par VBA qui permet de réaliser des actions extrêmement puissantes de manière totalement automatisée et qui amène par conséquent des gains de temps très importants dans le cadre de réalisations des tâches quotidiennes.

 

   9.1. Copier ou couper les cellules

 

Pour copier une cellule, ou une plage composée de plusieurs cellules dans le presse-papier, nous utilisons simplement la méthode Copy de l’objet Range.

L’exemple suivant montre comment copier les cellules sélectionnées :

Sub copyCellulesSelectionnees()
    Selection.Copy
End Sub

 

Excel formation - VBA21 - objet Range - 10

Par défaut, le contenu copier par la méthode Copy que nous venons d’utiliser va être inséré dans le presse-papier.

Mais il est également possible de l’insérer directement à un endroit au sein d’une feuille de calcul que nous précisons en utilisant l’argument « destination » de la méthode Copy.

Cet exemple montre comment dupliquer le contenu des cellules sélectionnées directement au niveau de la cellule A33 :

Sub copyCellulesSelectionnees()
    Selection.Copy Destination:=[A33]
End Sub

 

Excel formation - VBA21 - objet Range - 11

Nous pouvons ainsi nous amuser à sélectionner différentes cellules puis à la dupliquer dans cette même cellule.

Excel formation - VBA21 - objet Range - 12

Lorsque nous requérons l’argument destination comme nous venons de le faire à l’instant, le contenu est alors dupliqué, sans utiliser le presse-papier.

Les cellules sélectionnées ne sont en effet pas identifiées par l’encadrement pointillé caractéristique des cellules copiées.

Pour couper une cellule, nous utilisons simplement la méthode Cut :

 

Sub couper()
    Selection.Cut
    [a33].Activate
    ActiveSheet.Paste
End Sub

 

 

   9.2. Coller des cellules

 

La méthode que nous venons de voir avec l’utilisation de l’argument « destination » permet de réaliser l’équivalent de deux opérations de manière simultanée : copier la ou les cellules sélectionnées, puis les coller à l’endroit spécifié.

Mais nous pouvons également décomposer cette tâche en deux opérations distinctes l’une de l’autre :

 

Sub copyCellulesSelectionnees()
    Selection.Copy
    ActiveSheet.Paste Destination:=[a33]
End Sub

 

Sachez également qu’étant donné que l’argument destination est le premier argument attendu par la méthode Paste, il n’est pas nécessaire de préciser à chaque fois le nom de celui-ci.

Nous pouvons ainsi raccourcir la macro de la manière suivante :

 

Sub copyCellulesSelectionnees()
    Selection.Copy
    ActiveSheet.Paste [a33]
End Sub

 

En réalité, l’argument destination de la méthode Paste n’est pas le seul argument qu’il est possible d’utiliser.

Il est en effet possible de mettre en place un lien entre la cellule source (à partir de laquelle le copiage est effectué) et la cellule active en utilisant l’argument link :

 

Sub copyCellulesSelectionnees()
    Selection.Copy
    [a33].Activate
    ActiveSheet.Paste link:=True
End Sub

 

Dans cet exemple, nous insérons les valeurs des cellules sélectionnées au niveau de la cellule [a33], en insérant directement une référence comme formule de destination !

Ainsi le contenu de la cellule a33 est égal à la formule suivante :

 

 =E28 

 

Vous noterez au passage que nous ne pouvons pas utiliser les arguments destination et Link en même temps, il est donc nécessaire d’activer au préalable la cellule de destination avant d’effectuer le collage lié.

Excel formation - VBA21 - objet Range - 13

Ce cette manière, si nous modifions le contenu de la cellule d’origine (ici la cellule E28), la valeur affichée dans la cellule de destination (cellule active) sera également modifiée.

 

   9.3. Collages partiels (uniquement la valeur, le format,…)

 

Parfois, nous souhaiterons effectuer uniquement un collage partiel des cellules sources.

Dans ce cas, nous utiliserons un collage spécial en utilisant la méthode PasteSpecial.

Cette méthode attend quatre arguments facultatifs qui détermineront le type de collage à réaliser :

  • Paste : il s’agit de l’argument le plus important, qui permet de spécifier le type de collage à mettre en place. Cet argument peut prendre les valeurs suivantes (la liste n’est pas exhaustive, il s’agit des valeurs les plus utiles) :

o xlPasteAll : Coller tout le contenu copié. Revient à utiliser la méthode Paste.

o xlPasteValues : Coller uniquement les valeurs des cellules sources.

o xlPasteValuesAndNumberFormats : Coller les valeurs des cellules sources, ainsi que le format numérique mis en place sur ces cellules

o xlPasteFormulas : Coller uniquement les formules des cellules sources.

o xlPasteFormulasAndNumberFormats : Coller les formules des cellules sources, ainsi que le format numérique mis en place sur ces cellules

o xlPasteFormats : Coller uniquement le format des cellules sources, sans modifier le contenu de la cellule

o xlPasteValidation : Coller uniquement les validations de cellules

  • Opération : permet d’effectuer des opérations lors de l’opération de collage en fonction du contenu des cellules copiées. Nous pouvons ainsi addictionner les valeurs des cellules (xlPasteSpecialOperationAdd), les multiplier (xlPasteSpecialOperationMultiply), les diviser (xlPasteSpecialOperationDivide), ou encore les soustraires (xlPasteSpecialOperationSubtract). Voir l’exemple en dessous pour modifier le signe d’un nombre.
  • SkipBlanks : Permet de ne pas considérer les cellules vide de la plage copiée lors du collage
  • Transpose : Permet d’intervertir les lignes et les colonnes lors du collage

 

Voici comment transformer les formules de cellules sélectionnées en valeurs numériques :

 

Sub transformerEnValeur()
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
End Sub

 

Excel formation - VBA21 - objet Range - 14

Dans cet exemple, nous modifions le sens des cellules sélectionnées en multipliant le contenu de celles-ci par -1 :

 

Sub changerSigne()
    [f7].Copy
    Selection.PasteSpecial  operation:=xlPasteSpecialOperationMultiply
End Sub

 

Attention, ici nous allons automatiquement appliquer le format de la cellule copiée sur la cellule collée.

Pour éviter de perdre le format, il serait nécessaire d’utiliser les deux arguments Paste et Operaton

Excel formation - VBA21 - objet Range - 15

Dans ce dernier exemple, nous intervertissons les lignes et les colonnes :

 

Sub intervertirLignesColonnes()
    Selection.Copy
    [a33].PasteSpecial Transpose:=True
End Sub

 

Excel formation - VBA21 - objet Range - 16

 

   9.4. Libérer la mémoire !

 

Enfin pour finir sachez qu’utiliser le presse-papier nécessite de conserver des informations en mémoire ce qui va donc occuper une place non négligeable de la mémoire.

Il convient de libérer cet espace mémoire en vidant le presse papier en définissant la propriété Application.CutCopyMode à false :

 

Sub viderPressePapier()
    Application.CutCopyMode = False
End Sub

 

 

10. Autres moyens d’utiliser les cellules

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

______________________________________________

Dans les différentes parties précédentes de ce chapitre, nous avons découvert comment manipuler des cellules en VBA grâce à l’objet Range.

Nous allons maintenant découvrir une nouvelle possibilité qui permet de réaliser des opérations identiques, au travers de la propriété Cells, mais également avec l’appel raccourci de l’objet Range.

Vous verrez que lorsque vous aurez pris connaissance de l’existence de cette dernière possibilité d’appeler les cellules en VBA, vous ne pourrez plus utiliser l’objet Range tel que nous l’avons vu dans ce chapitre, tant le gain de temps va être important !

 

   10.1. La propriété Cells()

 

En effet, la langage VBA offre deux possibilités pour intervenir sur une cellule située dans une feuille de calculs :

  • Soit utiliser Range, ce qui maintenant ne devrait plus poser le moindre problème pour vous, si vous avez suivi les précédentes parties de ce chapitre, qui lui est spécialement dédié,
  • Soit utiliser la propriété Cells, et c’est justement ce que nous allons découvrir dès maintenant

Les principales différences entre ces deux appels viennent du fait que Range peut permettre d’appeler une simple cellule, mais également une plage constituée de plusieurs cellules.

En revanche la propriété Cells ne permet d’appeler qu’une seule cellule, mais cet appel se fait de manière simplifiée.

En effet la propriété Cells attend deux arguments qui correspondent aux numéros de ligne et de colonne de la cellule concernée.

Ainsi ces différentes méthodes permettent de réaliser les mêmes opérations :

Sub utiliserCells()   Range("a1").Select
    Cells(1, 1).Select
    
End Sub

 

Nous pouvons même utiliser une lettre pour nommer une colonne dans la propriété Cells, comme nous le faisons habituellement avec l’objet Range :

    Cells(2, "b").Select

Evidemment, cette lettre est alors à insérer en tant que second argument et saisie comme une chaîne de caractères, c’est-à-dire entre guillemets.

En réalité, et contrairement à ce que je vous annoncé juste avant, il existe une manière détournée d’utiliser la propriété Cells qui puisse appeler une plage de cellules.

Pour cela, nous allons alors utiliser la propriété Cells en tant qu’arguments de l’objet Range :

    Range("a3:c3").Select
    Range(Cells(3, 1), Cells(3, 3)).Select

 

Chaque propriété Cells correspond alors respectivement à la première et à la dernière cellule de la plage.

L’avantage de la propriété Cells que nous découvrons ici par rapport à l’objet Range c’est que nous allons pouvoir facilement passer en revue les différentes cellules de l’objet parent à partir duquel la propriété est appelée.

Dans cet exemple, nous souhaitons afficher dans le débuggeur les valeurs des différentes cellules de la première colonne :

    Dim ligne As Integer
    
    For ligne = 1 To 20
        Debug.Print "Ligne " & ligne, Cells(ligne,  1)
    Next

 

 

Excel formation - VBA21 - objet Range - 17

 

Comme nous l’avons vu en préambule, Cells est en réalité une propriété de l’objet Worksheet, là ou Range en est un sous-objet.

Cette propriété a pour but de retourner un objet Range. C’est pourquoi Range et Cells peuvent être utilisés de la même manière (avec les mêmes propriétés et méthode que celles de Range).

Mais nous pouvons tout aussi bien utiliser Cells en tant que propriété de l’objet Range.

Ainsi dans cet exemple nous allons afficher en notification la valeur de la cellule située sur la deuxième cellule sélectionnée par l’utilisateur :

 

    Debug.Print Selection.Cells(1, 2)

 

Excel formation - VBA21 - objet Range - 18

Enfin, lorsque nous utilisons la propriété Cells(), sans argument, alors nous sélectionnons l’ensemble des cellules contenues dans l’objet parent.

De cette manière l’exemple suivant permet de sélectionner toutes les cellules contenues dans la feuille de calculs active :

ActiveSheet.Cells().Select

 

Notez dans ce cas que les parenthèses sont facultatives, nous pouvons également utiliser :

ActiveSheet.Cells.Select

 

De même inutile de spécifier la feuille active, car celle-ci est la feuille de travail utilisée par défaut par VBA :

Cells.Select

 

 

   10.2. L’objet Range : le raccourcis

 

Vous avez surement pu vous apercevoir au cours des mes différents cours et tutoriels qu’il pouvait m’arriver d’utiliser une forme raccourcie pour appeler une cellule ou une plage de plusieurs cellules, sans même avoir besoin d’utiliser le terme Range !

Cette forme raccourcie consiste à utiliser les symboles d’encadrement dans lesquels nous insérons les coordonnées de la cellule ou des cellules correspondantes :

 

Msgbox Range("a1").value
Msgbox [a1].value

 

Ici, les coordonnées des cellules sont saisies directement comme des noms de variables, et non pas comme des chaînes de caractères.

C’est pour cela que nous saisissons directement celles-ci en tant que paramètre, sans utiliser d’apostrophes !

Cette forme permet également d’appeler plusieurs cellules :

 

[a1:c6].Select

 

Un autre intérêt de cette méthode de manipulation des cellules est que nous pouvons également utiliser des cellules nommées directement en saisissant leur nom :

 

Range("maPlageNommee").Select
[maPlageNommee].Select

 

 

Étiquettes : excelformation.fr formation excel didacticiel excel excel tuto cours gratuit formation débutant manipuler les cellules en vba avec l’objet manipuler cellules macros en vba macro range manipuler des cellules plages objet range valeur sélectionner une ou plusieurs cellules sélectionner manipuler une cellule en vba cellule select sélectionner une cellule en vba sélectionner des colonnes entières colonnes entières sélectionner des lignes entières propriété value lire valeurs propriété formula formula formule maintenant() récupérer le contenu de la cellule propriété numberformat numberformat format de cellule format propriété text text manipuler les cellules en vba avec l’objet cellule cellules range modifier la mise en forme texte police taille propriété font propriété font textes with objet name nom de la police taille du texte size texte en gras gras bold italique italic souligner le texte souligner underline dupliquer la mise en forme d’une cellule colorindex color modifier la couleur d’une cellule couleur fond bordures bordures de cellules vba border plage de cellules plage vba selection manipuler la plage des cellules sélectionnées manipuler sélectionnées plusieurs cellules plusieurs select activecell target copier et coller des cellules en vba avec le presse-papier copier coller cellules avec presse-papier découverte de la gestion des cellules en vba découverte gestion copiers collers vba automatisée gains de temps gains temps copier une cellule cellule comment copier les cellules comment dupliqué cellules copiées copiées couper une cellule couper cut coller des cellules paste dupliquer pastespecial xlpasteall xlpastevalues xlpastevaluesandnumberformats xlpasteformulas xlpasteformulasandnumberformats xlpasteformats xlpastevalidation opération skipblanks transpose operaton intervertissons les lignes et les colonnes intervertissons lignes colonnes application.cutcopymode comment manipuler des cellules en vba  cellules objet range objet range propriété cells propriété cells raccourci appeler les cellules en vba plage de cellules plage propriété cells passer en revue les cellules forme raccourcie pour appeler une cellule forme raccourcie  cellule plage de plusieurs cellules


Articles qui pourraient vous intéresser

COMMENT CONVERTIR DES COORDONNÉES GPS DEGRÉS MINUTES SECONDES (DMS) EN DEGRÉS DÉCIMAUX (DD) EXCEL

COMMENT SUPPRIMER AUTOMATIQUEMENT LES ACCENTS DANS EXCEL

COMMENT UTILISER LES COORDONNÉES GPS SUR UNE CARTE EXCEL - BONUS : COMBINER DEUX TABLEAUX

COMMENT MASQUER DÉFINITIVEMENT ET AUTOMATIQUEMENT UNE FEUILLE DE CALCUL EXCEL

Commentaires

Il n'y a aucun commentaire...

Poster un commentaire

Pseudo
Commentaire

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.