IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Extraction de nombre d'une cellule contenant du texte


Sujet :

Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Gestionnaire de paie
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Gestionnaire de paie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 42
    Points
    42
    Par défaut Extraction de nombre d'une cellule contenant du texte
    Bonjour,

    Je souhaiterai reporter dans différentes colonne (une colonne par nombre) les nombre d'une cellule contenant du texte et la partie texte dans une seule colonne. L'outil "convertir" d'excel ne le permet pas.

    Je vous joins un extrait du fichier avec sur une ligne le résultat que je souhaiterai avoir.

    Merci par avance,

    Bien cordialement

    Classeur1.xlsx

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CALOU3117 Voir le message
    Bonjour,

    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
     
    Sub TesterDecomposerLaChaine()
     
    Dim J As Long, DerniereLigne As Long
    Dim ShATraiter As Worksheet
    Dim MonSplitValeurs As Variant
    Dim MaChaineValeurs   As String
    Dim ValeurEnCours As Integer, ColonneEnCours As Integer
     
        Set ShATraiter = ActiveSheet
     
        With ShATraiter
     
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row
             For J = 3 To DerniereLigne
     
                .Cells(J, 3) = LaChaineAlpha(.Cells(J, 1))
                MaChaineValeurs = Split(.Cells(J, 1), .Cells(J, 3))(1)
                MonSplitValeurs = Split(MaChaineValeurs, " ")
                .Cells(J, 2) = "'" & Trim(Split(.Cells(J, 1), .Cells(J, 3))(0))
                .Cells(J, 10) = CLng(MonSplitValeurs(UBound(MonSplitValeurs)))
     
                ValeurEnCours = 0
                For ColonneEnCours = 4 To 4 + UBound(MonSplitValeurs) - 1
                    With .Cells(J, ColonneEnCours)
                          .Value = ChaineATransformer(Trim(MonSplitValeurs(ValeurEnCours)))
                          .NumberFormat = "#,##0.00"
                    End With
                    ValeurEnCours = ValeurEnCours + 1
                Next ColonneEnCours
     
             Next J
     
        End With
     
        Set ShATraiter = Nothing
     
    End Sub
     
     
    Function LaChaineAlpha(ByVal ChaineATester) As String
     
    Dim ChaineAlpha As Variant
    Dim I As Integer, PremiereVirgule As Integer
    Dim MaChaine As String
     
        LaChaineAlpha = ""
        PremiereVirgule = 0
        For I = Len(ChaineATester) To 1 Step -1
            If Mid(ChaineATester, I, 1) = "," Then PremiereVirgule = I
        Next I
     
        If PremiereVirgule = 0 Then Exit Function
     
        ChaineAlpha = Split(Mid(ChaineATester, 1, PremiereVirgule), " ")
        Debug.Print Mid(ChaineATester, 1, PremiereVirgule) & ", " & UBound(ChaineAlpha) & ", "; PremiereVirgule
        MaChaine = ""
        For I = 1 To UBound(ChaineAlpha) - 1
            MaChaine = MaChaine & "" & ChaineAlpha(I) & " "
        Next I
     
        LaChaineAlpha = Trim(MaChaine)
     
    End Function
     
     
    Function ChaineATransformer(ByVal LaChaine As String) As Variant
     
    Dim I As Integer
    Dim ValeurChaine As String
    Dim ValeurSigne As String
     
        ValeurSigne = "Positif"
        ValeurChaine = ""
     
        For I = 1 To Len(LaChaine)
            Select Case Mid(LaChaine, I, 1)
                   Case ","
                        ValeurChaine = ValeurChaine & "."
                   Case "-"
                        ValeurSigne = "Négatif"
                   Case Else
                        ValeurChaine = ValeurChaine & Mid(LaChaine, I, 1)
            End Select
        Next I
     
        If ValeurChaine <> "" Then
            If ValeurSigne = "Négatif" Then
               ChaineATransformer = "-" & ValeurChaine
            Else
               ChaineATransformer = ValeurChaine
            End If
        End If
     
     
    End Function

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    S'inspirer de ceci (bâclé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    toto = "voilà un exemple123 adc 145,47aaaa"
    titi = Split(StrConv(toto, vbUnicode), Chr(0))
      For i = 1 To UBound(titi) - 1
        Select Case IsNumeric(titi(i))
          Case False: If (IsNumeric(titi(i - 1)) And titi(i) <> ",") Then titi(i) = Chr(1)
          Case True: If Not IsNumeric(titi(i - 1)) And titi(i - 1) <> "," Then titi(i - 1) = Chr(1)
        End Select
      Next
      toto = Join(Split(Join(titi), Chr(1)), Chr(1))
      MsgBox toto
    Ce code suppose le séparateur décimal "," si nombre décimal.
    Il est ensuite aisé d'utiliser la méthode Range.TextToColumns, méthode (aide vba) si l'on veut éclater sur plusieurs colonnes.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par unparia Voir le message
    Il est ensuite aisé d'utiliser la méthode Range.TextToColumns, méthode (aide vba) si l'on veut éclater sur plusieurs colonnes.
    Salut Jacques,

    Sauf qu'ici la distribution des colonnes n'est homogène. On suppose que la dernière valeur est toujours sur la dernière colonne, cependant le nombre de colonnes de valeurs est variable.

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Eric
    Je ne comprends pas. Texttocolumns sait justement faire cela tout seul sur du texte délimité
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par unparia Voir le message
    La méthode fonctionne si tu complètes le nombre séparateurs nécessaires pour que la dernière valeur de toutes les lignes se retrouve dans la dernière colonne du tableau.

    Pièce jointe 413565

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    A Eric
    Je ne vois pas ce "requis" dans la demande formulée par CALOU3117, telle que formulée. Il n'y est nulle part précisé cela.
    Il se peut que tu aies déduit ce besoin supplémentaire à l'observation du classeur qu'il a joint et que je n'ai bien sûr pas ouvert (je ne ferai jamais cela).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par unparia Voir le message
    Je ne vois pas ce "requis" dans la demande formulée par CALOU3117, telle que formulée. Il n'y est nulle part précisé cela.
    Il se peut que tu aies déduit ce besoin supplémentaire à l'observation du classeur qu'il a joint
    Exact.

  9. #9
    Membre du Club
    Femme Profil pro
    Gestionnaire de paie
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Gestionnaire de paie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Merci à tous les 2 pour votre retour à ma demande.

    La source que j'ai donné provient d'un fichier pdf que je souhaite convertir en excel. Tous les convertisseurs que j'ai essayé ne rendent pas le résultat escompté. Je vous joins une capture écran du fichier pdf. Comme les séparations sont représentées par des lignes horizontales, je n'arrive pas le convertir avec la fonction convertir d'excel. Y a t'il un moyen de le mettre sous format excel en respectant les montants dans les bonnes colonnes.

    Merci par avance

    Bien cordialement

    Nom : Capture écran.PNG
Affichages : 115
Taille : 75,3 Ko

  10. #10
    Membre du Club
    Femme Profil pro
    Gestionnaire de paie
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Gestionnaire de paie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Je viens de trouver la solution. Toute bête par ma fois !

    Ouvrir le PDF avec word et ensuite copier les données dans une feuille excel. Les colonnes sont bien respectées.

    Merci à vous pour le temps consacré à ma demande

    Bien cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Séparer les milliers dans une cellule contenant du texte
    Par nosnoz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/09/2018, 16h37
  2. Recalculer une cellule contenant du texte.
    Par Naghoan dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/09/2018, 11h01
  3. Réponses: 4
    Dernier message: 09/07/2014, 09h44
  4. Réponses: 2
    Dernier message: 06/11/2013, 12h03
  5. Réponses: 3
    Dernier message: 20/01/2013, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo