Extraire nombre écrit en début de cellule

La Julie

XLDnaute Nouveau
Bonjour à tous,

Malgré mes recherches je n'ai toujours pas trouvé une solution à mon problème.

Chaque mois j' extrait des données d’une BDD ; de cet export, dans une colonne, je dois extraire le nombre en début de chaque cellule et les additionner, la difficulté c’est que les cellules sont remplies avec des signes de ponctuation divers et variés : ( :) ( .) ( ;) ( ), les mots qui suivent peuvent être aussi accolés au nombre. Exemples:

111kgs ;madame,paris
1111111KGS-madame-000-paris
1111111KGSmadame000paris
1111111- KGS-madame-000-paris
1111111 KGS-madame- -paris
0,0 KgS.madame
111madame:12000;paris
0
Kgs
(une ligne sans rien d’écrit)…

Au début de chaque mois, pour extraire les premiers chiffres, j’utilise une macro qui supprime tous ces signes puis qui crée une autre colonne pour faire une conversion …mais tous les mois je rencontre des difficultés dues aux lettres accolées à la fin du nombre et à l’imagination des remplisseurs de la BDD (je vais avoir tous les signes de ponctuation dans toutes les langues:rolleyes:)

Aussi en prévision du mois prochain, je cherche une macro ou une formule pour n’extraire que le nombre qui est toujours placé au départ et quelle que soit sa longueur (normalement ce n’est pas plus de 6 chiffres).

Même si je préfère la macro à la formule, je prends la solution qui existe.

Merci par avance
 

Softmama

XLDnaute Accro
Re : Extraire nombre écrit en début de cellule

Bonjour,

un essai:
VB:
Sub test()
Dim t, c As Range
For Each c In Range("A1:A100") 'mettre l'adresse où se trouvent les cellules à traiter
  t = 1
  If c <> "" Then
    Do While Mid(c, t, 1) Like "[0-9]*"
      t = t + 1
    Loop
    c.Offset(0, 1) = Mid(c, 1, t - 1) 'Le report dans la colonne d'à côté
  End If
Next c
End Sub
 

Softmama

XLDnaute Accro
Re : Extraire nombre écrit en début de cellule

ou éventuellement, à tester :
VB:
Sub test2()
Dim c As Range
For Each c In Range("A1:A100") 'mettre l'adresse où se trouvent les cellules à traiter
    c.Offset(0, 1) = IIf(c = "", "", Val(c)) 'Le report dans la colonne d'à côté
Next c
End Sub
 

La Julie

XLDnaute Nouveau
Re : Extraire nombre écrit en début de cellule

Je viens de tester les 2 macros de Softmama avec mes données réelles. Elles fonctionnent toutes les 2 mais j'ai découvert une petite chose que je dois traiter avant de lancer la macro: certains écrivent les nombres avec la lettre O (ou o):mad:

Dans mon cas la macro 1 a deux insuffisances: elle ne prend pas en compte la séparation des milliers et ensuite elle ne met pas 0 quand la cellule commence par un texte

La macro 2 me va à merveille, par contre j'ai du enlever le c de "next c" .

Merci beaucoup, je suis plus sereine pour le prochain round de juin.
 

job75

XLDnaute Barbatruc
Re : Extraire nombre écrit en début de cellule

Bonjour La Julie, salut Softmama, heureux de te croiser,

Si j'ai bien compris :

Code:
Sub Extraire()
Dim tablo, i&, t
tablo = Range("A1:A2", Range("A" & Rows.Count).End(xlUp))
For i = 1 To UBound(tablo)
  t = tablo(i, 1)
  If IsNumeric(Mid(t, 1, 1)) Then _
    tablo(i, 1) = Int(Val(t)) Else tablo(i, 1) = ""
Next
[B:B].ClearContents 'RAZ
[B1].Resize(UBound(tablo)) = tablo
End Sub
A+
 

La Julie

XLDnaute Nouveau
Re : Extraire nombre écrit en début de cellule

Bonsoir job75

J'ai testé ta macro, elle fonctionne très bien, je ne connaissais pas cette façon de faire avec un "tablo"...

Merci à tous les deux, :) je vais stocker ces macros dans mon "PERSO"
 

job75

XLDnaute Barbatruc
Re : Extraire nombre écrit en début de cellule

Re,

Il y a encore l'histoire des lettres "o" ou "O" à la place des zéros.

Alors vous pouvez utiliser :

Code:
Sub Extraire()
Dim tablo, i&, t
tablo = Range("A1:A2", Range("A" & Rows.Count).End(xlUp))
For i = 1 To UBound(tablo)
  t = Replace(LCase(LTrim(tablo(i, 1))), "o", 0)
  If IsNumeric(Left(t, 1)) Then tablo(i, 1) = Int(Val(t)) Else tablo(i, 1) = ""
Next
[B:B].ClearContents 'RAZ
[B1].Resize(UBound(tablo)) = tablo
End Sub
A+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 107
dernier inscrit
cdel