Vérifier le 9ème charactère d'une chaîne + suppressions derniers charactères

Résolu
Signaler
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006
-
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006
-
Bonjour

J'ai un petit soucis, j'ai un tableau d'une colonne et de 2000 lignes dans lequel figure différentes chaînes de 10 caractères.
ex : wb1vtiskv1, wb1vtiskh2, xb1uviskl2...
Je voudrais pouvoir créer une macro qui permette de regarde le 9ème charactère de la chaîne.
Si le 9ème caractère est un "v" alors on laisse la cellule en l'état sans modifier la chaîne de caractère; dans le cas où ce n'est pas un "v", alors on supprime le 9ème et le 10ème charactère.

Dim UnCell As Range 
'Selectionne la colonne A
ActiveWorkbook.ActiveSheet.Columns("A:A").Select 

'Pour chaque cellule de la colonne A
For Each UnCell In Selection 
'si le 9ème charactère est un "v" alors : on ne fait rien
"if...?[...]
UnCell.Value = UnCell.Value
'Sinon, on remplace les deux derniers charactères de la chaîne par rien "":
Else
"UnCell.Value = Replace(UnCell.Value, "deux derniers caractères", "", 1, 1)" ...?
 
Serait-il possible d'avoir vos points de vues et vos suggestions sur la question?

Merci d'avance à tous ceux qui pourront m'aider

6 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,


For
 
Each
 UnCell 
In
 Selection 
'si le 9ème charactère N'est PAS un "v" alors : ne récupère que les
' 8 premiers caractères



If Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value = Mid(UnCell.Value, 1, 8) 






@+,   Ju£i?n
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006

Bonjour à tous,
Merci Jrivet pour ta réponse, j'ai donc créé un petit pgm, mais à chaque fois que je lance la macro, j'ai un message d'erreur qui s'affiche et qui indique : "else sans if"
Vous pourrez trouver le code (2 chemins différents) mais à chaque fois, cela me retourne le même message d'erreur...
--------------------------------------------------------------------------------------


Dim UnCell As Range<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



'Selectionne la colonne A




ActiveWorkbook.ActiveSheet.Columns("A:A").Select



 





'Pour chaque cellule de la colonne A




For Each UnCell In Selection



'si le 9ème charactère est un "v" alors : la valeur de la cellule reste la même




If Mid(UnCell.Value, 9, 1) "v" Then UnCell.Value UnCell.Value



'Sinon, on remplace les deux derniers charactères de la chaîne par rien "":




Else: If Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value = Mid(UnCell.Value, 1, 8)




--------------------------------------------------------------------------------------

Dim UnCell As Range


'Selectionne la colonne A


ActiveWorkbook.ActiveSheet.Columns("A:A").Select



 




'Pour chaque cellule de la colonne A


For Each UnCell In Selection



‘Si la 9ème cellule n’est pas un ‘v’ alors on sélectionne seulement les 8 premières




If Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value = Mid(UnCell.Value, 1, 8)



‘Sinon, on affecte la même valeur à la cellule




Else: UnCell.Value = UnCell.Value










End If
--------------------------------------------------------------------------------------

 

 Quelqu'un aurait-il une idée de l'erreur commise?

 
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
If Mid(UnCell.Value, 9, 1) =  "v" Then 
    UnCell.Value = UnCell.Value 

'Sinon, on remplace les deux derniers charactères de la chaîne par rien "":
ElseIf  Mid (UnCell.Value, 9, 1) <> "v" Then 
    UnCell.Value  = Mid(UnCell.Value, 1, 8) 
End If 

......
If Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value   Mid (UnCell.Value, 1, 8) Else: UnCell.Value  UnCell.Value 

Je te l'ai fait en 2 versions, la première est la version normale et la seconde est la version "Inline" càd sur une ligne. Toi tu avais mixé les deux, d'ou le message d'erreur.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006

Merci Casy pour la réponse. J'ai utilisé la formule "inline" marche très bien
Par contre mon programme n'était pas tout à fait bien conçu, car le fait de sélectionner la colonne A entièrement engendrait un programme et une boucle for infinie (car il y a une infinité de lignes)D onc j'ai remplacé "ActiveWorkbook.ActiveSheet.Columns("A:A").Select" par "ActiveSheet.UsedRange.Select" qui permet de sélectionner le tableau.

Cela donne :
---------------------------------------------------------------------------------------
Dim UnCell As Range
'Selectionne le tableau
ActiveSheet.UsedRange.Select
'Pour chaque cellule du tableau
For Each UnCell In Selection
'Si la 9eme cellule n'est pa sun neuf, on affiche seulement les 8premières, sinon on garde la même valeurIf Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value Mid(UnCell.Value, 1, 8) Else: UnCell.Value UnCell.Value
Next
---------------------------------------------------------------------------------------

Merci encore à tous
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,


Lorsque tu marquesIf Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value Mid(UnCell.Value, 1, 8) Else: UnCell.Value UnCell.Value

En fait on se rend compte que ton else n'a aucun interet d'ou simplement

If Mid(UnCell.Value, 9, 1) <> "v" Then UnCell.Value = Mid(UnCell.Value, 1, 8)

Normalement il ne devrait pas te dire else sans if

Si tu n'a pas de condition Else tu peut tres bien mettre un If sur une seule ligne (pour peu qu'il n'y est qu une sule instruction a effectuer si la condition du If se verifie (je ne sais pas i je suis tres clair)






@+,   Ju£i?n
Messages postés
21
Date d'inscription
mercredi 26 avril 2006
Statut
Membre
Dernière intervention
12 septembre 2006

Lol, je n'ai pas testé cette solution, mais il est très possible que cela marche.
Disons que je n'étais pas sûre, dans le cas où le if n'est pas vérifié, de la manière dont réagirais le pgm.