Convertir cellule+lettre en cellule+signe

Résolu
MEL -  
 MEL -
bonjour,

concrètement j'ai des cellules de ce type:

1200023.24 D
4501.02 C

D débit et C pour credit (dans une seule cellule)

et je veux ce résultat là
-1200023.24
+4501.02

afin de pouvoir faire des graphiques.

J'ai essayé bcp de choses:
1-trouver un format personnalisé - pas trouvé
2-convertir, cad, mettre le nbre d'un côté et la lettre de l'autre - pas possible car pas tjrs le même nbre de caractères. deplus, la cellule où il me reste les chiffres sont considérés comme du texte, dc impossible à exploiter après

Je ne sais pas quoi faire:
-trouver la solution pour convertir mes cellules ou
-arriver à faire un graphique avec les données existantes.

merci de votre aide

10 réponses

  1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    Salut le Forum

    Autre Formule
    SI(ESTERR(CHERCHE("D";B2));1;-1)*SUBSTITUE(SUBSTITUE(SUBSTITUE(B2;"C";"");"D";"");CAR(160);"")

    Mytå
    2
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Le souci vient du fait que tes valeurs (par exemple : 73 128,53 C) contiennent un espace au lieu du séparateur de millier. En fait, tu as 73espace128,53...

    Qui plus est un espace "insécable".
    Alors pour faire ce que tu souhaites, tu dois :
    1- sélectionner, dans la barre de formule, un de ces espaces insécables :

    Et le copier (Ctrl + C)
    2- Sélectionner toute la colonne B puis taper Ctrl+H
    dans la case recherche"r : coller (Ctrl + V) (pour y placer ton espace insécable)
    dans la case remplacer par : ne rien mettre

    3- cliquer sur remplacer tout.

    4- Ta formule devient, par exemple et pour faire simple :
    =SI(DROITE(B2;1)="C";GAUCHE(B2;NBCAR(B2)-1)*1;SI(DROITE(B2;1)="D";GAUCHE(B2;NBCAR(B2)-1)*-1;"erreur"))

    🎼 Cordialement,
    Franck 🎶
    1
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Ton classeur avec la formule...
      0
  3. tontong Messages postés 2575 Date d'inscription   Statut Membre Dernière intervention   1 064
     
    Bonjour,
    Il y a un autre piège dans votre fichier: le séparateur de milliers n'est pas une espace simple (CAR(32)) mais une espace insécable (CAR(160)).
    2 solutions:
    1- Sélectionner tout le champ de Solde
    Édition Remplacer (ou Ctrl+h) et dans la zone Rechercher taper 0160 en maintenant la touche Alt enfoncée, dans la zone Remplacer par ne rien mettre. Clic sur remplacer tout.
    en colonne C recopier la formule donnée au #2.
    =GAUCHE(A2;NBCAR(A2)-2)*(1-(2*(DROITE(A2;1)="D")))
    2- En colonne C recopier directement la fomule
    =GAUCHE(SUBSTITUE(B2;CAR(160);"");NBCAR(B2)-2)*(1-(2*(DROITE(B2;1)="D")))

    Tracer le graphique avec les champs des colonnes A et C.

    Nota: comme quoi un fichier c'est utile ;-)
    1
  4. Maurice
     
    bonjour

    voila la solution
    a toi de voir si ca te convient

    Sub Convert()
    Application.ScreenUpdating = False
    NombLig = Cells(Rows.Count, 2).End(xlUp).Row
       For L = 2 To NombLig
          Test = Replace(Replace(Range("B" & L).Value, Chr(160), ""), ",", ".")
          If Right(Test, 1) = "D" Then
                Range("C" & L).Value = -Val(Test)
             Else
                Range("C" & L).Value = Val(Test)
          End If
          Range("C" & L).NumberFormat = "0.00_ ;[Red]-0.00 "
       Next
    Application.ScreenUpdating = True
    End Sub


    A+
    Maurice
    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Une possibilité :

    Avec la valeur en A2 , en B2 la formule pour convertir en nombre :
    =SI(DROITE(A2;1)="D";0-(CNUM(GAUCHE(A2;NBCAR(A2)-5))+CNUM(GAUCHE(DROITE(A2;4);2)/100));CNUM(GAUCHE(A2;NBCAR(A2)-5))+CNUM(GAUCHE(DROITE(A2;4);2)/100))

    le premier GAUCHE prend les caractères à gauche d'une longueur égale à la longueur de la chaine -5 (le . ,les 2 chiffres décimaux, l'espace et la lettre) et CNUM convertit le résultat en nombre
    le second GAUCHE prend les 2 caractères à gauche des 4 caractères de DROITE (donc prend les 2 décimaux) puis conversion avec CNUM et division par 100
    L'addition des 2 redonne le nombre d'origine qu'on soustrait à 0 si lettre D pour obtenir un négatif

    Cdlmnt
    0
  7. tontong Messages postés 2575 Date d'inscription   Statut Membre Dernière intervention   1 064
     
    Bonjour,
    Une autre possibilité:
    Si votre séparateur de décimales est la virgule il faut commencer par remplacer le point par une virgule.
    Édition Remplacer ou en raccourci Ctrl+h.
    Données Convertir fonctionne pour un fichier délimité avec l'espace comme séparateur.
    En format standard Excel ne peut renvoyer que du texte s'il ne reconnait pas un nombre.

    À partir de la valeur avec le bon séparateur de décimales on peut obtenir un nombre négatif pour D avec la formule:
    =GAUCHE(A2;NBCAR(A2)-2)*(1-(2*(DROITE(A2;1)="D")))
    0
  8. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Quant à moi, je n'ai pas compris comment est fait le tableau "D débit et C pour credit (dans une seule cellule)".
    Le mieux serait de nous envoyer ton fichier avec https://www.cjoint.com/
    0
    1. MEL
       
      http://cjoint.com/?3JCp7hMWIfZ

      bonjour,

      voici mon fichier. J'ai essayé la 1ère solution mais cela ne marche pas.

      l'objectif est d'avoir une colonne avec des chiffres positifs et négatis pour pouvoir faire un graphique.

      merci de votre aide.
      0
  9. Maurice
     
    Bonjour

    tu peux aussi le faire par macro
    
    Sub CONVERT()
    NombLig = Cells(Rows.Count, 1).End(xlUp).Row
       For L = 2 To NombLig
          Nomb = Val(Split(Range("A" & L), " ")(0))
          If Trim(Split(Range("A" & L), " ")(1)) = "D" Then
             Range("B" & L).Value = -Nomb
          Else
             Range("B" & L).Value = Nomb
          End If
          Range("B" & L).NumberFormat = "0.00_ ;[Red]-0.00 "
       Next
    End Sub


    A+

    Maurice
    0
    1. MEL
       
      merci , mais je ne maîtrise pas encore les macros. il faut vraiment que j'apprenne.
      0
  10. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Tu vois, MEL, toutes les complications qui découlent de tes saisies fantaisistes ?
    Alors fais comme tout le monde : en colonne B tu saisis tes montants (sans espaces), en colonne C tu saisis "C" ou "D".
    Ensuite tout est merveilleusement facile et immédiat ...
    0
    1. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      Je constate que ma suggestion n'a pas plu à quelqu'un !
      Une petite explication de vote serait plus constructive ...
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut Raymond,

      Je n'ai pas mis le -1, mais l'explication est la suivante :
      Il ne s'agit certainement pas de saisie, j'en veux pour preuve l'espace insécable contenu par chaque nombre, mais d'une importation d'un logiciel quelconque.
      S'agissant de tout ressaisir manuellement, si Excel peut y apporter des solutions plus ou moins automatiques, je ne vois pas l'intérêt. D'autant plus que MEL risque fort d'avoir régulièrement ce genre d'import à traiter.

      Les solutions sont toutes sur le sujet qui, ma foi, est fort bien résolu.

      Bonne journée à toi.
      A+
      0
    3. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      Oui pijaku, je pense que tu as raison.
      C'est cependant regrettable que MEL donne comme exemples 1200023.24 D et 4501.02 C alors qu'en réalité il s'agit de 1 200 023.24 D et 4 501.02 C !
      Regrettable aussi qu'après plus de 24 h il n'a pas encore donné de suite à mon message #10 ...
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut Raymond,

      C'est cependant regrettable que MEL donne comme exemples 1200023.24 D
      Oui, il vaut toujours mieux être précis dans les explications de base...

      Regrettable aussi qu'après plus de 24 h il n'a pas encore donné de suite à mon message #10 ...
      Mettons cela sur le fait que MEL s'est occupé(e?) des enfants hier. Elle (ou il?) reviendra aujourd'hui...
      0
    5. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      Oui ! Bel optimisme ...
      0
  11. Maurice
     
    Bonjour

    voila en retour ton fichier avec la macro

    http://cjoint.com/?3JDlitPqx7j

    A+

    Maurice
    -1