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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    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 éprouvé 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
    Points : 973
    Points
    973
    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 à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    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 éprouvé 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
    Points : 973
    Points
    973
    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
    Points : 3 974
    Points
    3 974
    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 à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Autre question bête - comment je fais pour lancer une private sub depuis un bouton dans ma feuille matrice ?????

  8. #8
    Membre éprouvé 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
    Points : 973
    Points
    973
    Par défaut
    D'abords, merci @gFTZ82, je la connaissais pas celle la.

    @Jeremy283

    une private sub depuis un bouton dans ma feuille matrice
    Sous 2010, onglet develloppeur, inserer,choisir bouton eventuellement changer le nom.
    remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private sub worksheet_activate
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private sub (nom du bouton)_activate
    .
    Le nom du bouton devrait être par defaut commandbutton1.

    If cell1.Text Like "*" & cell.Text & "*" Then
    Lorsque l'on fait une recherche dans un texte ou l'ordinateur, * est un caractere generique pouvant remplacer n'importe quel autre. Donc je demande à VB de rechercher si la valeur contenu dans "data ..:cellule A1" contient la valeur de la cellule " * liste..cellule A1 * " puis liste A2 etc.... Puis je renouvelle la demande pour "data..cellule A2"
    cell1 est valeur de data
    cell est la valeur de liste
    2 variable que j'ai defini

    Bon au secours, je galere un peu, c'est plus facile a faire qu'a expliquer.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour ces explications.
    Je comprends mieux le principe désormais.

  10. #10
    Membre éprouvé 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
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    Pour mettre dans l'ordre de DATA, il suffit de changer les lignes cell et cell1 de place

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Commandbutton1_click()
    Dim cell As Range
    Dim cell1 As Range
     
    For Each cell1 In Feuil1.Range("a1:a" & Feuil1.Range("a65000").End(xlUp).Row)
        For Each cell In Feuil2.Range("a1:a" & Feuil2.Range("a65000").End(xlUp).Row)
     
            If cell1.Text Like "*" & cell.Text & "*" Then
            Feuil3.Range("B" & Rows.Count).End(xlUp).Offset(1, 0) = cell.Text
            End If
     
       Next cell
    Next cell1
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    je dois extraire le numéro sur 7 chiffres qui commence par un 8
    est ce que le chiffre precedent (14022013) est toujours le meme, tous les jours, toutes l'année.

    Auquel cas le code suivant renvoi la valeur rechercher dans la colonne S
    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
    Private Sub Commandbutton1_click()
    Dim cell As Range
    Dim cell1 As Range
     Dim s As Integer, t As Integer, w As Integer
     Dim u As String, v As String
     
    For Each cell1 In Feuil1.Range("a1:a" & Feuil1.Range("a65000").End(xlUp).Row)
        For Each cell In Feuil2.Range("a1:a" & Feuil2.Range("a65000").End(xlUp).Row)
     
            If cell1.Text Like "*" & cell.Text & "*" Then
            lig = Feuil3.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Row
            Feuil3.Range("B" & lig) = cell.Text
     
            p = InStr(cell1, "14022013")
            s = InStr(cell1, "14022013")  'position du tiret
            w = Len(cell1) 'le nombre de caractere dans la chaine
            u = Right(cell1, w - s - 8) 'les caractere a droite du tiret
            t = InStr(u, " ") 'position de l'espace apres le chiffre
            v = Left(u, t - 1) 'les caractere a gauche de l'espace
     
            Feuil3.Range("S" & lig) = v
            End If
     
       Next cell
     
    Next cell1
    End Sub

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    est ce que le chiffre precedent (14022013) est toujours le meme, tous les jours, toutes l'année.
     
    Auquel cas le code suivant renvoi la valeur rechercher dans la colonne S
    Non ca serait trop simple sinon !!
    En fait le 14022013 correspond au jour de l'année.

    Merci pour ton aide

  12. #12
    Membre éprouvé 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
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    Oui, je m'en doutait un peu, il m'avait sembler reconnaitre une date, j'aime pas les format de date. mais bon, en ajoutant quelque ligne, tous reste faisable. Je modifie et post le résultat.
    Je fais te faire bosser un peu
    La ligne 5 est a modifié avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim u As String, v As String, date1 As Variant
    Ajouter cela en ligne 6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    date1 = InputBox("Indiquer la date à rechercher (ex: 14022013)")
    Et modifier les lignes 14 et 15 avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            p = InStr(cell1, date1)
            s = InStr(cell1, date1)
    Yapluska

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