otermal
Messages postés5Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention15 novembre 2006
-
14 nov. 2006 à 20:30
otermal
Messages postés5Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention15 novembre 2006
-
15 nov. 2006 à 15:51
Salut à tous, et merci d'être là pour aider les autres (dont moi même) à se dépatouiller.
j'ai créé une boucle For Next avec une variable de type integer, cette boucle est supposée compter jusque 10000,
elle doit s'interrompre à la 1ere cellule vide soit la 7050 pour ce qui concerne mon test.
Or il s'avère qu'elle s'arrête à la cellule 6825 et donne comme message d'erreur 'Argument ou appel de procédure incorrect".
Je pense qu'il doit s'agir d'une définition de variable incorrecte, mais je pédalle plutôt dans le cirage.
JessicaR44
Messages postés116Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention29 septembre 2013 14 nov. 2006 à 22:47
' identifie la position du characters correspondant au séparateur
For n = Debut To fin 'Step Saut
Comptespace = Comptespace + 1
If Mid(LeTexte, n, 1) = Separateur Then
Point1 = Comptespace - 4
If Mid(LeTexte, Comptespace - 1, 1) = " " Or _
( Mid(LeTexte, Comptespace - 1, 1) > = "0" And _
Mid(LeTexte, Comptespace - 1, 1) <= "9" ) Then
present = 1
Exit For
End If
End If
Next n
Petite remarque en passant; c'est probablement pas à cause de ça que ça foire, mais perso, j'aurais ajouté une paire de parenthèses pour éviter toute équivoque. Sinon, ???
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 15 nov. 2006 à 09:34
A ce moment là, tu peux commencer la recherche du séparateur à partir de 2eme ou 3eme caractère au lieu du premier, comme ça tu sautera le premier X de la chaine :
Point1 = InStr (2, LeTexte, Separateur)
---- Sevyc64 (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 14 nov. 2006 à 20:45
Salut
En VB6, les Integer permettent des valeurs de -32768 à +32767, donc pas de problème de ce côté.
Il faudrait que tu nous copie/colle l'instruction sur laquelle il plante.
Fait l'essai d'exécuter une boucle simple sans rien entre le For et le Next entre 1 et 10000 et tu verras qu'il n'y a qucun problème.
A tout hasard, vérifie que les lignes de programmes entre le For et le Next ne modifie pas la valeur de la variable qui te sert dans la boucle, ça arrive de se tromper.
Tu parles de cellules ... tu travailles sous Excel ?
Dans ce cas, c'est du VBA, pas du VB6.
Pour rechercher la première cellule vide sous Excel, il existe des fonctions toutes faites (de mémoire).
Regarde aussi si la fonction que tu utilises entre le For et le Next acceptent des valeurs aussi grande, on ne sait jamais.
Une feuille Excel n'a pas un nombre de cellules illimité ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on
otermal
Messages postés5Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention15 novembre 2006 14 nov. 2006 à 21:03
Désolé, il s'agissait bien du VBA et d'Excel.
Voici ci dessous la sub qui pose problème, en l'abscence de la boucle en bleu, l'erreur n'apparaît pas :
Sub Extrait()
' Cette subroutine va balayer la 2ème colonne contenant la quantité de médicaments
' par emballage, séparé par le nom du médicament et le caractère "X",
' extraire 4 caractères avant le 'X', en soutirer le nombre,
' et l'écrire dans la colonne 7.
Dim LongTexte As Integer, n As Integer, Comptespace As Integer, LeTexte As String
Dim Debut As Integer, fin As Integer, Saut As Integer, Point1 As Integer
Dim chmp As Integer
' Définition du separateur
Separateur = "X"
For chmp = 2 To 10000 Step 1
' Détermine si le champ est le dernier donc vide
If Workbooks("SAMY").Sheets("Triés").Cells(chmp, 2).Value = "" Then
Exit For
End If
LeTexte = Workbooks("SAMY").Sheets("Triés").Cells(chmp, 2).Value
LongTexte = Len(LeTexte)
' Détermine les bornes du texte examiné
Debut = 1
fin = LongTexte
Saut = 1
Comptespace = 0
present = 0
' identifie la position du characters correspondant au séparateur
For n = Debut To fin 'Step Saut
Comptespace = Comptespace + 1
If Mid(LeTexte, n, 1) = Separateur Then
Point1 = Comptespace - 4
If Mid(LeTexte, Comptespace - 1, 1) = " " Or _
Mid(LeTexte, Comptespace - 1, 1) >= "0" And _
Mid(LeTexte, Comptespace - 1, 1) <= "9" Then
present = 1
Exit For
End If
End If
Next n
If present = 1 Then
qté = Mid(LeTexte, Point1, 4)
For n = 1 To 4
If Mid(qté, n, 1) >= "0" And _
Mid(qté, n, 1) <= "9" Then
Point2 = 4 - (n - 1)
qté = Right(qté, Point2)
Exit For
End If
Next n
Workbooks("SAMY").Sheets("Triés").Cells(chmp, 7).Value = qté
End If
Next chmp
End Sub
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 14 nov. 2006 à 22:56
Le problème peut venir effectivement de la partie que tu a mis en bleu
Lorsque le séparateur est trouvé sur le tout premier caractère, Comptespace =1, or dans tes tests tu fais Mid(...,Comptespace-1,...), c'est à dire Mid(...,0,...). C'est déjà une première erreur.
Je regarde si j'en vois d'autre
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
otermal
Messages postés5Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention15 novembre 2006 15 nov. 2006 à 09:25
Merci encore,
Avec la proposition de "sevyc64", l'erreur disparraît.
Le compteur s'arrête tout de même à 6824, et c'est normal mon caractère séparateur, que je n'ai pas choisit, est le 'X' or à 6825 commence la lettre 'X' de ma liste, vous ne pouviez-pas le savoir.
Il faut que le test continue sur la 'string' tant que le séparateur n'est pas précédé ou suivit d'un espace ou d'un chiffre.
Mais vous n'êtes pas là pour résoudre tous mes problèmes, aussi je vais m'ateler à celà.
Et pour terminer sur une épanadiplose, encore merci.