Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Séparer valeur numérique + texte d'une cellule

Madjon6

XLDnaute Occasionnel
Bonjour,

J'ai une colonne que je souhaite diviser en 2 colonnes. l'une contiendra les valeurs numérique et l'autre le texte.

Exemple :

Colonne D
539482.39894707Statut refusé

Deviendra :

Colonne D Colonne E
539482.39894707 Statut refusé


Je ne sais pas si c 'est possible avec l'option convertir.

Merci à vous

Merci pour votre aide
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Sylvain. B ,

Une version avec une fonction personnalisée utilisable aussi bien sur la feuille de calcul (voir en feuille "Feuil2") qu'au sein d'une macro VBA.

Le code de la fonction est dans module1 :
VB:
Function NumDeb(xText, Optional xFIN)
Dim i As Long, c As String * 1
   xText = Trim(xText)
   For i = 1 To Len(xText)
      c = Mid(xText, i)
      Select Case c
         Case "0" To "9", ".":
         Case Else:       Exit For
      End Select
   Next i
   If IsMissing(xFIN) Then NumDeb = Left(xText, i - 1) Else NumDeb = Mid(xText, i)
End Function


Le code pour la feuille "Feuil1" est dans le module de la feuille "Feuil1". La colonne B est mise à jour dès qu'une valeur change en colonne C ou bien qu'on revalide une cellule en colonne C.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim der&, t, i&
   On Error GoTo FIN
   If Not Intersect(Columns("c:c"), Target) Is Nothing Then
      On Error GoTo FIN
      If Me.FilterMode Then Me.ShowAllData
      Application.EnableEvents = False
      Columns("b:b").ClearContents
      der = Cells(Rows.Count, "c").End(xlUp).Row
      t = Columns("c:c").Resize(der)
      'si vous désirez le texte final alors écrivez : = NumDeb(t(i, 1),1) dans la ligne qui suit
      For i = 1 To UBound(t): t(i, 1) = NumDeb(t(i, 1)): Next
      Columns("b:b").Resize(der).NumberFormat = "@"
      Columns("b:b").Resize(der) = t
   End If
FIN:
   Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Sylvain. B- Début ou fin- v1.xlsm
    27.9 KB · Affichages: 9

Sylvain. B

XLDnaute Nouveau
Bonjour @mapomme

SUPER Merci beaucoup

Ça fonctionne parfaitement, mais pensez-vous qu'il serait possible d'avoir les valeurs numériques en colonneA de ma feuille juste en cliquant sur un bouton ?
A partir de la cellule A9 qui ne change jamais jusqu'à la dernière ligne qui elle peut changer.

Ensuite j'applique une formule qui devra me donner le nombre de ventes de cette référence (valeur numérique), avec le code que vous m'avez très gentiment donné (merci encore) ma formule ne fonctionne pas car dans la cellule cible excel trouve une formule (=numdebC9) par exemple est non une valeur.

Je débute sur excel, j’espère que je suis suffisamment clair dans mes explications.
Merci beaucoup pour votre aide.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Sylvain. B ,

Personnellement, je veux bien tout faire mais pour le faire bien, j'aimerai du concret c'est à dire votre classeur ou bien un petit classeur exemple qui sera le reflet exact de votre classeur original pour ne pas coder dans le vide.

Alors à plus .
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Une solution par formule matricielle en B1 :
Code:
=GAUCHE(C1;EQUIV(FAUX;EXACT(MAJUSCULE(STXT(C1;LIGNE(INDIRECT("1:"&NBCAR(C1)));1));MINUSCULE(STXT(C1;LIGNE(INDIRECT("1:"&NBCAR(C1)));1)));0)-1)
A valider par Ctrl+Maj+Entrée et tirer vers le bas.

Elle repère la 1ère lettre.

A+
 

Pièces jointes

  • Classeur(1).xlsx
    17.1 KB · Affichages: 1

Sylvain. B

XLDnaute Nouveau
Bonjour @mapomme,

Je comprends.
Puis-je vous envoyer mon fichier exemple en privé dans un souci de confidentialité ?
 

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour le fil,
Vu que le format a l'air d'air fixe (Nbre sur la 25 premiers caractères, texte ensuite) Données, Convertir convient tout à fait, largeur fixe, curseur sur la colonne 25 , Avancé dans l'écran 3 : séparateur décimal = .
Avec une petite macro si c'est un travail répétitif :
Données importées en colonne A; restituées en colonnes A et B
Enrichi (BBcode):
Sub Séparer()
     With ActiveSheet
          .Cells(9, 1).Resize(.Cells(.Rows.Count, 1).Row).TextToColumns Destination:=.Cells(9,1), _
                                                                        DataType:=xlFixedWidth, _
                                                                        Fieldinfo:=Array(Array(0, 1), Array(25, 1)), _
                                                                        DecimalSeparator:="."
     End With
End Sub

EDIT : Prise en compte du début en A9

Voir la PJ
A bientôt
 
Dernière édition:

Sylvain. B

XLDnaute Nouveau
Bonjour @AtTheOne ,

C'est un peu plus compliqué que ça, désolé je n'ai pas été très malin plutôt que de créer un sujet j'ai posé la question à un XLDnaute sur un vieux sujet de 2010 avec son fichier à lui.
J'ai essayé votre code mais je n'arrive évidemment pas à l'appliquer à mon fichier, je débute vraiment !

Voici à quoi ressemble mon fichier et donc les infos que j'ai besoin de dissocier :


La colonne C est à dissocier et les valeurs numériques peuvent apparaître en colonne B si on peut écraser le contenu de cette colonne au passage avant de copier les valeurs numériques récupérés.

Les infos à dissocier commenceront toujours en C9 et non en C10 comme sur la capture ci-jointe, en revanche le nombre de lignes change tous les jours mais plus de 500 lignes par jours à traiter.

Ce qui est important c'est que les valeurs numériques soient restituées tel qu'elles sont dans le fichier avant le "-" qui sépare la référence (valeur numérique) de la désignation car ensuite j'applique des formules pour rattacher ces références à une famille de produit et en récupérer le CA et la marge.
Je peux vous envoyer un fichier exemple plus détaillé en privé si vous le souhaitez ?
Merci beaucoup pour votre aide.
 

AtTheOne

XLDnaute Accro
Supporter XLD
Re bonjour,
En prenant la plage utilisée de la colonne C (à partir de C9) comme source et comme cible la cellule B9
Je remplace d'abord la chaine " - " par "§", et j'utilise donnée conversion avec comme séparateur "§" :
VB:
Sub SéparerNew()

     With ActiveSheet
          Set Rg = .Cells(9, 3).Resize(.Cells(.Rows.Count, 3).End(xlUp).Row)
     End With
     Rg.Replace What:=" - ", Replacement:="§", LookAt:=xlPart
    
     Application.DisplayAlerts = False
     Rg.TextToColumns Destination:=Rg.Cells(1).Offset(0, -1), DataType:=xlDelimited, _
                                                              Other:=True, OtherChar:="§", _
                                                              FieldInfo:=Array(Array(1, 1), Array(2, 1)), DecimalSeparator:="."
     Application.DisplayAlerts = True

End Sub

Voir la pièce jointe
A bientôt
 

Pièces jointes

  • exemple1234 AtTheOne 2.xlsm
    19.5 KB · Affichages: 2

Sylvain. B

XLDnaute Nouveau
Re @AtTheOne
Re à toute la communauté XLDnaute

C'est super ça fonctionne parfaitement c'est fluide, rapide et efficace, tout ce que j'aime
Merci infiniment @AtTheOne pour votre aide, la communauté est vraiment top ici.

Un grand MERCI à tout ceux qui m'ont aidé @job75 , @JHA et @mapomme (à qui j'ai demandé encore un peu d'aide pour une mission un peu plus complexe)
Et merci également à tout ceux qui ont pris le temps de me lire.
Excellente soirée et très bon weekend de pâques à toute et tous.
 

Sylvain. B

XLDnaute Nouveau
Bonsoir @AtTheOne,

Je vais avoir l’air bête mais je ne trouve pas comment marquer le post comme solution !
Pouvez-vous m’indiquer la méthode svp ?
Je ne trouve même pas votre signature
Merci à vous
Excellente soirée et bon week-end de Pâques.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…