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 :

Localisation d'une chaîne de caractère dans une colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut Localisation d'une chaîne de caractère dans une colonne
    Bonjour,

    mon but actuel : j'ai deux feuilles excel. Je veux trouver une chaine de la feuille 1 dans la feuille 2.

    Quand l’utilisateur entre un chiffre dans une colonne de la feuille 1, mon script cherche de quel ligne il s'agit et récupère le contenu de la colonne "adresse" correspondant à cette ligne.
    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
    Private Sub Worksheet_Change(ByVal target As Range)
        Dim rg As Range
        Dim lastrow, myrow As Integer
        Dim myData As String
     
        With ActiveSheet
           lastrow = .Cells(.Rows.Count, "G").End(xlUp).Row
        End With
     
        'Ne rien faire si plus d'une cellule est changée ou si le contenu est supprimé
        If target.Cells.Count > 1 Or IsEmpty(target) Then Exit Sub
     
        'Vérifier que l'action concerne bien les colonnes des mois (de I à T)
        If Not Application.Intersect(target, Range("I8:T" & lastrow)) Is Nothing Then
     
        'on récupere la ligne
        myrow = target.Row
        'la valeur de G
        myData = ActiveSheet.Range("G" & myrow).Value
        myData = NumericOnly(myData)
        'MsgBox myData
     
        Dim i As Integer
        Dim num As String
        i = 2
        lastrow = Worksheets(2).UsedRange.Rows.Count
            While i < lastrow
            num = Worksheets(2).Range("A" & i).Value
     
     
     
     
        i = i + 1
        Wend
     
        End If
     
    End Sub


    Ensuite je trie cette adresse avec un regex (la fonction suivante : )

    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
    Public Function NumericOnly(s As String) As String
        Dim s2 As String
        Dim replace_hyphen As String
        replace_hyphen = " "
     
        Static re As RegExp
        If re Is Nothing Then Set re = New RegExp
        re.IgnoreCase = True
        re.Global = True
        re.Pattern = "[^0-9 -]" 'includes space, if you want to exclude space "[^0-9]"
        s2 = re.Replace(s, vbNullString)
        re.Pattern = "[^0-9 ]"
        NumericOnly = re.Replace(s2, replace_hyphen)
     
     
    End Function
    L'adresse est de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    61 RUE MACHIN 77300 FONTAINEBLEAU 803834474-0160707357
    Le regex me retourne 61 77300 803834474 0160707356

    Je cherche à localiser le chiffre 803834474 dans la colonne A de ma deuxième feuille et/ou le chiffre 0160707356 dans la colonne B.

    Est-ce que, sans effectuer plus de traitement sur ma chaîne, je peux le faire? (opérateur like?) Sinon je pensais séparer cette chaîne au moyen des espaces (pour qu'elle soit dans un array)et faire mon check pour chaque partie en différenciant les numéros en fonction de leur longueur ( je sais qu'un numéro de 9 chiffre devra être dans la colonne A et qu'un numéro de 10 sera dans la colonne B).

    A noter que je suis débutant , ce n'est pas moi qui est écris le regex et je suis loin de le maîtriser (je comprend vaguement le système). Par conséquent, j'aurais besoin d'ajouter un autre séparateur (/ et //). Et je n'ai qu'une vague idée de comment utiliser un array pour faire ce dont j'ai besoin.

    Sinon je pensais, plus simplement, faire un premier traitement pour isoler le numéro a 10 chiffre, le mettre dans une variable "phone" et un deuxième traitement pour isoler le numéro à 9 chiffres et le mettre dans la variable "contrat" par exemple.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Essaie (change le nom de la feuille) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set C = [Feuil2!A:A].Find(Split(NumericOnly, " ")(2), , , xlWhole)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set C = [Feuil2!B:B].Find(Split(NumericOnly, " ")(3), , , xlWhole)

Discussions similaires

  1. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  2. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 12h51
  3. Réponses: 7
    Dernier message: 14/12/2005, 09h53
  4. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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