Célulle à transformer de 2j2h20m2s en minutes
ideret
Messages postés
10
Statut
Membre
-
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
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:
- Célulle à transformer de 2j2h20m2s en minutes
- Transformer majuscule en minuscule word - Guide
- Transformer une image en icone - Guide
- Transformer epub en kindle - Guide
- Transformer clavier qwerty en azerty - Guide
- Transformer kindle en epub - Guide
10 réponses
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
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
'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))
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))
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.
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.
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!
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!
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".
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".
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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..
- 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..
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 ?
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 ?
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...
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...
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.
'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.