Convertir cellules "texte" en cellules "nombre"

Bonjour à tous !

J'ai une macro qui me permet de venir copier les cellules d'un fichier "Rapport" à la suite de ma base de données dans un autre fichier Excel.

Sub transfert()

Dim W1 As Workbook, W2 As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim DL1 As Long, NVL2 As Long

Set W1 = Workbooks("Rapport.xls")
Set W2 = Workbooks("Base de Données.xlsm")
Set f1 = W1.Sheets("Page 1")
Set f2 = W2.Sheets("Data")

DL1 = f1.Range("A" & f1.Rows.Count).End(xlUp).Row
NVL2 = f2.Range("A" & f2.Rows.Count).End(xlUp).Row + 1

f1.Range("A2:O" & DL1).Copy f2.Range("A" & NVL2)

End Sub

La macro fonctionne sans soucis, cependant les données des colonnes (B/D/E/F/G/H/I/J/K/L/M/N/O) du fichier "Rapport.xls" sont en format "Nombre Stocké sous forme de texte". La colonne A du fichier "Rapport.xls" est en format Date et la colonne C correspond à des villes, elles fonctionnent comme cela donc pas besoin de les modifier. J'aimerai que les données arrivent dans le fichier "Base de données.xlsm" en format "Nombre", afin de pouvoir appliquer certaines formules directement.

Avez-vous des suggestions pour régler mon problème ?

Merci d'avance pour votre aide !

Bonjour

Tu devrais joindre les fichiers concernés ...

Bye !

Bonjour Alexandre, bonjour gmb

Forcément si tu copies comme tu le fais, tu emmènes aussi les problèmes !

Il faudrait essayer 2 ou 3 solutions

  1. après le copier, remplacer un éventuel espace ou blanc insécable le cas échéant
  2. copier une à une chaque case de chaque ligne au risque de ralentir le code en transformant chacune des valeurs des colonnes B/D/E/F/G/H/I/J/K/L/M/N/O
  3. copier d'abord dans un tableau array et ensuite le coller dans le nouveau fichier, cela peut marcher, il faudrait essayer sur un de tes fichiers

comme suit :

DL1 = f1.Range("A" & f1.Rows.Count).End(xlUp).Row
NVL2 = f2.Range("A" & f2.Rows.Count).End(xlUp).Row + 1

data = f1.Range("A2:O" & DL1).Copy 
f2.Range("A" & NVL2).resize(ubound(data),ubound(data,2))=data

mais le problème est d'abord de savoir pourquoi les données sont en texte ?? espace, blanc insécable, apostrophe ??

gmb a parfaitement raison donc de demander un fichier !

Bonjour Alexandre, bonjour gmb

Forcément si tu copies comme tu le fais, tu emmènes aussi les problèmes !

Il faudrait essayer 2 ou 3 solutions

  1. après le copier, remplacer un éventuel espace ou blanc insécable le cas échéant
  2. copier une à une chaque case de chaque ligne au risque de ralentir le code en transformant chacune des valeurs des colonnes B/D/E/F/G/H/I/J/K/L/M/N/O
  3. copier d'abord dans un tableau array et ensuite le coller dans le nouveau fichier, cela peut marcher, il faudrait essayer sur un de tes fichiers

comme suit :

DL1 = f1.Range("A" & f1.Rows.Count).End(xlUp).Row
NVL2 = f2.Range("A" & f2.Rows.Count).End(xlUp).Row + 1

data = f1.Range("A2:O" & DL1).Copy 
f2.Range("A" & NVL2).resize(ubound(data),ubound(data,2))=data

mais le problème est d'abord de savoir pourquoi les données sont en texte ?? espace, blanc insécable, apostrophe ??

gmb a parfaitement raison donc de demander un fichier !

salut

et avec = data*1; non ????

Bonjour à vous et merci de vos réponses !

Désolé de ne pas avoir répondu plus vite le rapport était indisponible durant quelques jours...

Je vous mets le fichier "Rapport" en pièce jointe.

J'ai essayé votre méthode Steelson, mais j'obtiens un message d'erreur lors de l’exécution de la macro " Incompatibilité de type (Erreur 13).

J'ai également remarqué que les colonnes comportant des nombres à virgules sont reconnues en format Nombre.

De plus lorsque j'effectue un *1 dans une cellule cela corrige le problème de format, peut-être une piste ?

Merci d'avance pour votre aide !

Bonjour,

ce que l'on voit surtout c'est qu'il y a des lignes dont les valeurs sont importées en texte (bien que le format soit standard)

le fait de supprimer le centrage permet de le voir d'un seul coup d'œil, quand c'est calé à gauche c'est du texte !

je vais essayer la méthode 3 sinon 2 dans ce que je proposais

capture d ecran 278

une solution

tableau = f1.Cells(1, 1).CurrentRegion.Value
f2.Cells(1, 1).Resize(UBound(tableau), UBound(tableau, 2)) = tableau

Parfait, la macro fonctionne parfaitement toutes les données sont maintenant sous forme de nombre.

J'ai par contre un peu de mal à intégrer ce code à mon ancienne macro, afin de pouvoir lancer cette macro depuis mon fichier "Base de données".

Avez-vous une solution ? Ou il vous faut également le fichier "Base de Données" ?

Si ta macro est celle que tu avais donné au début

Sub transfert()

Dim W1 As Workbook, W2 As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim DL1 As Long, NVL2 As Long

Set W1 = Workbooks("Rapport.xls")
Set W2 = Workbooks("Base de Données.xlsm")
Set f1 = W1.Sheets("Page 1")
Set f2 = W2.Sheets("Data")

NVL2 = f2.Range("A" & f2.Rows.Count).End(xlUp).Row + 1
tableau = f1.Cells(2, 1).CurrentRegion.Value
f2.Range("A" & NVL2).Resize(UBound(tableau), UBound(tableau, 2)) = tableau

End Sub

Merci beaucoup Steelson !

Cela fonctionne parfaitement, encore merci !

Bonne journée à vous.

Rechercher des sujets similaires à "convertir texte nombre"