la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 novembre 2005
-
15 sept. 2005 à 16:02
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
16 sept. 2005 à 13:43
Bonjour à tous,
mon probleme est certainement tres simple et evident...
Voici, ma boucle:
If InStr(Zelleninhalt, F_T) Or InStr(Zelleninhalt, F_T2) Then
Rows(k).Delete 'Die Zeile löschen, da ein Fehler drin ist
k = k - 1 'k wieder einen zurücksetzten
End If
le probleme est ke jai environ 50 variables F_T, et lorsque je retourne a la ligne, evidemment ma boucle est cassee... Comment faire?
For k = 1 To Sheet_Quelle_Ende
Zelleninhalt = Sheets(Sheet_Quelle).Range(Sheet_Quelle_col & k).Value
'maintenant voir, si le contenu de la cellule a une faute
for t=1 to 8
If InStr(Zelleninhalt, F_T(t)) Then
Rows(k).Delete
k = k - 1 'permet de revenir sur la bonne ligne qui vient d'être remontée
End If
next t
la_bavaroise
Messages postés24Date d'inscriptionmercredi 14 septembre 2005StatutMembreDernière intervention22 novembre 2005 15 sept. 2005 à 17:28
Salut les gars, c gentil, merci de m'eduquer en voca, c'est admirable!
En fait, je ne peux pas utiliser de tableur. ma macro sert à detecter automatiquement des fautes de frappe provenant dune BDD externe et dont les données sont exportees dans une feuille excel. Pour les detecter, jai donc creer cette variable(F_T). La seule chose qui est sure, cest que les fautes sont a detectees ds la colonne C, le reste, cad les cellules precises, je ne peux les connaitre a l'avance, tout depend de l'actualisation
Voici un extrait de mon code:
Option Explicit
Public Sheet_Quelle, Sheet_Quelle_col, Sheet_Quelle_Ende
'(Quelle=source)
Sub Finde_Fehler() '(macro trouver_faute)
'***********************************************************************************
'Variables a declarer
'******************************************************************
Sheet_Quelle = "WWH" 'le nom de ma Worksheet, ou je veux trouver la derniere 'ligne
Sheet_Quelle_col = "C" la colonne de ma Worksheet, ou je veux trouver la 'derniere ligne
Call letzte_zeile_Quelle ' la derniere ligne, qui sera trouve par Public Sub 'letzte_zeile grace a lordre Call
Sheets(Sheet_Quelle).Select
Dim k, Zelleninhalt, Dim k, Zelleninhalt, F_T, F_T2, F_T3, F_T4, F_T5, F_T6, F_T7, F_T8 'F_T=Fehler_Text qui veut dire faute_texte
For k = 1 To Sheet_Quelle_Ende
Zelleninhalt = Sheets(Sheet_Quelle).Range(Sheet_Quelle_col & k).Value
'maintenant voir, si le contenu de la cellule a une faute
If InStr(Zelleninhalt, F_T) Or InStr(Zelleninhalt, F_T2) Or InStr(Zelleninhalt, F_T3) Or InStr(Zelleninhalt, F_T4) Or InStr(Zelleninhalt, F_T5) Or InStr(Zelleninhalt, F_T6) Or InStr(Zelleninhalt, F_T7) Or InStr(Zelleninhalt, F_T8)Then
'la, jutilise la fonction InStr
'si il y a bien une faute, alors
Rows(k).Delete 'Die Zeile löschen, da ein Fehler drin ist
k = k - 1
End If
Next k
End Sub
Public Sub letzte_zeile_Quelle()
Sheets(Sheet_Quelle).Select
Sheet_Quelle_Ende = 0
Sheet_Quelle_Ende = ActiveSheet.Cells(Rows.Count, Sheet_Quelle_col).End(xlUp).Row
End Sub
Voila, donc je ne sais comment faire pour ne pas casse linstruction de test If?
Mais si je m'exprime mal, n'hesitez pas a me le faire savoir,
Aller, merci d'avance,
Ciao,
la bavaroise
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Celeborn
Messages postés38Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention20 septembre 2006 15 sept. 2005 à 18:15
Bonjour,
Je pense avoir compris ta question.
If InStr(Zelleninhalt, F_T) Or InStr(Zelleninhalt, F_T2) Or InStr(Zelleninhalt, F_T3) _
Or InStr(Zelleninhalt, F_T4) Or InStr(Zelleninhalt, F_T5) Or InStr(Zelleninhalt, F_T6) _
Or InStr(Zelleninhalt, F_T7) Or InStr(Zelleninhalt, F_T8)Then
Le secret est dans le caractére " _ " ! :-)
Mais j'ai tout de même peur que de répéter 50 fois ce test dans le même " If " générera une phrase trop longue pour VBA
Pourquoi ne pas réaliser ce test de cette façon ?
Test = InStr(Zelleninhalt, F_T1)
Test = Test + InStr(Zelleninhalt, F_T2)
Test = Test + InStr(Zelleninhalt, F_T3)
.....
If Test then
....
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 15 sept. 2005 à 23:07
Sauf qu'à mon avis, il faudrait rajouter un "Exit For" après le k = k -1 (inutile de continuer les tests si une valeur à répondu à notre attente)
Et je pense qu'on peut se passer de la boucle for de 1 à 8 ... En fait, il y a même plus de tableau pour le coup ...
Je ferais cela :
F_T = ", ? topcars allbank axa fs creditplusdevk"
...etc...
Puis :
For k = 1 To Sheet_Quelle_Ende
Zelleninhalt = Sheets(Sheet_Quelle).Range(Sheet_Quelle_col & k).Value
If InStr(Zelleninhalt, F_T) Then
Rows(k).Delete
k = k - 1
End If
Next k
Au cas ou les différentes val recherché pourrait contenir un espace, il faudrat modifier légèrement la construction de la var F_T en utilsant par exemple un vbNullChar plutot que l'espace ...
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 16 sept. 2005 à 01:59
Salut,
On reprend tout du début, ton prob vient du fait que tu effaces ta ligne en partant du début.
Donc je te conseille deFaire le contraire
For k = Sheet_Quelle_Ende to 1 step -1
.........
.........
.........
Donc tu gardes ton code du début et tu testes cette modif
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 16 sept. 2005 à 02:12
Re,
Désolé pour la répet.
Si tu as beaucoup de fautes à tester je te conseille le select case en lieu et place de ton If .......
Select case Zelleninhalt
Case Is = ",", "?", "topcars", "allbank" ....etc....
Rows(k).Delete
Case Else
End Select
Tu peux même le faire sur plusieurs lignes ....
cs_Celeborn
Messages postés38Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention20 septembre 2006 16 sept. 2005 à 09:19
Bonjour,
218510 valtrase le problème ne peut être résolu par le select case puisque ce n'est pas une chaine entière qui est recherchée mais une sous-chaîne, et de vider la colonne depuis le début ou la fin n'est pas vraiment un soucis.
=143123 crenaud76 pourquoi arrêter de tester la colonne alors qu'il peut rester des erreurs dedans ?, et nous cherchons si la cellule contient une des erreurs, et non toutes les erreurs, ce que fait ton second code, la meilleure des solutions me semble être a première idée, développée par 488557 us_30 .
Mais je désirerais attirer l'attention de =578964 la_bavaroise sur cette façon de gérer les comparaisons de chaîne de caractère, sans tenir compte de la casse, je pense que le mieux à faire est de penser à passer les chaînes prises dans les cellules dans une casse, par exemple, tout en minuscule, et de remplir le tableau avec des chaînes, elles aussi, en minuscule.
L'instruction "StrComp" n'étant pas utilisable puisque nous recherchons une sous chaîne.