Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1060 connectés 

 



Dernière réponse
Sujet : Récupérer les valeurs d'un csv et changer le format au vol
patrice33740

valerypetit a écrit :

En plus, j'ai tendance à répéter que l'important n'est pas ce que l'on dis, mais ce que les autres comprennent  :whistle:


Comment veux-tu qu'on comprenne que c'est dans la colonne F de la feuil1 si tu ne le précises pas ?
Ceci n'apparaît nulle part
00000.01
00000.00
00104.13
00104.14
00000.02
00001.05
Ton code modifies le format de la colonne F de la feuille csv
et il écrit autre chose en F de feuil1.
On se demande donc si c'est F de la feuille csv qui contient ça.
Parler de ce format ne fait qu'embrouiller le problème.
 
Comme ce n'était pas clair je demande des précisions
 
Et tu répond :
à la fin de l’exécution de la macro, la colonne F (de la feuille 1) doit contenir les valeurs de la colonne A (de la feuille csv) après manipulation, soit :
D7V:HR00000.01
D7V:HR00000.00
D7V:HR00104.13
D7V:HR00104.14
D7V:HR00000.02
D7V:HR00001.05
donc au format x.xx  
 
Et tu répètes les mêmes valeurs au post suivant !
 
Comme tu dis l'important c'est ce que les autres comprennent.
 
Pour cela il faut être clair, net et précis, et écrire simplement :
- Je veux avoir en F :  
0.01
0.00
104.13
104.14
0.02
1.05  
 
CQFD


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
patrice33740

valerypetit a écrit :

En plus, j'ai tendance à répéter que l'important n'est pas ce que l'on dis, mais ce que les autres comprennent  :whistle:


Comment veux-tu qu'on comprenne que c'est dans la colonne F de la feuil1 si tu ne le précises pas ?
Ceci n'apparaît nulle part
00000.01
00000.00
00104.13
00104.14
00000.02
00001.05
Ton code modifies le format de la colonne F de la feuille csv
et il écrit autre chose en F de feuil1.
On se demande donc si c'est F de la feuille csv qui contient ça.
Parler de ce format ne fait qu'embrouiller le problème.
 
Comme ce n'était pas clair je demande des précisions
 
Et tu répond :
à la fin de l’exécution de la macro, la colonne F (de la feuille 1) doit contenir les valeurs de la colonne A (de la feuille csv) après manipulation, soit :
D7V:HR00000.01
D7V:HR00000.00
D7V:HR00104.13
D7V:HR00104.14
D7V:HR00000.02
D7V:HR00001.05
donc au format x.xx  
 
Et tu répètes les mêmes valeurs au post suivant !
 
Comme tu dis l'important c'est ce que les autres comprennent.
 
Pour cela il faut être clair, net et précis, et écrire simplement :
- Je veux avoir en F :  
0.01
0.00
104.13
104.14
0.02
1.05  
 
CQFD

valerypetit Je ne suis pas tout à fait d'accord avec toi, mais vu que tu m'apporte la solution, je ne t'en tiendrais pas rigueur.  :D  
En plus, j'ai tendance à répéter que l'important n'est pas ce que l'on dis, mais ce que les autres comprennent  :whistle:  
 

Code :
  1. donc une fois que j'ai collé mes valeurs dans les cellules de destination "format texte", elle apparaissent comme ci-dessous :
  2. 00000.01
  3. 00000.00
  4. 00104.13
  5. 00104.14
  6. 00000.02
  7. 00001.05
  8. J'aurai besoin de supprimer tous les zéros en têtes afin d'avoir un format par défaut en x.xx surtout pour les valeurs comme 0.00 ou 1.00.
  9. j'ai essayer de manipuler les formats mais n'arrive pas à l'écriture voulu à la fin "x.xx au format texte"


Dans tous les cas, je te remercie beaucoup pour ton aide  :jap:

patrice33740

valerypetit a écrit :

Mais si, c'est ce que je m'entête à demander depuis le début.....


Relis tes demandes, malgré ma demande de précision, tu n'a jamais écris qu'en colonne F tu voulais :
0.01
0.00
104.13
104.14
0.02
1.05  
Tu aurais eu la bonne réponse dès le début !
(Sinon à mauvaise question, mauvaise réponse)
 

valerypetit a écrit :

Par contre je voudrais un point à la place de la virgule


Voici donc le code :

Code :
  1. Sub Récupération_Colonnes()
  2. Dim i As Long
  3. Dim t, e, f, k
  4.   ' Remplir les tableaux de données
  5.   With Worksheets("csv" )
  6.     e = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Value
  7.     ReDim f(1 To UBound(e), 1 To 1)
  8.     k = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Offset(0, 16).Value
  9.   End With
  10.   ' Traiter les données
  11.   For i = 1 To UBound(e)
  12.     t = Split(e(i, 1), ":" )
  13.     f(i, 1) = Replace(Format(Val(Mid(t(1), 3)), "0.00" ), ",", "." )
  14.     e(i, 1) = Left(t(1), 2)
  15.   Next
  16.   ' Mettre en place les données
  17.   With Worksheets("Feuil1" )
  18.     .Cells.Clear
  19.     .Range("E6" ).Resize(UBound(e)).Value = e
  20.     With .Range("F6" ).Resize(UBound(f))
  21.       .NumberFormat = "@"
  22.       .Value = f
  23.     End With
  24.     .Range("K6" ).Resize(UBound(k)).Value = k
  25.   End With
  26. End Sub

valerypetit

patrice33740 a écrit :

En lisant entre les lignes, peut-être qu'en F tu voudrais obtenir, au format texte :
0,01
0,00
104,13
104,14
0,02
1,05


 
Mais si, c'est ce que je m'entête à demander depuis le début.....  :sweat:  
 
Par contre je voudrais un point à la place de la virgule  :D, mais du coup, ça a peut être un rapport avec les paramètres régionaux?

patrice33740 Je ne comprend pas, c'est exactement ce que fait la modification proposée !
Tu obtiens en F :
D7V:HR00000.01
D7V:HR00000.00
D7V:HR00104.13
D7V:HR00104.14
D7V:HR00000.02
D7V:HR00001.05  
 
Avec ce code :

Code :
  1. Sub Récupération_Colonnes()
  2. Dim i As Long
  3. Dim t, e, f, k
  4.   ' Remplir les tableaux de données
  5.   With Worksheets("csv" )
  6.     e = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Value
  7.     ReDim f(1 To UBound(e), 1 To 1)
  8.     k = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Offset(0, 16).Value
  9.   End With
  10.   ' Traiter les données
  11.   For i = 1 To UBound(e)
  12.     t = Split(e(i, 1), ":" )
  13.     f(i, 1) = e(i, 1)
  14.     e(i, 1) = Left(t(1), 2)
  15.   Next
  16.   ' Mettre en place les données
  17.   With Worksheets("Feuil1" )
  18.     .Range("E6" ).Resize(UBound(e)).Value = e
  19.     .Range("F6" ).Resize(UBound(f)).Value = f
  20.     .Range("K6" ).Resize(UBound(k)).Value = k
  21.   End With
  22. End Sub


 
En lisant entre les lignes, peut-être qu'en F tu voudrais obtenir, au format texte :
0,01
0,00
104,13
104,14
0,02
1,05
mais tu ne l'as jamais demandé clairement !
Avec ce code :

Code :
  1. Sub Récupération_Colonnes()
  2. Dim i As Long
  3. Dim t, e, f, k
  4.   ' Remplir les tableaux de données
  5.   With Worksheets("csv" )
  6.     e = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Value
  7.     ReDim f(1 To UBound(e), 1 To 1)
  8.     k = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Offset(0, 16).Value
  9.   End With
  10.   ' Traiter les données
  11.   For i = 1 To UBound(e)
  12.     t = Split(e(i, 1), ":" )
  13.     f(i, 1) = Format(Val(Mid(t(1), 3)), "0.00" )
  14.     e(i, 1) = Left(t(1), 2)
  15.   Next
  16.   ' Mettre en place les données
  17.   With Worksheets("Feuil1" )
  18.     .Range("E6" ).Resize(UBound(e)).Value = e
  19.     .Range("F6" ).Resize(UBound(f)).Value = f
  20.     .Range("K6" ).Resize(UBound(k)).Value = k
  21.   End With
  22. End Sub

valerypetit Bonjour patrice,
 
- Je veux avoir en F ce qui est en gars  :pt1cable:  
 
D7V:HR00000.01
D7V:HR00000.00
D7V:HR00104.13
D7V:HR00104.14
D7V:HR00000.02
D7V:HR00001.05
 
- Je ne veux aussi que: 0.00 ne soit pas réduit en 0   :hello:  
 
- Et pour finir, je veux que la colonne soit au format texte (sant que ça ne modifie l'écriture de 0.00 en 0)
   par ce que le logiciel à qui j'envoie le fichier xls final me l'impose..... :whistle:
 
voila :D
patrice33740 Je ne comprend pas ...
Tu veux donc en F de la feuille 1 la même chose qu'en A de la feuille csv ...
A quoi sert le format par défaut en x.xx  ????
Pourquoi faire :

Code :
  1. Worksheets("Feuil1" ).Cells(3 + i, 6) = Right(tmp(1), Len(tmp(1)) - 2)


au lieu de faire simplement :

Code :
  1. Worksheets("Feuil1" ).Cells(3 + i, 6) = .Cells(i, 1)


 
Dans mon code, au lieu de
    f(i, 1) = Right(t(1), Len(t(1)) - 2)
il faudrait alors :
    f(i, 1) = e(1, 1)
 
 
Tout ça n'est vraiment pas clair !!!!

valerypetit Bonjour Patrice
 
 

patrice33740 a écrit :


Ce code n'agit pas sur le contenu de la colonne F.


mauvaise interprétation de ma part, je pensais que de cette façon, je forçais excel à interpréter les valeurs différemment....
 

patrice33740 a écrit :


Que contient la colonne F ???
Où voudrais-tu le résultat x.xx au format texte ?


à la fin de l’exécution de la macro, la colonne F (de la feuille 1) doit contenir les valeurs de la colonne A (de la feuille csv) après manipulation, soit :
 
D7V:HR00000.01
D7V:HR00000.00
D7V:HR00104.13
D7V:HR00104.14
D7V:HR00000.02
D7V:HR00001.05
 
donc au format x.xx
 

patrice33740 a écrit :


Pour un code plus rapide, j'utiliserais des tableaux :

Code :
  1. Sub Récupération_Colonnes()
  2. Dim i As Long
  3. Dim t, e, f, k
  4.   ........



Merci pour ton code, je l'ai copié dans mon projet.
ne maitrisant pas très bien les tableaux je ne le comprend pas aussi bien que ce que j'avais fais, mais je tacherais de me pencher dessus ;-).
 
 
Je suis désolé, je pensais avoir correctement décrit ma problématique, j’espère avoir été suffisament claire cette fois-ci  :D  
 
Merci à toi!!!  :jap:  

patrice33740 Bonjour,
 
Ce code n'agit pas sur le contenu de la colonne F.
Il éclate les valeurs de la colonne A et place le résultat sur la feuille Feuil1
 
Que contient la colonne F ???
Où voudrais-tu le résultat x.xx au format texte ?
 
Notes que le fait de changer le format d'une cellule ne modifie pas son contenu :  
- si c'est du texte quand on applique le format numérique "0.00", ça reste du texte !  
- si c'est un nombre quand on applique le format texte "@", ça reste un nombre !
Pour modifier le contenu d'une cellule, il faut agir sur sa valeur.
 
Pour un code plus rapide, j'utiliserais des tableaux :

Code :
  1. Sub Récupération_Colonnes()
  2. Dim i As Long
  3. Dim t, e, f, k
  4.   ' Remplir les tableaux de données
  5.   With Worksheets("csv" )
  6.     e = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Value
  7.     ReDim f(1 To UBound(e), 1 To 1)
  8.     k = .Range("A3", .Cells(.Rows.Count, "A" ).End(xlUp)).Offset(0, 16).Value
  9.   End With
  10.   ' Traiter les données
  11.   For i = 1 To UBound(e)
  12.     t = Split(e(i, 1), ":" )
  13.     f(i, 1) = Right(t(1), Len(t(1)) - 2)
  14.     e(i, 1) = Left(t(1), 2)
  15.   Next
  16.   ' Mettre en place les données
  17.   With Worksheets("Feuil1" )
  18.     .Range("E6" ).Resize(UBound(e)).Value = e
  19.     .Range("F6" ).Resize(UBound(f)).Value = f
  20.     .Range("K6" ).Resize(UBound(k)).Value = k
  21.   End With
  22. End Sub

valerypetit Bonjour,
 
Je cherche à faire une moulinette pour envoyer des valeurs d'un logiciel à un autre via la manipulation de fichiers csv et xls.
 
dans le fichier d'origine (csv), je récupère "entre autre" les valeurs suivantes :
 
D7V:HR00000.01
D7V:HR00000.00
D7V:HR00104.13
D7V:HR00104.14
D7V:HR00000.02
D7V:HR00001.05
 
 
que je j'éclate pour avoir les valeurs numériques dans une cellule à part.
 
seulement, dans le fichier de destination (xls), les cellules doivent être au format texte afin d'être correctement récupérés par le logiciel final.
 
donc une fois que j'ai collé mes valeurs dans les cellules de destination "format texte", elle apparaissent comme ci-dessous :
 
00000.01
00000.00
00104.13
00104.14
00000.02
00001.05
 
J'aurai besoin de supprimer tous les zéros en têtes afin d'avoir un format par défaut en x.xx surtout pour les valeurs comme 0.00 ou 1.00.
 
j'ai essayer de manipuler les formats mais n'arrive pas à l'écriture voulu à la fin "x.xx au format texte"
 
voici mon bout de code ;-).
 
Merci pour votre aide.
 
Valery
 

Code :
  1. Sub Récupération_Colonnes()
  2. Dim sH As Worksheet
  3. Dim Derligne As Long, i As Long
  4. Dim tmp
  5.     Application.ScreenUpdating = False
  6.     Set sH = Worksheets("csv" )
  7.    
  8.     Columns("F:F" ).Select
  9.     Selection.NumberFormat = "0.00"
  10.    
  11.     With sH
  12.         Derligne = .Range("A" & Rows.Count).End(xlUp).Row
  13.         For i = 3 To Derligne
  14.             tmp = Split(.Cells(i, 1), ":" )
  15.            
  16.             Worksheets("Feuil1" ).Cells(3 + i, 5) = Left(tmp(1), 2)
  17.             Worksheets("Feuil1" ).Cells(3 + i, 6) = Right(tmp(1), Len(tmp(1)) - 2)
  18.             Worksheets("Feuil1" ).Cells(3 + i, 11) = .Cells(i, 17)
  19.         Next
  20.     End With
  21.     Set sH = Nothing
  22.    
  23.     Columns("F:F" ).Select
  24.     Selection.NumberFormat = "@"
  25. End Sub


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR