Cours de M. Emmanuel DUBOIS
Vous disposez d’un classeur Excel contenant des cours récents sur l’indice CAC ALL SHARES et ses composants en vue d’une étude sur la constitution d’un portefeuille de valeurs cotées sur la place de Paris.
Il est téléchargeable à l’adresse suivante :
ou, ci-dessous en version décompressée.
Le problème est que les données présentes ne sont pas adaptées à un traitement immédiat :
1. Un certain nombre de données sont regroupées au sein de la première colonne
2. Les dates de séance ne sont pas reconnues
3. Les valeurs numérique, entières ou décimales, sont en fait des textes avec le point comme séparateur de décimales.
A priori, la fonction Ruban
Données→
Convertir peut traiter tous ces problèmes,
son seul inconvénient étant de ne pouvoir travailler que sur une colonne
à la fois, or vous devez traiter 9 colonnes sur 495 pages…
Comme cela promet d’être fastidieux, vous décidez d’enregistrer une macro-commande pour accélérer votre travail.
1 – Sélectionnez le second onglet du classeur nommé QS0010989141-XPAR.
2 – Lancez l’enregistrement (bouton
en bas à gauche de l’écran ou Affichage / Macros /
Enregistrer
une macro ou Développeur /
Enregistrer
une macro)d’une macro nommée Correction,
associée à la touche CTRL + MAJ + w à stocker dans le classeur courant.
3 – Sélectionnez la plage A1:A5 en vue de découper ses entrées, puis lancez la commande Données / Convertir
Dans un premier écran de l’assistant de conversion, choisissez la case d’option Délimité puis le bouton Suivant |
|
Le séparateur choisi sera le symbole : , précisé dans la section Autre, puis vous pourrez choisir le bouton Terminer |
|
4 – Sélectionnez la colonne B en vue de faire reconnaître les dates que contiennent certaines de ses cellules en faisant à nouveau Données / Convertir
On choisit à nouveau le type Délimité puis le bouton suivant |
|
Le séparateur peut être quelconque (par exemple le caractère de tabulation), et peut tout être sauf un espace ou un tiret. Poursuivez par le bouton Suivant |
|
Choisir comme format des données en colonne Date en sélectionnant l’option AMJ (année, mois, jours) dans la liste puis cliquez sur le bouton Terminer. |
|
5 – Sélectionnez la colonne C en vue de faire reconnaître les valeurs numériques utilisant le point comme séparateur de décimales et réitérant la commande Données / Convertir
Choisissez encore Délimité comme type de données puis actionnez le bouton Suivant. |
|
Le séparateur reste le caractère de Tabulation et vous enchainez à nouveau avec le bouton Suivant. |
|
Le format des données reste Standard et vous cliquez sur le bouton Avancé pour choisir les séparateurs de décimales et de milliers |
|
Inscrivez un point . comme séparateur de décimale puis cliquez sur OK. |
|
Vous pouvez alors fermer l’assistant de conversion par un appui sur le bouton Terminer. |
|
6 - Arrêtez l’enregistrement de la macro (bouton
en bas à gauche de l’écran d’Excel ou Affichage / Macros /
Arrêter
l’enregistrement ou Développeur /
Arrêter l’enregistrement)
1 – Lancement par la séquence de touche initialement configurée
Sélectionnez la 3e feuille nommée FR0000076887-XPAR puis lancez la séquence de touche CTRL + MAJ + W.
Vérifiez que les 3 premières colonnes de la feuille sont désormais instantanément corrigées.
2 – Lancement par menu
Sélectionnez la 4e feuille nommée FR0010557264-XPAR puis lancez la commande Affichage /
Vérifiez que les 3 premières colonnes de la feuille sont désormais instantanément corrigées.
|
|
Il apparaît désormais utile de corriger également les colonnes D à I des feuilles du classeur
Or toute macro, y compris une macro enregistrée, ne peut être modifiée que dans l’environnement de développement Visual basic mis à la disposition par les commandes Développeur / Visual Basic.
Pour cela lancez la commande Affichage /
Macros /
Afficher les macros ou Développeur /
Macros, choisissez la macro Correction puis choisissez le bouton Modifier.
Vous pouvez alors prendre connaissance du code VBA enregistré pour votre macro et constatez que cela forme des commandes tout à fait compréhensibles pour peu que l’on ait des rudiments d’anglais.
En cas de difficulté éventuelle de compréhension, il est possible d’utiliser les commandes de mise au point, notamment les commandes du menu Débogage pour exécuter l’une après l’autre les différentes instructions.
1 / A la suite d’une lecture attentive de la macro-commande enregistrée, supprimez (ou commentez en cas de doute) les éventuelles commandes qui vous apparaissent avoir été enregistrées inutilement ou les actions inutilement enregistrées.
2 / Recopiez en 7 exemplaires les deux lignes qui précèdent le End Sub
en actualisant Columns("C:C").Select
en Columns("D:D").Select
et en actualisant Selection.TextToColumns Destination:=Range("C1")
en Selection.TextToColumns Destination:=Range("D1")
et ainsi de suite pour les colonnes suivantes pour obtenir une macro correspondant à ce qui suit.
Sub Correction()
'
' Correction Macro
'
' Touche de raccourci du clavier: Ctrl+w
'
Range("A1:A5").Select
Selection.TextToColumns Destination:=Range("A1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False,
Comma:=False, Space:=False, Other:=True, OtherChar _
:=":",
FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Columns("B:B").Select
Selection.TextToColumns
Destination:=Range("B1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False,
Space:=False, Other:=False, OtherChar _
:=":",
FieldInfo:=Array(1, 5), TrailingMinusNumbers:=True
Range("B1").Select
ActiveWindow.SmallScroll Down:=-12
Columns("C:C").Select
Selection.TextToColumns
Destination:=Range("C1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False,
Comma:=False, Space:=False, Other:=False, OtherChar _
:=":",
FieldInfo:=Array(1, 1), DecimalSeparator:=".", TrailingMinusNumbers _
:=True
Columns("D:D").Select
Selection.TextToColumns
Destination:=Range("D1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
:=":", FieldInfo:=Array(1, 1), DecimalSeparator:=".",
TrailingMinusNumbers _
:=True
Columns("E:E").Select
Selection.TextToColumns
Destination:=Range("E1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
:=":", FieldInfo:=Array(1, 1), DecimalSeparator:=".",
TrailingMinusNumbers _
:=True
Columns("F:F").Select
Selection.TextToColumns
Destination:=Range("F1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
:=":", FieldInfo:=Array(1, 1), DecimalSeparator:=".",
TrailingMinusNumbers _
:=True
Columns("G:G").Select
Selection.TextToColumns
Destination:=Range("G1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
:=":", FieldInfo:=Array(1, 1), DecimalSeparator:=".",
TrailingMinusNumbers _
:=True
Columns("H:H").Select
Selection.TextToColumns
Destination:=Range("H1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
:=":", FieldInfo:=Array(1, 1), DecimalSeparator:=".",
TrailingMinusNumbers _
:=True
Columns("I:I").Select
Selection.TextToColumns
Destination:=Range("I1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, OtherChar _
:=":",
FieldInfo:=Array(1, 1), DecimalSeparator:=".", TrailingMinusNumbers _
:=True
End Sub
Vérifiez sur la 2e feuille QS0010989141-XPAR que vous avez désormais une macro qui corrige la totalité de la page.
3 / Vous souhaiteriez désormais faire en sorte que les nombres utilisent un séparateur de milliers.
Pour cela enregistrez une macro-commande nommé Milliers dans laquelle vous sélectionnez les colonnes C à I, appliquez un format de nombre incluant un séparateur de milliers et 2 décimales, puis sélectionnez la cellule A1.
Vous obtiendrez alors une macro ressemblant à ce qui suit :
Sub Milliers()
Vous pouvez alors compléter la macro Correction,
- soit en recopiant les commandes utiles ci-dessous juste avant son End Sub :
Columns("C:I").Select
Selection.NumberFormat =
"#,##0.00"
Range("A1").Select
- Soit par une simple saisie du nom de la macro juste avant son End Sub.
Milliers
Testez finalement le bon fonctionnement de la désormais complète macro Correction sur la 3e feuille FR0000076887-XPAR.
Nous savons désormais que nous pourrions obtenir un classeur propre en réalisant 495 sélections de feuilles suivies de 495 appui sur CTRL + MAJ + W
Pour gagner du temps, nous pourrions enregistrer une macro FeuilleSuivante qui enregistrerait le passage à l’onglet suivant par séquence de touche Excel CTRL + Page vers le bas, ce qui donnerait une commande ActiveSheet.Next.Select
à intégrer
en fin de la macro correction qui nous ferait encore gagner du temps
en supprimant la nécessité des 495 sélections de feuilles.
Toutefois, nous allons faire une incursion en mode programmé pour découvrir ce qu’apporte la programmation VBA en créant de toutes pièces, à la suite de la macro correction, la macro suivante :
Sub correctionGlobale()
En exécutant la macro CorrectionGlobale, vous constaterez ainsi que l’avantage de savoir programmer permet, entre autres, de créer rapidement des actions dotées d’un raisonnement logique (ici éviter la feuille CAC ALL SHARES), itératives (ici la correction est itérée sur tous les onglets) et interactives (message de fin).
Bien que le fichier soit corrigé, si vous souhaitez conserver vos macros pour l’avenir, il vous faudra enregistrer désormais votre classeur dans l’un des formats suivants :
- Classeur Excel (prenant en charge les macros) (*.xlsm) format recommandé
- Classeur Excel binaire (*.xlsb), format plus compact mais moins portable
- Classeur Excel 97-2003 (*.xls), non recommandé car obsolète
- Macro complémentaire Excel (*.xlam), peu pertinent dans le cas présent car les feuilles de calcul, lourdes et utiles dans le classeur présent, seraient désormais masquées pour ne donner accès qu’aux seules macros.