Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau membre du Club
    Erreur access : l'indice n'appartient pas à la sélection
    Bonjour,

    J'essaye d'ajouter des données d'un fichier excel sur la table (t_repere_site) d'une base access déjà existante et j'ai cette erreur lors de l'intégration des données :



    Je pense que l'erreur vient d'un champs sous forme de liste lié à une autre table (t_type_materiel), car lorsque je tente d'ajouter des données à la main il faut impérativement que j'ai sélectionné un élément de cette liste pour que l'enregistrement soit validé :





    Dans mon fichier excel j'ai essayé d'abord de remplir ce champs avec l'intitulé, puis avec l'identifiant, et enfin avec le code :



    Mais toujours la même erreur,

    Auriez-vous une idée de comment intégrer des données à partir d'excel dans le cas ou une table contient des champs liste non nul ?

    Merci d'avance

  2. #2
    Membre expérimenté
    Effectivement, vous avez répondu à votre question. Alors soit vous mettez à jour les types de matériel dans XL avant import, soit vous adaptez les propriétés de votre liste pour qu'elle accepte n'importe quelle valeur.

  3. #3
    Nouveau membre du Club
    Non ma question c'est pourquoi lorsque je met dans excel l'intitulé d'un élément qui se trouve déjà dans la liste celle-ci ne l'accepte pas, et pourquoi lorsque je remplace l'intitulé par l'identifiant ou le code de l'élément cela me renvoie la même erreur ?

    Je ne vois pas ce que vous voulez dire par changer les propriétés de ma liste pour qu'elle accepte n'importe quelle valeur sachant que la valeur que j'envoie via excel est déjà présente dans la liste.

  4. #4
    Modérateur

    Bonjour.

    Oui j'ai eu le cas récemment si on utilise une liste déroulante qui affiche la clef + la valeur mais qui cache la clef, essayé d'entrer la valeur directement ne fonctionne pas.
    Même un copier/coller d'un choix dans un enregistrement précédent génère une erreur.
    Alors que si on est dans le formulaire Access e qu'on sélectionne l'élément de la liste Access doit faire une substitution et cela marche.

    Bref il faut changer la source pour y mettre la clef et pas la valeur ou faire une requête de substitution et utiliser cette requête comme source.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Nouveau membre du Club
    Bonjour marot_r, dans mon cas la clé correspond-elle à l'identifiant (colonne encadrée en vert) ?


  6. #6
    Modérateur

    OK, alors je ne sais pas. Désolé.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Expert éminent
    bonjour,
    tu ne peux pas mettre "B" dans fk_type_materiel dans ton fichier Excel comme identifiant unique du matériel, il faut mettre la clé primaire numérique (la colonne que tu as encadré en vert)
    le souci est quand le matériel n'existe pas encore, il faut créer le matériel au préalable pour récupérer la clé, sachant que toute intervention manuelle dans un fichier d'importation est un risque d'erreur.

    Autre solution, en passant par des tables temporaires (temp_repere_site et temp_type_materiel) mais qui nécessite quelques requêtes:
    - tu fais ton importation initiale dans la table temp_repere_site (fk_type_materiel ne doit pas être alimentée)
    - tu ajoutes tous les matériels dans une autre table temporaire: temp_type_materiel (avec une requête d'ajout regroupée sur le libellé du matériel)
    - il te faut une autre requête qui ajoute le matériel non existant dans la table t_type_materiel (avec requête de non correspondance avec le libellé, en partant du principe que celui-ci n'est pas entré manuellement, car risque d'erreurs de saisie involontaire)
    - mettre ensuite à jour le champ fk_type_materiel de temp_repere_site avec la clé primaire de t_type_materiel (jointure avec le libellé)
    - puis importer temp_repere_site dans t_repere_site.
    - suppression ou vidage des tables temporaires.

    Si tu souhaites de l'aide pour réaliser ce processus et si tu es intéressé, n'hésite pas à me solliciter (mais pas en MP, STP).
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...