tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006
-
11 sept. 2006 à 17:44
tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006
-
12 sept. 2006 à 16:27
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?
tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006 12 sept. 2006 à 10:10
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)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 12 sept. 2006 à 10:18
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 #
tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006 12 sept. 2006 à 11:00
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 12 sept. 2006 à 11:08
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)
tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006 12 sept. 2006 à 16:27
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.