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

Macros et VBA Excel Discussion :

Extraction des nombres d'une chaîne [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2020
    Messages : 5
    Par défaut Extraction des nombres d'une chaîne
    Bonjour,
    Je me permets de vous écrire car j'ai besoin d'aide en VBA. Je suis débutant et j'essaie actuellement d'extraire les nombres d'une chaine et cela sur toute la feuilles Excel. (Cf attachment rectangles bleu)
    Le problème est que dès la 2ième ligne jusqu'à la dernière le résultat récupère le résultat de la ligne précedente et cumule... (cf attachment les encadrés en rouges) (cf attachment nouveau résultat en rectangle vert)
    Je n'arrive pas à trouver dans mon code (ci-dessous) où se trouve cet erreur de cumulation.
    Pouvez-vous m'aiguiller vers la bonne solution svp?
    En vous remerciant par avance
    L.TVM

    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
    Sub extraireValeursNumeriques_DansChaine()
    Dim i As Integer, Nb As Integer
    Dim Cible As String, Resultat As String
    Dim Nombre As Double
    Const StartRow As Byte = 1
    Dim LastRow As Long
    Dim r As Long 'For looping through rows
     
     
    LastRow = Range("B" & Rows.Count).End(xlUp).Row
     
    For r = StartRow To LastRow
     
     
    Cible = Range("B" & r).Value
     
    For i = 1 To Len(Cible)
    If IsNumeric(Mid(Cible, i, 1)) Then
    Nombre = Val(Mid(Cible, i, Len(Cible) - i + 1))
    Nb = Nb + 1
    Resultat = Resultat & Nombre & vbLf
    i = i + Len(Str(Nombre)) - 1
    End If
    Next i
     
    'MsgBox "Il y a " & Nb & " valeurs numériques dans la cellule " & vbLf & Resultat
     
    Range("C" & r).Value = Resultat
     
    Next r
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Déjà, je ne comprends pas à quoi sert la ligne i = i + Len(Str(Nombre)) - 1 mais il est rare que ce soit une bonne idée d'incrémenter la variable courant d'un For To.
    Donc, je pense que tu devrais la supprimer.

    La raison pour laquelle ça se cumule c'est tout simplement parce que tu n'initialises pas tes variables Nb et Resultat.

    Juste après ton Cible = ..., mets les lignes :
    Autre détail : on ne déclare un type Byte que lorsque la variable est réellement un Byte.
    Quand c'est juste un entier de valeur faible, on déclare Integer ou Long.

    Chercher à gagner un octet sur une variable, c'était courant dans les années 80 où les mémoires se comptaient en ko.
    Aujourd'hui où elles se compte en Mo, il est absurde de mégoter sur de telles quantités.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2020
    Messages : 5
    Par défaut
    Bonjour Menhir et merci beaucoup pour tes précieux conseils que j'ai appliqué à la lettre. Tout fonctionne correctement! Hourra!

    Merci aussi pour le type byte, je comprends mieux la logique effectivement.

    Dans tous les cas j'en sors enrichi grâce à toi et ce forum, milles merci!

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

Discussions similaires

  1. Extraire des nombres dans une chaîne de caractères
    Par frantz06 dans le forum Excel
    Réponses: 9
    Dernier message: 20/12/2019, 17h03
  2. Extraire nombres d'une chaîne de caractères séparés par des "/"
    Par olive1007 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2014, 17h53
  3. Incrémenter des nombres dans une chaîne
    Par shaun_the_sheep dans le forum SQL
    Réponses: 19
    Dernier message: 25/04/2012, 11h46
  4. Réponses: 21
    Dernier message: 19/09/2011, 14h57
  5. ACCESS 2007 - Extraction de nombre d'une chaîne de caractère
    Par simply_trunks dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/05/2009, 12h34

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