Indice de liste hors limite (2)

Résolu
flor003 Messages postés 118 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 19 juin 2007 - 13 févr. 2006 à 11:03
flor003 Messages postés 118 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 19 juin 2007 - 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

3 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 févr. 2006 à 13:22
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
3
flor003 Messages postés 118 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 19 juin 2007
13 févr. 2006 à 17:14
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.
3
flor003 Messages postés 118 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 19 juin 2007
13 févr. 2006 à 14:41
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
0
Rejoignez-nous