Bonjour à tous !

Il y a quelque temps j'avais créer un topic sur un problème que j'ai rencontré.
Mon problème était :

"
IRSensBoomUp
QXSwingBrakeY7
QXCtrlCircSupplyY3

IRSensB55_2_2
QXSafetyValvePY369
QXGreasePump

IRSensPdlLForwardB169
IRSensPumpB159


Je souhaiterai en vba faire un trie de cette liste pour
- ressortir uniquement les noms qui commencent par "IR"
- que son nom contient la lettre "B" suivit au minimum de 1 chiffre.
"

Avec l'aide de Bbil et autres j'en suis arrivé là :

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
Dim st As String
Dim stSuitB As String 'Caractère suivant le b
Dim iPosB As Integer 'position du B
 
'-----test des capteurs du can1
 
While i < Worksheets(can1).Range("A65536").End(xlUp).Row
 
st = Worksheets(can1).Cells(i, 1).Text
iPosB = InStr(1, Worksheets(can1).Cells(i, 1).Text, "B")
 
    If iPosB > 0 Then
        stSuitB = Mid(st, iPosB + 1, 1)
            If IsNumeric(stSuitB) And Not InStr(1, Worksheets(can1).Cells(i, 1).Value, "IR") = 0 Then
                Worksheets("liste_modif").Range("A" & ligne_raf) = Worksheets(can1).Range("A" & i)
                Worksheets("liste_modif").Range("B" & ligne_raf) = i
                Worksheets("liste_modif").Range("C" & ligne_raf) = can1
                Worksheets("liste_modif").Range("D" & ligne_raf) = Worksheets(can1).Range("D" & i)
                Worksheets("liste_modif").Range("E" & ligne_raf) = Worksheets(can1).Range("E" & i)
                Worksheets("liste_modif").Range("F" & ligne_raf) = Worksheets(can1).Range("F" & i)
                Worksheets("liste_modif").Range("G" & ligne_raf) = Worksheets(can1).Range("G" & i)
                Worksheets("liste_modif").Range("H" & ligne_raf) = Worksheets(can1).Range("H" & i)
                ligne_raf = ligne_raf + 1
            End If
    End If
            i = i + 1
Wend
Cela fonctionne (fonctionnait) très bien !
Mais maintenant je tombe sur un nouveau problème..

Ma liste de noms à analyser a changée et certains noms sont du style :

IRSensPdlBackwardB188

et donc ma fonction de test regarde uniquement le premier "B" et celui-ci n'est pas suivit d'un chiffre donc il ne me copie pas ce nom


J'ai pensé à détecter les caractères de type numérique et regarder si le caractère précedent est un "B" mais je n'y arrive pas .

Si quelqu'un pourrait me donner un petit coup de main