Macro Excel 2011 - Défaut d'enregistrement

iluro_64

Old MacUser
Club iGen
1 Avril 2008
7 233
1 287
88
Haut Béarn
Ce fil s'adresse plus particulièrement à ceux qui connaissent la programmation de macros en langage VBA à l'intention d'Excel.

Exposé du problème :

Depuis l'installation récente d'Excel 2011, toutes les macros VBA récupérées d'Excel 2004 fonctionnent de façon satisfaisante, sauf une. J'ai bien identifié le problème.

Action de la macro

Cette macro a pour objet de récupérer les informations contenus dans un fichier de type Tous les fichiers, au sens d'Excel, par la commande "ouvrir" du menu Fichier. Ce fichier est structurée en 4 colonnes séparées les unes des autres par une tabulation. La première colonne contient du texte formant des dates au format jj/mm/aaaa. La seconde colonne contient du texte. La troisième colonne contient des nombres à deux décimales. La quatrième colonne est vide.

Dysfonctionnement de la macro

Dans la macro d'origine, sous Excel 2004, l'ouverture du fichier, l'interprétation des données, et leur mise en forme se faisait sans erreur. Sous Excel 2011, les dates sont imparfaitement interprétées et des erreurs sont faites ensuite lors d'une opération de tri/classement. Toutes les dates de la colonne 1 ne sont pas interprétées comme telles, et pour une partie d'entre elles, le nombre figurant le jour se trouve en position mois, tandis que le nombre figurant le mois se trouve en position jour selon le schéma suivant :

avant : jj/mm/aaaa
après : mm/jj/aaaa ou mm/jj/aa

Exploration du dysfonctionnement

Lorsque l'on réalise manuellement l'ouverture du fichier en question à l'aide de la commande Ouvrir du menu Fichier, il faut déclarer que le fichier appartient à la catégorie Tous les fichiers à l'aide du menu déroulant Activer de la fenêtre d'ouverture. Sinon, il n'est pas possible d'ouvrir le fichier. Au cours du dialogue qui suit, il n'est pas normalement utile de choisir des options, ce qui a pour effet de conserver les options par défaut. Dans ce cas, toutes les colonnes sont interprétées comme contenant de l'information standard. Toutefois, on peut préciser que la colonne 1 contient du texte représentant une date au format JMA (DMA dans le dialogue), que la colonne 2 est du texte, et la colonne 3 est standard.
On peut garder les options par défaut. Le résultat de l'ouverture est correct. Le contenu du fichier n'est pas altéré.

Lorsqu'on réalise la même chose avec la macro, le résultat est altéré, c'est-à-dire que la colonne 1 contenant les dates voit sont contenu modifié en partie. L'ouverture du fichier se fait à l'aide de la suite d'instruction suivante :

Dim n_file As String
'
n_file = Application.GetOpenFilename
Workbooks.Open (n_file)

Le fait de modifier la dernière instruction ainsi ne change pas le problème

Workbooks.OpenText (n_file)

Tentative de solution : enregistrement de la macro

Après avoir tenté de modifier sans succès l'instruction Workbooks.OpenText (n_file) pour qu'elle prenne en compte les particularités du fichier (syntaxe assez compliquée et insuffisamment documentée), j'ai tenté d'enregistrer la macro. Malheureusement, la commande d'ouverture du fichier et le paramétrage associé n'est pas enregistré …

Tentative de solution : écriture de la partie critique de l'instruction

J'ai passé pas mal de temps à tenter d'écrire convenablement l'instruction
Workbooks.OpenText (n_file, et autres paramètres). Je n'y suis pas parvenu, étonné que le compilateur me dise qu'après l'instruction il attend le signe égal suivi d'une expression.

Demande d'aide

Je serai donc très attentif à toute aide de la part de ceux qui pourront me répondre.
Merci par avance.
 
  • J’aime
Réactions: Aliboron
Dans la macro d'origine, sous Excel 2004, l'ouverture du fichier, l'interprétation des données, et leur mise en forme se faisait sans erreur. Sous Excel 2011, les dates sont imparfaitement interprétées et des erreurs sont faites ensuite lors d'une opération de tri/classement. Toutes les dates de la colonne 1 ne sont pas interprétées comme telles, et pour une partie d'entre elles, le nombre figurant le jour se trouve en position mois, tandis que le nombre figurant le mois se trouve en position jour
Le plus probable est que, faute d'indication plus précise, il met les valeurs par défaut partout. Donc pour toutes les colonnes le format "standard" et visiblement il doit prendre le format US (MM/JJ/AAAA) lorsque c'est assez ambigu pour que ce soit possible (ex : 01/08/2011) et le format français (JJ/MM/AAAA) lorsqu'il n'y a pas d'autre possibilité (ex : 18/01/2011). Encore que, dans un tel cas il choisisse peut-être le format texte, ce serait un point à vérifier.

Pas évident de dire pourquoi il y a eu changement entre les deux versions évidemment, mais on a largement changé de version de VBA (et c'est une très bonne chose par certains côtés) ce qui induit peut-être quelques changements... et/ou quelques bugs.


Après avoir tenté de modifier sans succès l'instruction Workbooks.OpenText (n_file) pour qu'elle prenne en compte les particularités du fichier (syntaxe assez compliquée et insuffisamment documentée), j'ai tenté d'enregistrer la macro. Malheureusement, la commande d'ouverture du fichier et le paramétrage associé n'est pas enregistré …
C'est curieux car, chez moi, il n'y a de ce point de vue pas de différence entre Excel 2004 et Excel 2011. Tous les paramètres sont bien enregistrés.

Bon, ceci dit, en gros, dans ton cas j'écrirais la macro comme suit :
Bloc de code:
Sub MacroTest()
    Workbooks.OpenText Filename:= _
        "Disque Dur:Users:MoiMeme:Desktop:MonFichierTest.txt", Origin:=xlMacintosh, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, FieldInfo:=Array(Array(1, 4), _
        Array(2, 2), Array(3, 1), Array(4, 1))
End Sub

À tout hasard, les formats pour le paramètre FieldInfo (qui permet de déterminer le format des colonnes) sont :
  • 1 Standard
  • 2 Texte
  • 3 date MJA
  • 4 date JMA
  • 5 date AMJ
  • 6 date MAJ
  • 7 date JAM
  • 8 date AJM
  • 9 non distribuée
Donc ici, la colonne 1 devrait se trouver en format date français et la colonne 2 en format texte.
 
Le plus probable est que, faute d'indication plus précise, il met les valeurs par défaut partout. Donc pour toutes les colonnes le format "standard" et visiblement il doit prendre le format US (MM/JJ/AAAA) lorsque c'est assez ambigu pour que ce soit possible (ex : 01/08/2011) et le format français (JJ/MM/AAAA) lorsqu'il n'y a pas d'autre possibilité (ex : 18/01/2011). Encore que, dans un tel cas il choisisse peut-être le format texte, ce serait un point à vérifier.

Pas évident de dire pourquoi il y a eu changement entre les deux versions évidemment, mais on a largement changé de version de VBA (et c'est une très bonne chose par certains côtés) ce qui induit peut-être quelques changements... et/ou quelques bugs.



C'est curieux car, chez moi, il n'y a de ce point de vue pas de différence entre Excel 2004 et Excel 2011. Tous les paramètres sont bien enregistrés.

Bon, ceci dit, en gros, dans ton cas j'écrirais la macro comme suit :
Bloc de code:
Sub MacroTest()
    Workbooks.OpenText Filename:= _
        "Disque Dur:Users:MoiMeme:Desktop:MonFichierTest.txt", Origin:=xlMacintosh, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=True, FieldInfo:=Array(Array(1, 4), _
        Array(2, 2), Array(3, 1), Array(4, 1))
End Sub

À tout hasard, les formats pour le paramètre FieldInfo (qui permet de déterminer le format des colonnes) sont :
  • 1 Standard
  • 2 Texte
  • 3 date MJA
  • 4 date JMA
  • 5 date AMJ
  • 6 date MAJ
  • 7 date JAM
  • 8 date AJM
  • 9 non distribuée
Donc ici, la colonne 1 devrait se trouver en format date français et la colonne 2 en format texte.

C'est tout à fait ce que je voulais faire. Mais, comme le texte de l'instruction est complexe j'avais peur de me tromper en le tapant. C'est pour cette raison que je voulais passer par l'enregistrement.

Un point me chagrine cependant. Dans mon cas particulier je pensai pouvoir écrire l'instruction de deux façons simplifiées dans la mesure où, hormis les colonnes (Array) toutes les autres valeurs sont des valeurs par défault.

Workbooks.OpenText Filename:= _
"Disque Dur:Users:MoiMeme:Desktop:MonFichierTest.txt", , _
, , , , , FieldInfo:=Array(Array(1, 4), Array(2, 2), Array(3, 1))

ou

Workbooks.OpenText Filename:= _
"Disque Dur:Users:MoiMeme:Desktop:MonFichierTest.txt",FieldInfo:=Array(Array(1, 4), Array(2, 2), Array(3, 1))


Mais ça n'a pas marché. Et pour cause : j'ai oublié de mettre la clé FieldInfo:=

Je vais donc reprendre mes tests. Je te tiens au courant, et merci de ton aide.
 
Dans mon cas particulier je pensai pouvoir écrire l'instruction de deux façons simplifiées dans la mesure où, hormis les colonnes (Array) toutes les autres valeurs sont des valeurs par défault.
Méfiance tout de même. Dans le temps, j'ai aussi "nettoyé" les instructions en supprimant toutes les valeurs par défaut, ce qui rend les instructions plus lisibles. Mais on a parfois de mauvaises surprises car dans les macros un peu élaborées, on ne sait pas forcément quelle est la dernière valeur utilisée pour une variable. Et la recherche des erreurs en est d'autant plus complexe... J'ai nettement tendance à laisser toutes les valeurs par défaut en clair, maintenant.
 
Méfiance tout de même. Dans le temps, j'ai aussi "nettoyé" les instructions en supprimant toutes les valeurs par défaut, ce qui rend les instructions plus lisibles. Mais on a parfois de mauvaises surprises car dans les macros un peu élaborées, on ne sait pas forcément quelle est la dernière valeur utilisée pour une variable. Et la recherche des erreurs en est d'autant plus complexe... J'ai nettement tendance à laisser toutes les valeurs par défaut en clair, maintenant.

Tu as tout à fait raison.
J'ai écrit l'instruction en entier et révisé un peu la macro. Maintenant ça fonctionne presque comme avant, mais le résultat est acceptable.

Je vais quand même essayer un nettoyage, pour voir. Je te tiendrai au courant.

---------- Nouveau message ajouté à 11h29 ---------- Le message précédent a été envoyé à 10h33 ----------

J'ai réduit l'instruction au strict minimum utile :

Workbooks.OpenText Filename:=n_file, _
FieldInfo:=Array(Array(1, 4), Array(2, 2), Array(3, 1), Array(4, 9))


Ça fonctionne tout comme lorsqu'elle est complète …

Merci pour ton aide.

À propos, je n'arrive plus à trouver la description des "statements" de VBA, en langue anglaise dont je m'étais servie hier, et je n'avais pas noté l'adresse internet. L'aurais-tu sous la main par hasard ?


Ne cherche pas je l'ai retrouvée :

http://mac2.microsoft.com/vb/1033/default.aspx

On l'atteint via le bouton ? de la barre de menu de VBA Editor, et ensuite par Aide de Visual Basic Editor qui renvoie à l'adresse ci-dessus
 
On l'atteint via le bouton ? de la barre de menu de VBA Editor, et ensuite par Aide de Visual Basic Editor qui renvoie à l'adresse ci-dessus
Merci, je ne l'avais pas vu. J'avais seulement noté qu'il n'y avait pas d'aide dans l'éditeur VBA et donc, comme vu plus haut, j'utilise l'aide de la version 2004. Je vais regarder ça de plus près mais ça a tout de même l'air un peu court, et il n'y a pas l'air d'avoir de recherche. Bon, Google (ou Bing, pour le coup) peut aider, bien sûr...
 
De déterre ce sujet car je suis retombé dans le même problème, toujours avec EXCEL 2011, suite à "l'aimable" tentative de mon banquier d'améliorer son site internet. Car dans cette "aimable" tentative il a eu l'idée à la fois riche et fâcheuse d'apporter des modifications importantes dans la distribution des relevés d'opérations. Celle qui m'intéresse au plus haut point est la fourniture non plus d'un fichier texte avec caractère séparateur de colonne, mais d'un fichier EXCEL .xls … qui comporte aussi deux colonnes supplémentaires qui me sont inutiles
La première colonne comporte les dates d'opérations rédigées selon le format d'affichage jj-mm-aaaa, et trouvées comme étant au format de nombre "standard". Elles sont présentées dans l'ordre chronologique inverse, soit plus plus récent en premier, et plus ancien en dernier. J'ai besoin de l'ordre inverse, et si, manuellement (MAJ-CMD-R) je fais un tri du tableau par rapport aux dates, avec les bonnes options de tri proposées par EXCEL, j'obtiens le résulta souhaité.
Jusque là rien à dire, tout baigne. Où ça se gâte, c'est lorsque j'enregistre une macro faisant strictement la même chose. Au cours de l'exécution, le contenu de la colonne date lors du tri est interprété de deux façons, tantôt avec une date au format affiché jjmmaa ou jjmmaaa (date française) tantôt avec une date au format affiché mmjjaa ou mmjjaaaa (date US).

Bref, je patauge … et suis sensible et reconnaissant à toute idée me permettant d'aller vers une solution "heureuse".
 
Les macros travaillent toujours avec des formats de date US. Celles qui restent au format FR dans ton cas sont probablement les dates à partir du 13 du mois, qui ne sont du coup pas interprétées comme des dates mais comme des nombres, voire comme du texte. Bref, ce n'est pas génial.

Est-ce que tu peux décrire plus en détail les données d'origine (je suspecte ta colonne de dates d'être en format texte, par exemple) et ta macro, on peut (essayer de) voir.
 
Les macros travaillent toujours avec des formats de date US. Celles qui restent au format FR dans ton cas sont probablement les dates à partir du 13 du mois, qui ne sont du coup pas interprétées comme des dates mais comme des nombres, voire comme du texte. Bref, ce n'est pas génial.

Est-ce que tu peux décrire plus en détail les données d'origine (je suspecte ta colonne de dates d'être en format texte, par exemple) et ta macro, on peut (essayer de) voir.

Je pense que tu as tapé directement dans le mille de la cible. En effet au cours des essais que j'ai effectués, dans cette fameuse colonne de date, il m'est arrivé de récupérer deux sortes de dates. Première observation : une partie des dates se cadrait à droite, tandis que l'autre partie se cadrait à gauche. Seconde observation : une partie des dates étaient libellées au format US mm/jj/aa, et une autre partie au format Français jj/mm/aa, avec une variante aaaa pour certaines d'entre elles. Je n'avais pas fait la corrélation entre les deux phénomènes.

En ce qui concerne le format des dates de la colonne A, à l'ouverture du fichier .xls de la banque par EXCEL, les 5 colonnes du tableau sont identifiées comme étant au format de nombre " standard" dans la fenêtre " Nombre " du ruban. À tout hasard, j'ai vérifié que chaque cellule remplie était bien de ce format. Les dates sont toutes libellées de la façon suivante : 07-12-2015 ou 31-12-2015 ou 05-01-2016
En ce qui concerne le contenu des colonnes B, C, et E, les cellules sont remplies par du texte cadré à gauche.
En ce qui concerne le contenu de la colonne D, il s'agit de nombre représentés sous la forme S####,## où S est le signe "-" éventuel, et # l'un des chiffres 0 à 9. l'indication fractionnaire est la virgule. Il n'y a pas de signe monétaire ou comptable. Les contenus sont cadrés à droite, et comprennent au moins un chiffre non 0 en première position (hors signe "-"). Les centimes soit " ,## " ne sont présents que s'il ne sont pas en valeur nulle, donc pas de 1234,00 mais 1234.

Pour en revenir au tableau et à son contenu, voici l'usage fait des colonnes par la banque
Colonne A : Date d'opération
Colonne B : Catégorie opération
Colonne C : Libellé opération
Colonne D : Montant opération
Colonne E : Pointage opération

Le but de la macro est de conserver uniquement les colonnes Date, Libellé, Montant, classées par chronologie ascendante, afin de copier facilement les lignes utiles dans un autre tableau.

J'arrête ce post à ces généralités, et poursuivrai mes observations d'investigation dans les suivants.

Mais, auparavant, je voudrai préciser deux points importants.

Premier point : exécution manuelle. Après l'ouverture du fichier soit par Fichier/Ouvrir dans Excel ou par un double-clic je sélectionne l'ensemble du tableau (clic en haut à gauche du tableau). Puis sans toucher à rien, je fais un tri avec la commande Données/Trier, en cochant l'option proposée par Excel : trier toutes les données ressemblant à des nombres comme des nombres. Pas de miracle, mais un fonctionnement au résultat attendu. Il ne reste plus qu'à formater la colonne Date au format Date, et les nombres au format Monétaire. Formatage effectué sans soucis avec la fenêtre " Nombre " du ruban. Ensuite, il ne reste plus qu'à supprimer les éléments inutiles : colonnes Catégorie, Pointage. Dernière opération : sélection et copie des lignes utiles, collage spécial "valeur" dans le tableau récepteur.

Second point : enregistrement de la macro et exécution. Tout fonctionne comme " à la main" sauf un détail de taille. L'action manuelle de formatage de la colonne Date pour passer de Standard à Date a été traduit dans la macro par :
Selection.NumberFormat = "jj/mm/aa"
Sur cette instruction Excel affiche une fenêtre d'erreur intitulée Erreur d'exécution " 1004 ", avec pour commentaire : Impossible de définir la propriété NumberFormat de la classe Range
 
Les joies des macros enregistrées (et non retravaillées). Lorsqu'on enregistre une macro, l'enregistrer prend tout ce qu'il "voit" et ne tient pas compte de la cohérence ou pas. Il faut ensuite aller faire un peu de ménage, supprimer les instructions inutiles (en particulier les "Select" qui ne servent le plus souvent à rien et ralentissent le traitement) et corriger celles qui doivent l'être. Et en particulier les formats de date qui doivent être mis en US, de même que le séparateur décimal…

J'ai fait les manips que tu indiques et, après nettoyage, la macro ressemble à ça (et fonctionne) :
Bloc de code:
Sub MenageMensuel()
    Range("B:B").Delete Shift:=xlToLeft
    Range("D:D").Delete Shift:=xlToLeft
 
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("A1:C" & Worksheets("Feuil1").Range("A1").End(xlDown).Row)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 
    Range("A:A").NumberFormat = "dd/mm/yyyy"
    Range("C:C").NumberFormat = "# ##0.00"

    Range("A1").Select
End Sub
 
Dernière édition:
Merci pout tes suggestions que j'ai suivies, bien entendu. Outre tes suggestions j'ai aussi fait quelques essais.

Je suis arrivé à un état de macro qui je peux considérer comme satisfaisant sur le plan opérationnel, dans la mesure où j'atteins un état du résultat presque parfait. Je veux dire par là que le tableau final est épuré selon mes besoins, que les lignes sont classées comme j'en ai besoin, c'est-à-dire de la plus ancienne à la plus récente, et que les nombres se retrouvent correctement libellés lorsqu'ils sont copiés à destination. Seul bémol : le format de la date de la colonne 1 reste de la forme jj-mm-aaaa (ou dd-mm-yyyy in english).

À ce niveau là je dois faire les remarques suivantes.
  1. Instruction Range("A:A").NumberFormat = "dd/mm/yyyy" : elle est inopérante et le libellé original est inchangé. Sous la forme "francisée" "jj/mm/aaaa", une erreur est détectée, incitant à penser que le format n'est pas reconnu, ce qui est vraisemblable (voir plus loin)
  2. Si dans le tableau final rendu par la macro j'effectue le remplacement du caractère "-" par le caractère "/" au moyen de la commande Edition/Remplacer, le résultat final est alors celui attendu : la date est bien au format "dd/mm/yyyy" ou "jj/mm/aaaa".
  3. Si j'effectue la même opération à l'aide de l'instruction VBA équivalente :
Columns("A:A").Replace What:="-", Replacement:="/", LookAt:=xlPart, _​
SearchOrder:=xlByColumns, MatchCase:=False,

le résultat est différent.​
  • Les dates comprises du 1/12/2015 au 13/12/2015 sont libellées mm/dd/yyyy et cadrées à droite.
  • Les dates comprises du 14/12/2015 au 31/12/2015 sont libellées dd/mm/yyyy et cadrées à gauche.
  • Les dates comprises du 1/01/2016 au 08/01/2015 sont libellées mm/dd/yyyy et cadrées à droite.
À tout hasard avec l'instruction VBA :
Workbooks.OpenText Filename:=n_file, _
FieldInfo:=Array(Array(1, 3), Array(2, 2), Array(3, 2), Array(4, 1), Array(5, 9))
J'ai fait varier le code de la colonne 1 soit à la valeur 3 (US mdy ou MJA) soit à la valeur 4 (dmy ou JMA). Il n'y a pas eu de répercussion sur le résultat.

Compte tenu de l'observation relatée en 1, et de ce que j'avais fait dans la macro originale qui avait été le sujet du début du fil, je me demande si je ne dois pas aussi ajouter les instructions de fusions de style.
 
Cela met en évidence que le problème de base, concernant les dates, c'est qu'elles sont vues comme du texte (même si le format de cellule est "standard"). Il faut donc les traiter comme du texte dans un premier temps. Et donc recréer une date, un peu sur le principe de ce que tu as fait, mais en l'adaptant pour que ce soit "bien compris" par la macro VBA. Je te suggère la boucle suivante :
Bloc de code:
Dim cellule As Range

For Each cellule In Range("A4:A" & Worksheets("Feuil1").Range("A4").End(xlDown).Row)
MaDate = Right(cellule.Text, 4) + "/" + Mid(cellule.Text, 4, 2) + "/" + Left(cellule.Text, 2)
cellule.Value = MaDate

Next cellule
Tu devrais pouvoir ensuite y appliquer le format voulu...
 
  • J’aime
Réactions: iluro_64
Cela met en évidence que le problème de base, concernant les dates, c'est qu'elles sont vues comme du texte (même si le format de cellule est "standard"). Il faut donc les traiter comme du texte dans un premier temps. Et donc recréer une date, un peu sur le principe de ce que tu as fait, mais en l'adaptant pour que ce soit "bien compris" par la macro VBA. Je te suggère la boucle suivante :
Bloc de code:
Dim cellule As Range

For Each cellule In Range("A4:A" & Worksheets("Feuil1").Range("A4").End(xlDown).Row)
MaDate = Right(cellule.Text, 4) + "/" + Mid(cellule.Text, 4, 2) + "/" + Left(cellule.Text, 2)
cellule.Value = MaDate

Next cellule
Tu devrais pouvoir ensuite y appliquer le format voulu...

En fait, tu suggères de faire dans une boucle de traitement "manuel" le remplacement de chaque "-" par un "/", selon un mode "traitement de texte". Après tout, pourquoi pas ! :D

J'ai consacré une partie de mon temps, cet après-midi, à acheter et a installer Office 2016, limité à Word (on ne sait jamais avec Pages) et à Excel. Pas de soucis avec Word, et gros soucis avec Excel ! Au lancement, MS Excel affiche le message suivant :

Microsoft Excel veut utiliser vos informations confidentielles gardées dans Microsoft Identify (suit une chaîne de caractères un peu longue) du trousseau de clés, et, à la demande de permission, propose de répondre Toujours, Oui, Non. C'est la fenêtre classique. Le problème est que le Microsoft Identify n'existe pas dans le trousseau de clés, et que les réponses sont toutes inefficaces. Cela entraîne un blocage partiel d'Excel. En particulier, pour le quitter, il faut le forcer (Menu Pomme/Forcer à quitter). Je pense que je vais remettre ce problème à plus tard.
 
Je suis enfin arrivé au bout de l'évolution de la macro. Le fin mot de l'histoire me semble être, en effet, le traitement sous forme 'texte" plutôt que sous forme "standard", et appliquer à la fin seulement, les styles qu'on veut utiliser.

Grand merci de ton aide toujours précieuse.
 
Oui, c'est un classique dans les données récupérées depuis une exportation au format texte : même si la colonne n'est pas formatée en texte, le contenu est pris en compte comme du texte. Directement dans la feuille, il suffit généralement de double-cliquer dans la cellule (pour la passer en mode édition) et valider pour que les nombres soient convertis (sauf si les séparateurs décimaux et de milliers ne sont pas en cohérence avec les standards "régionaux").

Par macro, c'est plus compliqué car une partie des outils de la feuille de calcul ne sont pas disponibles (en quelque sorte, c'est la macro qui doit se charger des "automatismes"). Il est donc plus rapide de prendre le contenu comme texte et de s'assurer d'une conversion en nombre (en date, dans le cas présent).