Besoin d'un pro du VBA

Fermé
Thomas - 30 juin 2009 à 16:58
 le père - 30 juin 2009 à 18:30
Bonjour à tous ,

Voici un programme que j'ai codé :

Sub PHASE2_ESSAIFINAL1()

Sheets("TEST_PHASE_2").Select
For Each c In Range("A:A")
If Not c.Value Like "^[A-Za-z]{2}[0-9]{6}" And Not IsEmpty(c) Then
c.EntireRow.Delete
End If
Next c
End Sub

L'objectif est le suivant : :

Dans la colonn A j'ai près de 6000 projets que je veux trier. Ils ont tous un nom composé de Caractères ( lettres ou chiffres ).
Les deux premiers caractères sont TOUJOURS des lettres et je m'en fiche .
Par contre je veux éliminer tous les projets ( donc les lignes ) donc les noms ont des lettres après le 2nd item.

Ainsi : il faut qu'il garde AA012325 mais qu'il supprime tout ce qui est AANV1234 ou encore AA01X010
En gros que dès qu'il y a une lettre après les deux premiers item ( quelque soit la lettre ) je voudrais que le programme m'enlève la ligne .


Or le programme codé ( je pensais qu'il marchait au début ) ne m'élimine qu'un projet sur 2 ... Bizarre.

Merci d'avance pour vos réponses car étant novice je suis perdu.

4 réponses

Bonjour

Je n'ai pas testé, mais je suppose que ton erreur est due au fait que quand tu effaces une ligne, la suite est "retassée" vers le haut. La ligne suivante prend la place de la ligne effacée. Quand le for each passe à la ligne suivante, en fait il saute une ligne.
Il faudrait faire un while avec un numéro de ligne et ne pas incrémenter le numéro de ligne s'il y a eu effacement.
0
tibobo_77 Messages postés 1357 Date d'inscription mardi 21 avril 2009 Statut Membre Dernière intervention 27 juillet 2012 263
30 juin 2009 à 17:15
utilise:
--> texte.Split("chose a couper")
sur un texte pour le découper en supprimant normalement la partie couper Attention renvoye un tableau de string (ac les partie des phrases)

-->texte.Replace( "texte a remplacer" , "replacer par")
en entrant "" a la place de "remplacer par", le texte a remplacer sera tout simplement supprimer

Voila 2 methodes, tu peux en trouvé d'autre

Ca permet de simplifier le trie a mon avis
0
Merci pour vos réponses.
il semblerait que ce soit les regular expressions qui ne fonctionnent pas en VBA.
Par contre étant Newbie je ne comprends pas trop vos conseils surtout le tien tibobo77.
Merci d'avance

Thomas.
0
Sub PHASE2_ESSAIFINAL1()

Dim ligne
Dim C As Range
Sheets("TEST_PHASE_2").Select
ligne = 1
While ligne <= Range("A65536").End(xlUp).Row
Set C = Cells(ligne, 1)
If Not IsNumeric(Mid$(C.Value, 3)) And Not IsEmpty(C) Then
C.EntireRow.Delete
Else
ligne = ligne + 1
End If
Wend
End Sub
0