Indice de liste hors limite (2) [Résolu]

flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention - 13 févr. 2006 à 11:03 - Dernière réponse : flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention
- 13 févr. 2006 à 17:14
Bonjour,

Voila j'ai réalisé une petite application qui exporte des données d'excel vers access.
Cependant j'ai une erreur : indice de liste hors limite (2)
La ca m'enerve. C'est une erreur bénine mais j' y vois plus trop clair dans mon code.
Alors je vous demande de l'aide.

voici le code ou ca doit planter :

//de la 1ère ligne à la dernière ligne
for vligne:=4 to ligne do
begin
//de la 1ère colonne à la dernière colonne
for col:=1 to 22 do
begin

vcolonne:=chr(col+64);
//on va chercher dans excel la valeur correspondante
//on la met dans un tableau à deux dimensions
aRange:= vcolonne+IntToStr(vligne);
vCell := vWorksheet.Range[aRange];
aValue := vCell.Value;
donnees[col][vligne]:=aValue;

end;

//on récupère les données des champs Excel
sexe:=donnees[1][vligne];
nom:=donnees[2][vligne];
prenom:=donnees[3][vligne];
annee_de_naissance:=donnees[4][vligne];
adresse:=donnees[5][vligne];
adresse2:=donnees[6][vligne];
code:=donnees[7][vligne];
ville:=donnees[8][vligne];
pays:=donnees[9][vligne];
nationalite:=donnees[10][vligne];
tel:='0'+donnees[11][vligne];
portable:='0'+donnees[12][vligne];
email:=donnees[13][vligne];
if donnees[14][vligne]='oui' then
premier_marathon:='1'
else
premier_marathon:='2';
equipe:=donnees[15][vligne];
certificat_licence:=donnees[16][vligne];
numero_licence:=donnees[17][vligne];
autorisation_parentale:=donnees[18][vligne];
taille_tee_shirt:=donnees[19][vligne];
pasta_adulte:=donnees[20][vligne];
pasta_enfant:=donnees[21][vligne];
DVD_course:=donnees[22][vligne];

cat:=categorie(sexe,annee_de_naissance);

//traitement des pays
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Nom_Pays WHERE Nom_Pays LIKE '+QuotedStr(pays+'%')+' OR Pays_3caract LIKE '+QuotedStr(pays+'%')+';');
ADOQuery1.Open;
ADOQuery1.First;
lepays:=ADOQuery1.FieldValues['Nom_Pays'];

//traitement des nationalités
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Nom_Nations WHERE Nom_Pays LIKE '+QuotedStr(nationalite+'%')+' OR Pays_3caract LIKE '+QuotedStr(pays+'%')+';');
ADOQuery1.Open;
ADOQuery1.First;
lanationalite:=ADOQuery1.FieldValues['Nom_Pays'];

//on effectue le requettage d'insertion

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('INSERT INTO Inscription_01(Saisie_Par_qui,Numero_dossard,Nom,Prenom,Sexe,Date_de_naissance,Categorie,Adresse_01,Adresse_02,Code_Postal,Ville,Pays,Nationalite,Telephone,Courriel,Club,Type_de_course,Premier_Marathon');
ADOQuery1.SQL.Add(',Pasta_Party_Adlute,Pasta_Party_Enfant,Achat_DVD,Telephone_SMS,Taille_Tee_Shirt,Numero_Licence_FFA,Observation)');
ADOQuery1.SQL.Add(' VALUES('+QuotedStr('LECANU Florent')+','+IntToStr(nb)+','+UpperCase(QuotedStr(nom))+','+UpperCase(QuotedStr(prenom))+','+QuotedStr(sexe)+','+QuotedStr(annee_de_naissance)+','+QuotedStr(cat)+','+QuotedStr(adresse)+','+QuotedStr(adresse2)+','+QuotedStr(code)+','+QuotedStr(ville)+','+QuotedStr('France')+','+QuotedStr('France')+','+QuotedStr(tel)+','+QuotedStr(email)+','+QuotedStr(equipe)+','+QuotedStr(aSheetName)+','+QuotedStr(premier_marathon)+','+QuotedStr(pasta_adulte)+','+QuotedStr(DVD_course)+','+QuotedStr(pasta_enfant)+','+QuotedStr(portable)+','+QuotedStr(taille_tee_shirt)+','+QuotedStr(numero_licence)+','+QuotedStr('RAS')+');');
ADOQuery1.ExecSQL;

Inc(nb);
end;
end;
merci de votre aide
Afficher la suite 

3 réponses

Répondre au sujet
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 13 févr. 2006 à 13:22
+3
Utile
Salut,
effectivement on a un peut de mal à y voir claire ce qui est normal ici puisqu'il manque la coloration syntaxique
mais pour ton problème c'est souvent une boucle " For x:= 1 to Index Do " qui est à l'origine d'une erreur d'indice hors limite
puisque dans quasiment tous les cas la bonne syntaxe est :" For x: = 1 to Index - 1 Do "car dans la majorité
des listes l'indice du premier enregistrement n'est pas 1 mais 0

ce n'est pas une garantie de résolution de problème mais essaye déjà de changer cette ligne :
for vligne:=4 to ligne do
en
for vligne:=4 to ligne - 1 do

@+
Cirec
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention - 13 févr. 2006 à 17:14
+3
Utile
j'ai totalement refait mes boucles et tests pour les lignes et colonnes et maintenant ça marche.
Merci quand même pour ton aide cirec.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de flor003
flor003 119 Messages postés dimanche 28 septembre 2003Date d'inscription 19 juin 2007 Dernière intervention - 13 févr. 2006 à 14:41
0
Utile
salut !

Oui j'avais justement mis cela au tout début et l'erreur me semblait bizarre.
C'est d'autant plus surprenant que l'indice 2 correspond exactement au nombre de lignes présentes dans mon fichier Excel que j'exporte.
Cela ne résoud donc pas mon problème.

Merci quand même
Commenter la réponse de flor003

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.