XL 2016 Ne garder que les chiffres dans la colonne A et remplacer les h et '

Kelbret

XLDnaute Nouveau
Bonjour à tous,

Je me heurte à un problème enfin plutôt deux.

Le premier est que je souhaite supprimer tous les caractères autres que des chiffres dans la colonne A de mon fichier.

Individu 7909: NOM1, PRENOM1Info1
1346​
230h23'430h07'090h56'760h06'97
67,5​
Info9
7977​
47h59'750h09'900h57'970h09'59
90,9​
Individu 7902: NOM2, PRENOM2Info2
2119​
230h53'330h05'070h74'770h04'77
76,4​
Info7
9097​
77h45'050h00'560h04'750h00'47
77,4​
Individu 7920: NOM3, PRENOM3Info3
1872​
253h53'540h05'060h59'000h05'77
66,7​
Info4
7776​
59h06'540h07'470h75'490h07'94
97,9​
Individu 7927: NOM4, PRENOM4Info4
2216​
245h22'230h07'560h77'700h07'47
66,9​
Info5
9797​
47h79'770h07'790h57'570h09'77
79,9​
Individu 5977: NOM5-COMPOSE5, PRENOM5Info5
349​
33h25'430h06'760h49'090h06'99
66,7​
Info6
779​
9h40'540h07'450h06'970h07'79
77,7​
Individu 6975: NOM6 COMPOSE6, PRENOM6Info6
1160​
233h34'230h07'040h40'590h05'79
65,9​
Info7
7749​
77h75'470h07'450h75'790h07'97
76​

J'aurais bien la solution de JP14 :

VB:
Dim val1 As String
Dim i As Long
Dim cell As Range
Dim oldCalculation As Variant '
Dim reponse As Variant

oldCalculation = Application.Calculation
Application.Calculation = xlCalculationManual

'expression.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
On Error GoTo suite
Set reponse = Application.InputBox(Prompt:="Veuillez sélectionner la zone à convertir", Type:=8, Default:="")

Application.ScreenUpdating = False 'gele l'ecran
Application.EnableEvents = False
Application.DisplayAlerts = False 'interdit les messages d'avertissements

For Each cell In reponse
    If cell = "" Then
    Else
        val1 = ""
        For i = 1 To Len(cell)
            If Asc(Mid(cell, i, 1)) > 47 And Asc(Mid(cell, i, 1)) < 59 Then val1 = val1 & Mid(cell, i, 1)
        Next
        cell = val1
    End If
Next cell
fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = oldCalculation
'Application.DisplayAlerts = True ' par défaut
Exit Sub
suite:
Resume fin
End Sub

Mais elle ne fait pas le remplacement automatique dans la colonne A il faut sélectionner la zone et le résultat renvoyé n'est pas sous forme de nombre.


Pour mon deuxième problème j'ai bien essayé avec l'enregistreur de macro, cela fonctionne pas mal sauf pour les cases où il manque un 0 dans les heures.

VB:
Sub Remplacerhetguillemets()
'
' Macro2 Macro
'

'
    Sheets("Résultat voulu").Select
    Columns("B:O").Select
    Selection.Replace What:="'", Replacement:=":", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    Selection.Replace What:="h", Replacement:=":", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    Selection.NumberFormat = "[$-x-systime]h:mm:ss AM/PM"
    Range("F4").Select
    ActiveCell.FormulaR1C1 = "0:77:70"
    Range("F5").Select
    Sheets("Source").Select
End Sub


Auriez-vous une piste à me donner pour que je puisse trouver la solution à mes problèmes.

Merci d'avance !
 

Pièces jointes

  • Test.xlsm
    21.1 KB · Affichages: 7
Solution
Bonjour,

Pour "ne garder que les chiffres", je te propose ceci :
VB:
Sub GarderChiffres()
'
    Application.ScreenUpdating = False
    Set MaCel = Sheets("Source").Range("A1")
    i = 0
    While MaCel.Offset(i, 0).Value <> ""
        Retour = ""
        j = 1
        While Mid(MaCel.Offset(i, 0).Value, j, 1) <> ":"
            MonCode = Mid(MaCel.Offset(i, 0).Value, j, 1)
            If Asc(MonCode) > 47 And Asc(MonCode) < 58 Then Retour = Retour & MonCode
            j = j + 1
        Wend
        MaCel.Offset(i, 0).Value = CDec(Retour)
        i = i + 1
    Wend

End Sub



ça représente quoi 9'90 ??? 10'30'' ?

Et comment "230h23'43" devient "14:23:43" ???

etc. etc. etc.

TooFatBoy

XLDnaute Barbatruc
Il garde bien les chiffres de chaque cellule de la colonne A il me semble.

Il a mis comme exemple :
7909: NOM1, PRENOM1 ==> Réponse de la macro 770911
donc pour moi la macro a bien fait son travail de garder les chiffres car dans la réalité il doit avoir :
7909: DUPONT, JEAN ==> Réponse de la macro 7709
Oui, moi je disais elle fait ce qui est demandé (garder tous les chiffres) mais ne fait pas ce qui est voulu (ne garder que le premier groupe de chiffres).
Je n'avais effectivement pas pensé qu'IRL il n'y aurait pas de "Nom1" ni de "prénom1"... Suis trop con ! 😔 Bien vu ! 👍

@Kelbret à bien résumé en fait ;)
Exact.
 

Phil69970

XLDnaute Barbatruc
Re


Non marcel simplement c'est pas pour rien que l'on souhaite un fichier représentatif de la part du demandeur.
Il ne s'est sans doute même pas rendu compte que ses exemples allaient poser un pb vis à vis de son énoncé !!!

Perso je dois avouer que quand j'ai exécuté ma macro je me suis demandé d’où sortait ces 70911 et c'est en relisant les données une 2eme fois que j'ai vu les ...... 1 dans les exemples du demandeur 🤣

@Phil69970
 

Statistiques des forums

Discussions
315 091
Messages
2 116 109
Membres
112 662
dernier inscrit
lou75