Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : VBA Probleme de Boucle If [ Archives Visual Basic / VBA ] (la_bavaroise)

jeudi 15 septembre 2005 à 16:02:25 | VBA Probleme de Boucle If

la_bavaroise

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?

Merci d'avance pro de la prog!!

Caroline

jeudi 15 septembre 2005 à 16:12:15 | Re : VBA Probleme de Boucle If

NHenry

Membre Club
Si j'ai bien compris, tu veux tester tes 50 variables F_T?
Dans ce cas utilise un tableur et une boucle Fro ou Do..Loop.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NH

jeudi 15 septembre 2005 à 17:06:41 | Re : VBA Probleme de Boucle If

crenaud76

Petite précision ... "If" n'est pas une instruction de boucle !!! C'est une instruction de test !!

jeudi 15 septembre 2005 à 17:28:00 | Re : VBA Probleme de Boucle If

la_bavaroise

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

F_T = ","
F_T2 = "?"
F_T3 = "topcars"
F_T4 = "allbank"
F_T5 = "axa"
F_T6 = "fs"
F_T7 = "creditplus"
F_T8 = "devk"

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


jeudi 15 septembre 2005 à 18:15:30 | Re : VBA Probleme de Boucle If

Celeborn

Membre Club
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
      ....

Virtuellement vôtre !!! ;-))

jeudi 15 septembre 2005 à 21:25:27 | Re : VBA Probleme de Boucle If

crenaud76

C'est surtout qu'il faudrait plutot travailler avec un tableau plutot qu'avec 50 variables !!!

Christophe

jeudi 15 septembre 2005 à 22:29:33 | Re : VBA Probleme de Boucle If

us_30

Membre Club
Réponse acceptée !
Bah ! oui ! Utilise un tableau ! c'est évident ! comme le dit Crenaud du 76 !

Rapidement ton code devient :

Dim F_T(50) as string

F_T(1)= ","
F_T(2) = "?"
F_T(3) = "topcars"
F_T(4) = "allbank"
F_T(5) = "axa"
F_T(6) = "fs"
F_T(7) = "creditplus"
F_T(8) = "devk"

...etc...

Puis :

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

Next k

Amicalement,
Us.

jeudi 15 septembre 2005 à 23:07:17 | Re : VBA Probleme de Boucle If

crenaud76

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 ...

F_T = "," & vbNullChar & "?" & vbNullChar & "topcars" & vbNullChar & "allbank" & vbNullChar & "axa" & vbNullChar & "fs" & vbNullChar & "creditplusdevk"

Comme ca, ca blinde le truc on est peinard ...

vendredi 16 septembre 2005 à 01:59:32 | Re : VBA Probleme de Boucle If

valtrase

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

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé

vendredi 16 septembre 2005 à 02:12:45 | Re : VBA Probleme de Boucle If

valtrase

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 ....

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé


1 2

Cette discussion est classé dans : vba, boucle, probleme, instr, zelleninhalt


Répondre à ce message

Sujets en rapport avec ce message

Probleme boucle de textbox en vba [ par ptij ] Je suis sur un formulaire VBA pour une feuille Excel, et lorsque tous les textbox de ce formulaire sont remplis, je dois les insérer dans ma feuille E PROBLEME BOUCLE EN VBA EXCEL / NIVEAU TRES DEBUTANT [ par CROCHU ] cacheux probleme de programation vba exel [ par inco13 ] bonjour,je suis entrein de realiser un petit programme en vba sur exel qui me permettra lorsque je saisie un nombre(nb de place dans un avion) dans un [VBA] - Probleme de caractères [ par jeyjey1 ] Bonjour, J'ai un bout de code qui fonctionne, mais pas comme je veux, le probleme se situe ligne 1 dans ma condition comment dire que si ma textbox co probleme de boucle [ par darkspoilt ] Bonjour,J'ai un probleme de bouclue il ne veut pas sortir.D'access j'ouvre au préalable une feuille Excel.Le but de cette boulce est de de trouver la Vba probleme bete [ par falarinil ] Bonjour je vous ecris pour vous posez quelque petit probleme- je n'arrive pas a faire remplir mes textbox      Voila j'ai un formulaire type bon de co fonction si et boucle vBA [ par loulou411 ] Bonjour, <p class="MsoNormal" sty probleme avec mon application vba pour excel [ par NDOUKI ] Slt à tous ; depuis un moment je developpe une application à VBA pour excel. mais seulement j'ai un grand problème.En fait je n'arrive pas à trouve Probleme avec For each en VB6 [ par MIKYMAXSP28 ] Bonsoir a tous,Je souhaite utiliser une boucle For Each pour récupèrer le nom de chaque control de mon formulaire.Mon problème est que ma boucle For E


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.