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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
2 K
Retour