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.