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

flor003
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
19 juin 2007
- 13 févr. 2006 à 11:03 - Dernière réponse : flor003
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 13 févr. 2006 à 13:22
3
Merci
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

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
flor003
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
19 juin 2007
- 13 févr. 2006 à 17:14
3
Merci
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.

Merci flor003 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de flor003
flor003
Messages postés
119
Date d'inscription
dimanche 28 septembre 2003
Dernière intervention
19 juin 2007
- 13 févr. 2006 à 14:41
0
Merci
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.