Célulle à transformer de 2j2h20m2s en minutes

ideret Messages postés 10 Statut Membre -  
ideret Messages postés 10 Statut Membre -
Bonjour,
Je doit transformer une célulle XjXXhXXmXXs en XXXX (minutes)

Conditions :
- 1j = 450min
- Les minutes apparaissent avec 2 chiffres même lorsque c'est inférieur à 10min (05min)
- Les heures sont sur 1 chiffres (1h)
- Des fois je n'est pas de secondes
- Lorsque cela est inférieur à 1 jours, cela n'apparait pas (ex 2h20min)

Le format de céllule est standard et excel ne reconnait pas les valeurs en données temporelles. (j'ai essayé)

J'ai essayé avec la fonction "remplacer" en macro mais j'ai pas réussi.
Le mieux serait une formule qui cherche "j" et multiplie la valeur par 450minutes.
Ou alors une macro qui assimile j à 450, h à 60, m à 1 et s à 0 ? (c'est possible?)

Plusieurs possibilité mais j'ai pas réussi à en faire fonctionner une...

Merci par avance pour l'aide.

Ideret
A voir également:

10 réponses

Utilisateur anonyme
 
Bonjour,
Dans un premier temps isoler le nombre de jours (puisqu’ils ne font même pas 24 h).
Par exemple en exécutant --> données --> Convertir --> Fichier délimité --> séparateur --> autre j
On a ainsi 2 en A1 et 2h20m10s en B1
Sur B1 remplacer successivement h par : m par : s par rien
Mettre B1 en format hh :mm :ss
Puis mettre B1 en format nombre
Dans E1 entrer la formule = SOMME(B1)*1440+450*A1 ce qui donne :1040,16667 minutes
1
xkristi Messages postés 4336 Statut Membre 564
 
'jour !

Pour isoler les jours :
on compte le déplacement de la 1ière cellule jusqu'au j par trouve
et on ramène ce qu'il y a à gauche de ce nombre -1
la derbière formule suffit

XjXXhXXmXXs en XXXX (minutes) nbcar nbre jours
11j02h10m25s =TROUVE("j";A2;1)-1 =GAUCHE(A2;(TROUVE("j";A2;1)-1))
1
Utilisateur anonyme
 
Bonjour xkristi,
Oui c'est beaucoup plus efficace et plus conventionnel.
Un certain flou sur le nombre de caractères m'a fait éviter les fonctions "texte": XjXXhXXmXXs ne correspond pas avec "Les heures sont sur 1 chiffres (1h)".
D'autres incertitudes:
Des fois je n'est pas de secondes
- Lorsque cela est inférieur à 1 jours, cela n'apparait pas

Il est prudent d'attendre des nouvelles de Ideret avant d'aller plus loin.
0
xkristi Messages postés 4336 Statut Membre 564 > Utilisateur anonyme
 
Salut tontong

J' ai simplement donné la façon de retrouver les jours
après à lui de chercher un peu avec notre aide à éclater sa cellule initiale en jours , heures , minutes , secondes

avec les fonctions SI , NBCAR, GAUCHE , TROUVE ...
0
ideret Messages postés 10 Statut Membre 1
 
J'ai pas trop eu le temps de retravailler dessus...

J'ai trouvé un début de solution avec la fonction "replace" en vba qui me permet de remplacer le contenu mais sans une lettre, la macro bug... je compte faire des boucles...

Sinon une formule avec find, gauche, nb, somme, trouve ... est trop complexe à faire pour moi lol parce que des fois j'ai des j et des fois non donc ca crait une fonction "si" qui deviens super longue...

Nan je compte passer par une macro.. je vous tiens au courant mais je pense que c'est bon...

Merci pour votre aide, je posterais ma solution.

PS : ta solution tong à l'air pas mal aussi!
0
Utilisateur anonyme
 
Bonjour,
j'ai essayé en vain quelques astuces pour éviter les fonctions Si voici donc une formule avec des SI:
=450*SI(ESTERREUR(1*(GAUCHE(A1;(TROUVE("j";A1;1)-1))));0;GAUCHE(A1;(TROUVE("j";A1;1)-1)))+60*STXT(A1;(TROUVE("h";A1;1))-1;1)+STXT(A1;(TROUVE("h";A1;1))+1;2)+SI(ESTERREUR(1*(STXT(A1;(TROUVE("m";A1;1))+1;2)));0;STXT(A1;(TROUVE("m";A1;1))+1;2))/60
Il n'y a que 2 Si:1 pour"j" et 1 pour "s", ce qui suppose qu'il n'y a pas de défaut pour "h" et "m".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zigzag
 
J'arrive à ça :

En A1 : 3j2h10m15s

En A2 : =GAUCHE(SUBSTITUE(SUBSTITUE($A$1;"j";"*450+");"h";"*60+");CHERCHE("m";SUBSTITUE(SUBSTITUE($A$1;"j";"*450+");"h";"*60+"))-1)

Ce qui affiche 3*450+2*60+10

On ignore les secondes

Insertion
Nom définir
créer le nom 'evaluer'
en bas, fait référence à , inscrire :
=EVALUER("="&Feuil1!$A$2)

En A3 =evaluer
0
Zigzag
 
Correction pour rester en relatif et pouvoir copier l'ensemble.

En A2 : =GAUCHE(SUBSTITUE(SUBSTITUE(A1;"j";"*450+");"h";"*60+");CHERCHE("m";SUBSTITUE(SUBSTITUE(A1;"j";"*450+");"h";"*60+"))-1)

Ce qui affiche 3*450+2*60+10

On ignore les secondes

Insertion
Nom définir
créer le nom 'evaluer'
en bas, fait référence à , inscrire :
=EVALUER("="&Feuil1!A2)

En A3 =evaluer
0
ideret Messages postés 10 Statut Membre 1
 
Well, pas mal les reponses mais je ne suis pas passé par une formule car il y a 3 possibilités d'affichage d'ou la compléxité (que j'ai évité) :
- 1j 20h20m
- 20h20m
- 20m2s
En fait il y a toujours "m" donc la macro que j'ai fais c'est :

Sub Remplacer()
'les valeurs
Dim result As String
Dim result2 As String
Dim m As String

'Je fait un remplacer par : enlèvement des espaces vides, j par "*450+" et h par "*60+"
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="j", Replacement:="*450+", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="h", Replacement:="*60+", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

'et je calcul en remplacant "m" par "*1" et "s" par "*0"
result = ActiveCell.Text
On Error GoTo m
result2 = Evaluate(Replace(Replace(result, "m", "*1+"), "s", "*0"))
ActiveCell.FormulaR1C1 = result2
Exit Sub

'si erreur c'est que je suis dans une autre forme d'affichage et je modifie que m en "*1", evaluate fait le reste
m:
result2 = Evaluate(Replace(result, "m", "*1"))
ActiveCell.FormulaR1C1 = result2
End Sub

Maintenant je cherche à l'appliquer à une séléction..
0
albert4269 Messages postés 6 Statut Membre
 
Bonjour

J'ai testé la solution proposée par zigzag en 8, il me semble qu'elle correspond bien à ta demande.
Que cherches-tu de plus ?
0
ideret Messages postés 10 Statut Membre 1
 
Je cherche à appliquer ma macro à une séléction sachant que je veux que cela face une boucle sur chaque céllule.
Je sais pas si j'ai été clair en gros je veux que :

- je séléctionne (A1:A5)
- la macro se re-execute pour chaque céllule A1 puis A2, A3, A4, A5

J'ai un "on error goto" qui lorsque je l'applique à une séléction empreinte le même chemin dans ma macro pour toutes les cellules de ma macro...
0
ideret Messages postés 10 Statut Membre 1
 
Pour ceux que ca intéresserait :

'les valeurs
Dim result As String
Dim result2 As String
Dim again As String

'Dim cel As Range
Range("R2:R32").Select
'fonction remplace par : enlèvement des espaces vides, "j" par "*450+", "h" par "*60+", et "s" par "*0"
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="j", Replacement:="*450+", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="h", Replacement:="*60+", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="s", Replacement:="*0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

'j'applique à ma séléction donc ici ("R2 à R32")
Range("R2").Select
i = 2
again:
If i <> 33 Then
'If Range("R" & i).Value <> Range("R40") Then
Range("R" & i).Select
'If activellcell.Find("s") = True Then
'calcul en remplacant "m" par "*1" et "s" par "*0"
result = ActiveCell.Text
result2 = Evaluate(Replace(result, "m", "*1"))
ActiveCell.FormulaR1C1 = result2
'dans la cas ou j'ai des "s" car sinon ca plante ma macro de faire "*1+" sans "s" derrière
If result2 = 0 Then
result2 = Evaluate(Replace(Replace(result, "m", "*1+"), "s", "*0"))
ActiveCell.FormulaR1C1 = result2
End If
ActiveCell.Calculate
i = i + 1
GoTo again
End If
End Sub

Maintenant je cherche à ce qu'il trouve par lui même la séléction.
0