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.
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 : )
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 :
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.
Partager