fraction & format date dans excel

foufie

XLDnaute Nouveau
bonjour ,

j'ai des fractions (import ) qui ne sont pas reconnus par excel comme tel
( bien entendu j'ai déjà essaye avec les formats fraction / format special , collage special , ect
sans grande réussite , *1 , .....


soit elle sont au format date ( 01/12 ) devient > 01 decembre 2017
soit elle sont au format text "36 /1" reste "36 /1" et donc je ne peux pas ensuite tirer du plus grand au plus petit ( poar exemple )

pour le moment dans mes recherches ce qu'i s'approche le plus de mes besoin semble etre le code de ce post de " PierreJean "

Sub test()
For n = 1 To Range("C65536").End(xlUp).Row
If InStr(Range("C" & n), "/") = 0 Then
x = Format(Range("C" & n), "mm")
y = Format(Range("C" & n), "yy")
MsgBox (x & " " & y)
Range("C" & n).NumberFormat = "@"
Range("C" & n) = x & "/" & y
End If
Next n
End Sub

mais cela ne me donne pas le bon résultat
exemple 12 /1 chez moi au format nombre devient 42747 > avec ce code vba cela devient 1 /17 ce qui n'est pas un bon

12/1 > 42747,00 > devient 1 /17

https://www.excel-downloads.com/threads/coller-dans-excel-sans-reconnaissance-du-format-date.82151/

merci de votre aide car la je patauge ...
 

Pièces jointes

  • cote.xlsm
    12.1 KB · Affichages: 47

Dranreb

XLDnaute Barbatruc
Bonjour.
Je pense que le mieux qu'on puisse faire c'est comme ça :
VB:
Sub test()
Dim PlgDon As Range, T(), L As Long, TSpl$()
Set PlgDon = Rows(3).Resize([C1000000].End(xlUp).Row - 2)
T = PlgDon.Columns("C").Value
For L = 1 To UBound(T, 1)
   Select Case VarType(T(L, 1))
      Case vbDate: T(L, 1) = Day(T(L, 1)) / Month(T(L, 1))
      Case vbString: TSpl = Split(T(L, 1), "/"): T(L, 1) = TSpl(0) / TSpl(1)
      End Select: Next L
PlgDon.Columns("D").NumberFormat = "general"
PlgDon.Columns("D").Value = T
PlgDon.Columns("E").NumberFormat = "#/###"
PlgDon.Columns("E").Value = T
End Sub
 

foufie

XLDnaute Nouveau
merci de ta réponse Dranreb -

je suis loin d’être un pro en vba mais tu dois t'en douter ( et a partir de Select case je suis un peu perdu ( je connaissais même pas le terme Select case )

ceci étant dit

ton code fonctionne mais chez moi il y a un souci pour la case c5
j'ai comme résultat > 43026 au lieu de 1.8

en mettant bout a bout les 2 codes ca fonctionne bien resultats souhaité
mais bon on doit pouvoir faire plus simple mais la moi je vois pas trop ce que je e dois modifier dans ton code pour réussir


Code:
Sub testtt() 
For n = 1 To Range("C65536").End(xlUp).Row

If InStr(1, Range("C" & n), "/") = 0 Then
  d = Format(Range("C" & n), "DD")
  x = Format(Range("C" & n), "mm")

  Range("C" & n).NumberFormat = "@"
  Range("C" & n) = d & "/" & x
End If

Next n

Call test


End Sub
Sub test()
Dim PlgDon As Range, T(), L As Long, TSpl$()
Set PlgDon = Rows(3).Resize([C1000000].End(xlUp).Row - 2)
T = PlgDon.Columns("C").Value

For L = 1 To UBound(T, 1)

   Select Case VarType(T(L, 1))
  
      Case vbDate: T(L, 1) = Day(T(L, 1)) / Month(T(L, 1))
      Case vbString: TSpl = Split(T(L, 1), "/"): T(L, 1) = TSpl(0) / TSpl(1)
     
      End Select: Next L
     
     
PlgDon.Columns("D").NumberFormat = "general"
PlgDon.Columns("D").Value = T
'PlgDon.Columns("E").NumberFormat = "###/###"  ' j'ai pas vraiment besoin de XXX /1
'PlgDon.Columns("E").Value = T
End Sub
 

foufie

XLDnaute Nouveau
après quelques dans tous les sens , c'est bon ( résolu )

il me suffit de mettre dans un 1 er tps de mettre en format date toutes la colonne C
car pour la cellule c5 c'est un format scientifique j'e n'avais pas fait attention avant !

( je le ferai de façon automatique ensuite )

et ensuite d'appliquer votre macro et la cela fonctionne y compris pour a cellule c5 ( 1.8 )


Merci ...
 

Dranreb

XLDnaute Barbatruc
Ça ne servira à rien. Le changement de format à postériori d'une page de cellules ne change strictement rien à son contenu déjà enregistré.
Il peut seulement conditionner un tout petit peu l’interprétation qui sera faite par la suite de nouvelles entrées texte.
 

foufie

XLDnaute Nouveau
oui je suis d'accord on ne change pas le contenu de la cellule , on lui dit juste comme il doit l’interpréter date , valeurs texte ...

je ne sais pas l'expliquer mais cela fonctionne
an ajoutant juste cette ligne de code en début de votre code j'ai les bons résultats

Columns("C:C").NumberFormat = "d/m;@"
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
VarType(T(3, 1)) = vbDouble et sa valeur est 43026. On ne peut rien y faire, c'est comme ça.
Et je n'ai aucune idée d'où vous pourriez bien tirer que ça devrait valoir 1,8
;)
43026 c'est aussi 18/10/2017 (18 oct de l'année en cours)
soit 1,8 sous forme de fraction (18/10, 9/5, 27/15)
si saisie de 18/10 dans une cellule "Bydesign" Excel détecte une date 18 oct 2017 (43026)
si saisie de 9/5 dans une cellule "Bydesign" Excel détecte une date 9 mai 2017 (42864)
si saisie de 27/15 dans une cellule "Bydesign" Excel détecte un texte
et pourtant dans ces 3 cas la valeur fractionnaire vaut 1,8...

:( il ne faut pas toujours laisser EXCEL décider de l'interprétation d'une valeur saisie ou importée
l'étape 3 de l'assistant de conversion(importation) est souvent à considérer avec circonspection ...:rolleyes:
 

foufie

XLDnaute Nouveau
je crois que GEEDEE a mis le doigt sur quelques choses

j'ai pas reussi a obtenir les bons resultats avec

<< Case vbDouble: If T(L, 1) > 42735 And Int(T(L, 1)) = T(L, 1) Then T(L, 1) = Day(T(L, 1)) / Month(T(L, 1)) >>


du coup je conserve mon

<< Columns("C:C").NumberFormat = "d/m;@" >> et je vais faire avec

merci a vous
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

comme dit modeste, c'est plus fiable de travailler avec le fichier texte original avant importation. Souvent c'est trop tard après, surtout si le données peuvent être interprétées comme des dates, dont certaines peuvent être inversées mm/jj

Et si tu y as accès, le format d'une fraction pour excel c'est 0 suivi d'un espace suivi de la fraction.
0 1/12 => 1/12 et non 01/12/2017
eric
 

foufie

XLDnaute Nouveau
le code fourni par Dranreb fonctionne tres bein

il est delicat de mettre le fichier original ( car complexe & lourd ( enfin je devrais dire code " bordelique":p ))
et vu qu'il s'agit d’import de page source web ( et que j'utilise une procédure " special " trouve sur le net )
et que je passe par le presse papier et que je fini par "past "pour coller ca dans ma page excel
oui y a plus simple mais vu le grand norme de page je dois ruser

j'ai bien essayer des méthodes specail paste mais sans réussite ( la c'est la procédure qu'i n’apprécie pas ) & comme je le dit dans mon 1 er post j'ai deja chercher et essayer pas mal de "systeme" mais sans resultat

donc je vais faire avec le code de Dranreb mais merci a vous tt de meme
 

Statistiques des forums

Discussions
312 206
Messages
2 086 201
Membres
103 156
dernier inscrit
Ludo94130