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 :

Récupération de noms dans une suite de caractères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut Récupération de noms dans une suite de caractères
    Bonjour,
    Je sollicite le forum car j'ai besoin d'infos pour pouvoir extraire une chaine de caractère. En gros, j'ai une extraction brut qui me renvoie une suite de caractère dans une seule cellule excel par ligne de data (pas de possibilité de le dissocier)

    Pour illustrer mes propos voici l'extraction brut :
    LIGNE 1 : 40713-2945877 XPEDIA CHALONS EN CHAMPAGNE DMRTIN TFE REIMS 14022013-8956628 14-02-2013 06:05:12 Expédié 14-02-2013-05:45:00
    LIGNE 2 : 40713-2946064 XPEDIA ST BRICE DMRTIN LDE ORG 14022013-8957065 14-02-2013 05:59:17 Expédié 14-02-2013-05:00:00
    LIGNE 3 : 40713-2945870 XAUBERVILLIERS DMRTIN STAF ORG 14022013-8956607 14-02-2013 03:29:52 Expédié 14-02-2013-05:30:00

    Liste des noms à rechercher :
    CHALONS EN CHAMPAGNE
    ST BRICE
    AUBERVILLIERS
    ....

    Je souhaite récupérer les noms en rouge dans les data.
    Pour cela j'ai une liste de 30 noms pré-définis.
    Le problème est que ne ne sais pas comment faire pour récupérer le nom car la chaine de caractère diffère parfois (par exemple le dernier qui commence par X puis nom) et le nom à récupérer n'a pas toujours la même longueur.

    J'avais pensé à une boucle du genre while et qui teste les 30 noms ligne par ligne et renvoie la valeur dans une autre cellule mais ça ne fonctionne pas...

    Merci de votre aide

  2. #2
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour

    J'avais pensé à une boucle du genre while et qui teste les 30 noms ligne par ligne et renvoie la valeur dans une autre cellule mais ça ne fonctionne pas...
    en VB , le résultat attendu donnerait-il quelque chose ressemblant a cela
    j'ai mis le resultat en B
    Les 30 valeurs à chercher en C
    Les chaines de caracteres en F

    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
    Sub nouveau()
    Dim cell As Range
    Dim cell1 As Range
    Dim s As String
     
    For Each cell In ActiveSheet.Range("c1:c3")
        For Each cell1 In ActiveSheet.Range("c1:c3")
            If cell.Text Like "*" & cell.Text & "*" Then
            s = cell.Row
            Range("b" & s).Value = Range("c" & s).Value
            End If
     
       Next cell1
    Next cell
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut
    En fait non pas vraiment. Je me suis surement mal exprimé.

    J'ai fait un petit fichier excel associé pour être plus clair.
    En gros je veux rechercher et extraire dans ma feuille "data" le nom des magasins de la feuille "liste magasins" pour pouvoir les écrire dans la feuille matrice en B3,B4, B5 etc (j'ai rempli pour l'exemple).

    Parfois l'extraction de la requête renvoie un E devant le nom du magasin (en rouge dans mon fichier)

    Merci pour ton aide en tout cas keygen08
    Fichiers attachés Fichiers attachés

  4. #4
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour

    C'est, je crois, ce que j'ai fait mais il faut adapter pour les changements de feuille, donc j'adapte et je mets en pieces jointes dans quelque mn

    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
    Private Sub Worksheet_Activate()
    Dim cell As Range
    Dim cell1 As Range
    Dim s As String
     
    'pour toutes les cellules pleines dans liste magasin A
    For Each cell In Feuil2.Range("a1:a" & Feuil2.Range("a65000").End(xlUp).Row)
        'pour toutes les cellules pleines dans data A
        For Each cell1 In Feuil1.Range("a1:a" & Feuil1.Range("a65000").End(xlUp).Row)
            'recherche si data contient liste magasin
            If cell1.Text Like "*" & cell.Text & "*" Then
            ' renvoi sur la derniere ligne vide de matrice
            Feuil3.Range("b2").End(xlDown).Offset(1, 0) = cell.Text
            End If
     
       Next cell1
    Next cell
    End Sub
    A coller dans le VB de la feuille matrice, s'execute automatiquement dés la prise de focus
    Me rapprocherai-je du résultat ou suis je à coté de la plaque

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    @keygen08 : pour la détermination de la dernière ligne vide de matrice, il est préférable d’utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil3.Range("B" & Rows.Count).End(xlUp).Offset(1, 0) = cell.Text
    Sinon, avec la feuille MATRICE qui ne contient que les lignes d’en-tête, Feuil3.Range("b2").End(xlDown) te propulse en fin de feuille.

    Cordialement.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Par défaut
    Merci beaucoup pour ces éléments. ça fonctionne très bien à part que les noms sont triés par ordre alphabétique dans la feuille matrice - normal ?

    Sinon pour ma culture pourrais tu m'expliquer un peu plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cell1.Text Like "*" & cell.Text & "*" Then
    Merci

Discussions similaires

  1. Récupération de cellules xls dans une chaine de caractére
    Par maissaab dans le forum Général Python
    Réponses: 0
    Dernier message: 12/03/2012, 10h10
  2. Réponses: 3
    Dernier message: 27/01/2011, 09h40
  3. Nom de fonction dans une chaine de caractères
    Par Arbooch dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2010, 18h32
  4. Réponses: 2
    Dernier message: 25/09/2009, 22h56

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