OVH Cloud OVH Cloud

Comment extraire les chiffres contenu dans les cellules alphanumériques???

16 réponses
Avatar
fred
Bonjour,
Par une macro j'aimerais extraire les chiffres contenu dans les cellules
d'une colonne (cellules avec chaine alphanumérique et positionnement
aléatoire des chiffres et du texte dans ces cellules :
def1585....yrrzesd1598... 458gtred...etc...) pour les "coller" sur une autre
colonne???
Merci de votre aide

10 réponses

1 2
Avatar
anonymousA
bonjour,

ici exemple avec une chaine de caractères en cellule A1

Set rng = Cells(1, 1)

For I = 1 To rng.Characters.Count
If IsNumeric(rng.Characters(I, 1).Text) Then Cells(1, 2) = Cells(1, 2)
& rng.Characters(I, 1).Text '.Count
Next

A+
Avatar
anonymousA
je suis pas sur d'avoir bien répondu à ta demande. Si tu voulais
extraire les chiffres par paquets de chiffres consécutifs, alors il
faut employer la proc suivante. toujours avec la chaine de carcatères
en A1, les paquets de chiffres seront insctrits dans les cellules à
droite de A1.

Dim rng As Range
Set rng = Cells(1, 1)

J = 1
For I = 1 To rng.Characters.Count
If IsNumeric(rng.Characters(I, 1).Text) Then
A = I
Do While IsNumeric(rng.Characters(A, 1).Text)
temp = temp & rng.Characters(A, 1).Text
A = A + 1
Loop
J = J + 1
Cells(1, J) = temp
I = A
temp = ""
End If
Next

A+
Avatar
AV
Sous réserve qu'il n'y aie qu'une seule valeur numérique à extraire et que, si
cette valeur est décimale, le séparateur décimal soit le même que celui du
système :
Matricielle (validation par ctrl+maj+entrée)

=1*(STXT(A1;EQUIV(0;(ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1);
0);NBCAR(A1)+1-SOMME((ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1)
)))

AV
Avatar
michdenis
Bonjour Fred,

Tu copies cette fonction dans un module standard :

=OnlyNumber(A1)


'----------------------
Function OnlyNumber(Cellule As Range) As Variant

Dim Nb As Integer, b as string, A as Integer
Nb = Len(Cellule)
For A = 1 To Nb
b = Mid(Cellule.Text, A, 1)
If IsNumeric(b) Then
OnlyNumber = (OnlyNumber & b) * 1
End If
Next
End Function
'----------------------


Salutations!


"fred" a écrit dans le message de news: 432fe382$0$12391$
Bonjour,
Par une macro j'aimerais extraire les chiffres contenu dans les cellules
d'une colonne (cellules avec chaine alphanumérique et positionnement
aléatoire des chiffres et du texte dans ces cellules :
def1585....yrrzesd1598... 458gtred...etc...) pour les "coller" sur une autre
colonne???
Merci de votre aide
Avatar
AV
Même avec les nombres comportant des décimales ?
;-)
AV
Avatar
michdenis
Bonjour AV,

| Même avec les nombres comportant des décimales ?

Bien sûr, y compris ces derniers puisque la question n'en fait pas mention.
;-)


Salutations!
Avatar
fred
Ok j'ai testé!!!!
En résumé je fais un copier coller d'un annuaire sur internet sur une
feuille excel
Par enregistrement de macro j'obtiens ceci :
Sub Annuaire()
'
' ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:úlse, _
DisplayAsIcon:úlse
Columns("A:A").Select
' Je fais un copier coller spécial en unicode sur A1
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited,
_
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:úlse,
Tab:=True, _
Semicolon:úlse, Comma:úlse, Space:úlse, Other:=True, OtherChar
_
:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
'Conversion des Données en Délimité par le caractère |

Cells.Select
Selection.Columns.AutoFit
Columns("B:B").Select
Selection.Delete Shift:=xlToLeft
Columns("A:A").Select
' Je recherche et remplace "A proximité" par "" dans la colonne A (qui est
superflu donc a éliminé)
Selection.Replace What:="A proximité", Replacement:="", LookAt:=xlPart,
_
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Columns("B:B").Select

End Sub
Je suis en colonne B où se trouve les données alphanumériques.
Comment faire pour intégrer la fonction dans cette macro maintenant sans que
j'intervienne (=OnlyNumber(B2))...comment faire appel à la fonction du
module standard???
J'ai tout de même testé en rajoutant le module standard comprenant la
fonction et inscrit =OnlyNumber(B2) dans C2...c'est ok mais si le chiffre
commence par 0 (exemple numérode télélphone)...il n'apparait pas (je dois
mettre la colonne C en format Spécial téléphone)...et si la ligne est
vide...le chiffre 0 apparait (ce que je ne voudrais pas)!!!
Merci déjà infiniment pour votre aide!!!!




"michdenis" a écrit dans le message de news:

Bonjour AV,

| Même avec les nombres comportant des décimales ?

Bien sûr, y compris ces derniers puisque la question n'en fait pas
mention.
;-)


Salutations!





Avatar
fred
La formule matricielle fonctionne à condition qu'il y ait un espace entre
les chiffres et les lettres lorsque les chiffres sont placés avant les
lettres dans la celleule (sinon #VALEUR)...S'il n'y a que des lettres il
renvoit #N/A (peut-on ne pas faire apparaitre les messages d'erreur???)
Comment incorporer ou lancer cette formule matricielle dans une macro???
Merci bcp tout de même!!!

"AV" a écrit dans le message de news:
eW%
Sous réserve qu'il n'y aie qu'une seule valeur numérique à extraire et
que, si
cette valeur est décimale, le séparateur décimal soit le même que celui du
système :
Matricielle (validation par ctrl+maj+entrée)

=1*(STXT(A1;EQUIV(0;(ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1);
0);NBCAR(A1)+1-SOMME((ESTERREUR(STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1)*1)*1)
)))

AV




Avatar
michdenis
Bonjour Fred,

à la fin de ta procédure, tu n'as qu'à appeler la procédure "ExtractionColonneC" de cette manière

ExtractionColonneC "Feuil1" 'et tu remplaces Feuil1 par le nom de ta feuille où sont tes données.

La fonction doit être dans un module standard.
'-----------------------------------
Sub ExtractionColonneC(NomFeuille as String)

Dim Rg As Range
With Worksheets(NomFeuille)
Set Rg = .Range("C1:C" & .Range("B65536").End(xlUp).Row)
Rg.NumberFormat = """0#"" ""##"" ""##"" ""##"";,;"
Rg.Formula = "=OnlyNumber(" & Rg(1).Offset(, -1).Address(0, 0) & ")"

End With

End Sub
'-----------------------------------

Function OnlyNumber(Cellule As Range)

Dim Nb As Integer, b As String, A As Integer
Nb = Len(Cellule)
For A = 1 To Nb
b = Mid(Cellule.Text, A, 1)
If IsNumeric(b) Then
OnlyNumber = OnlyNumber & b
End If
Next
End Function
'-----------------------------------

Salutations!



"fred" a écrit dans le message de news: 4330967c$0$29673$
Ok j'ai testé!!!!
En résumé je fais un copier coller d'un annuaire sur internet sur une
feuille excel
Par enregistrement de macro j'obtiens ceci :
Sub Annuaire()
'
' ActiveSheet.PasteSpecial Format:="Texte Unicode", Link:úlse, _
DisplayAsIcon:úlse
Columns("A:A").Select
' Je fais un copier coller spécial en unicode sur A1
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited,
_
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:úlse,
Tab:=True, _
Semicolon:úlse, Comma:úlse, Space:úlse, Other:=True, OtherChar
_
:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
TrailingMinusNumbers:=True
'Conversion des Données en Délimité par le caractère |

Cells.Select
Selection.Columns.AutoFit
Columns("B:B").Select
Selection.Delete Shift:=xlToLeft
Columns("A:A").Select
' Je recherche et remplace "A proximité" par "" dans la colonne A (qui est
superflu donc a éliminé)
Selection.Replace What:="A proximité", Replacement:="", LookAt:=xlPart,
_
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Columns("B:B").Select

End Sub
Je suis en colonne B où se trouve les données alphanumériques.
Comment faire pour intégrer la fonction dans cette macro maintenant sans que
j'intervienne (=OnlyNumber(B2))...comment faire appel à la fonction du
module standard???
J'ai tout de même testé en rajoutant le module standard comprenant la
fonction et inscrit =OnlyNumber(B2) dans C2...c'est ok mais si le chiffre
commence par 0 (exemple numérode télélphone)...il n'apparait pas (je dois
mettre la colonne C en format Spécial téléphone)...et si la ligne est
vide...le chiffre 0 apparait (ce que je ne voudrais pas)!!!
Merci déjà infiniment pour votre aide!!!!




"michdenis" a écrit dans le message de news:

Bonjour AV,

| Même avec les nombres comportant des décimales ?

Bien sûr, y compris ces derniers puisque la question n'en fait pas
mention.
;-)


Salutations!





Avatar
AV
La formule matricielle fonctionne à condition qu'il y ait un espace entre
les chiffres et les lettres lorsque les chiffres sont placés avant les
lettres dans la celleule (sinon #VALEUR)...


S'il n'y a pas d'espace séparateur, enlève le +1 après le NBCAR(A1)

AV

1 2