Récupérer des données d'une chaine

Bonjour,

J'utilise actuellement la fonction manuelle "données / convertir" pour récupérer une partie des données contenue dans une liste de cellules. je cherche une formule me permettant de le faire automatiquement. VBA si nécessaire.

Les données sont du type :

A

B.123.586

C.456.ZHE

D

je veux récupérer :

A

B

C

D

en gros, tout ce qui est avant le 1er point, ou la cellule entière s'il n'y a pas de points.

Auriez vous une idée svp ?

Merci !

Alci

Bonjour,

Tu fais exactement la même opération en activant l'enregistreur de macro

Merci M12,

Pour être plus clair, vu que je ne veux que les :

A

B

C

D

et pas ce qui va être décalé sur la droite par la fonction "conversion", je ne peux pas simplement transformer la fonction par un bouton qui me fera exactement la même chose. Le gain ne sera que trop minime.

Disons le autrement : je ne voudrais garder que la partie qui se trouve à gauche du premier point trouvé ou la cellule s'il n'y a pas de point.

Re,

A tester

Sub recup()
Dim i%
For i = 2 To 10 'de la ligne 2 à 10
    Cells(i, 1).Value = Left(Cells(i, 1).Value, 1) 'Cells(i,1) = cellule de la ligne i ( de 2 à 10) : de la colonne 1 (A)
Next i
End Sub

Merci encore M12

je viens de réussir à écrire mon besoin, que je partage pour les archives :

NbLignes = Feuil3.UsedRange.Rows.Count

For i = 1 To NbLignes

celltxt = ActiveSheet.Cells(i, 1).Text

If InStr(1, celltxt, ".") Then

Cells(i, 2).Value = Left(celltxt, (InStr(1, celltxt, ".")) - 1)

Else

Cells(i, 2).Value = Cells(i, 1).Value

End If

Next i

je vais aussi tester ta solution,

Merci !

Bonjour,

Un exemple avec formule.

Cdlt.

12alcibiade.xlsx (8.56 Ko)

bonjour ,

à tester :

=GAUCHE(A1;cherche(".";A1;1)) et tu tire la formule

Merci à tous !

@ Minanse : j'ai adapté un chouia ta formule et c'est nickel.

=SIERREUR(GAUCHE(I24;CHERCHE(".";I24;1)-1);I24)

cela permet d'enlever le "." grâce au "-1" et s'il n'y a pas de point, j'ai une erreur, donc je prends directement la valeur d'origine.

@ Jean-Eric : Idem.

D'autant que ma macro plantait à cause d'un dépassement de capacité et qu'il me fallait la scinder en plusieurs paquets de lignes.

J'en ai environ 52000 actuellement et pense finir l'année vers 70000

Bref, un grand merci à tous pour vos réponses rapides !

Bonne journée,

Alcibiade

Re,

Si tu as un grand nombre de lignes, tu devrais peut-être envisager une solution telle que :

Public Sub DEMO()
Dim lastRow As Long
Dim arr(), tbl, x
Dim I As Long

    With ActiveSheet
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbl = .Cells(1).Resize(lastRow)
        ReDim arr(1 To lastRow)
        For I = 1 To lastRow
            x = Split(tbl(I, 1), ".")
            arr(I) = x(0)
        Next I
        With .Cells(2).Resize(lastRow)
            .ClearContents
            .Value = Application.Transpose(arr)
        End With
    End With

End Sub

Merci,

je vais tester également,

Rechercher des sujets similaires à "recuperer donnees chaine"