Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 VBA - Contrainte lettre + chiffre

brunos31

XLDnaute Nouveau
Bonjour,

Je cherche à simplifier mes lignes de codes et surtout à parer à toutes nouvelles éventualité.
Dans une colonne j'ai plusieurs référence, la seule que je veux garder est celle aui commence par la lettre "E" suivi d'un numéros.
De base je me suis dit que juste un
VB:
IF left(####, 1) = "E" And IsNumeric (Mid(####, 2, 1)) = true then

Suffirait mais cela ne marche pas.... Trop simple je sais pas lol.
Pour le moment j'utilise ce code:
Code:
 With ThisWorkbook.Sheets("Feuil1")
            For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1

                        If .Range("A" & i) Like "A*" Then
                                   .Rows(i).Delete
                        End If
            Next i
 End With

Sauf que j'ai du prendre en compte toutes les variables, et je viens de m'apercevoir que si la lettre A est en minuscule, il le prend pas, du coup je dois tout anticiper ce qui alourdi le code...

Mon but serait juste de dire, si sur une cellule, la première lettre est "E" et suivi par un chiffre je garde cette ligne et supprime tout le reste.

Je pensais être proche de la réflexion, mais au vu des tests j'en suis loin.
Si vous avez des idées je suis preneur ^^

Merci pour vos lumières.
Bruno
 

Pièces jointes

  • traitement.xlsm
    19 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonsoir brunos31,

Voyez le fichier joint et la macro affectée au bouton :
VB:
Sub test()
Dim tablo, i&, x$, n&
tablo = Sheets("Feuil1").[A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
For i = 2 To UBound(tablo)
    x = tablo(i, 1)
    If x Like "E" & String(Len(x) - 1, "#") Then
        n = n + 1
        tablo(n, 1) = x
    End If
Next
'---restitution---
With Sheets("Save")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    If n Then .[A2].Resize(n) = tablo
    .[A2].Offset(n).Resize(.Rows.Count - n - 1).ClearContents 'RAZ en dessous
    With .UsedRange: End With 'actualise la barre de défilement verticale
    .Activate 'facultatif
End With
End Sub
A+
 

Pièces jointes

  • traitement(1).xlsm
    19.7 KB · Affichages: 7

job75

XLDnaute Barbatruc
Bonjour brunos31, patricktoulon,

Bien sûr si on s'intéresse uniquement aux 2 premiers caractères de la chaîne voyez ce fichier (2) :
VB:
For i = 2 To UBound(tablo)
    If UCase(tablo(i, 1)) Like "E#*" Then
        n = n + 1
        tablo(n, 1) = tablo(i, 1)
    End If
Next
La lettre minuscule "e" est acceptée grâce à UCase.

A+
 

Pièces jointes

  • traitement(2).xlsm
    19.9 KB · Affichages: 1

Discussions similaires

Réponses
2
Affichages
329
Réponses
4
Affichages
451
Réponses
7
Affichages
592
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…