Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Clé primaire enfonction de deux champs concaténés

  • Initiateur de la discussion Initiateur de la discussion Nelieru
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

Nelieru

Guest
[RESOLU] Clé primaire enfonction de deux champs concaténés

Bonjour bonjour amis internautes,

mon souci est ben, dans le titre... En fait, je travail sous Excel et aimerais savoir comment récupérer la clé primaire d'un champ, lorsque ce champ comporte trois champs concaténés.

Par exemple je voudrais avoir le numéro de client, de Georges BINOT de la société DULAC par exemple. Dans Excel, Georges BINOT Société DULAC est récupéré dans une cellule et j'aimerais savoir comment l'utiliser pour récupérer ma clé primaire...

Je précise que les données proviennent d'une base Access...

Merci =)
 
Dernière modification par un modérateur:
Re : Clé primaire enfonction de deux champs concaténés

Bonjour Nelieru, bienvenue sur ce forum,

La résolution de ton problème dépend de la composition de la chaîne de caractères.
- 1.
Si la longueur de la chaîne est constante, la réponse est simple :
il suffit d'utiliser par exemple la fonction =GAUCHE(NomsConcaténés;NbreDeCaractères)
Contrepartie : la chaîne devant être de longueur constante (ex 80 caractères pour le Nom et le Prénom), la saisie devra combler les espaces non utilisés.

Par exemple pour Georges BINOT Société DULAC la saisie devra être :
Georges BINOT suivi de 67 espaces (13 caractères Nom Prénom + 67 espaces)
Il sera ensuite aisé d'extraire la clé primaire (Nom Prénom) de la manière suivante :
=SUPPRESPACE(GAUCHE(NomsConcaténés;80)).
La fonction GAUCHE extrait les 80 caractères à partir de la gauche, la fonction SUPPRESPACE supprime les espaces inutiles et conserve l'espace entre le nom et le prénom.


- 2. Si la longueur de la chaîne n'est pas constante, le problème est beaucoup plus complexe :
Comment connaître la longueur de la chaîne à extraire dans les exemples suivants ?
- Georges BINOT Société DULAC
- Hubert Gonsague DE LA HAUTE Société RENTIER A VIE
- Alphonse TABAGNOLE Garage Peugeot Citroen

Vraiment pas évident, même la conversion des données via le séparateur ESPACE serait inefficace.

Aussi, je me pose 2 questions :
1. sur la forme : n'y aurait-il pas moyen d'importer directement d'ACCESS le champ Prénom NOM ou de préparer directement ce champ pour faciliter son importation ?
2. sur le fond : je suis surpris que ta clé primaire soit composée uniquement du nom et du prénom. La qualité principale d'une clé primaire c'est d'être unique, alors ne risques-tu pas d'être confronté à des problèmes d'homonymie ?

Peux tu donner plus de précisions ?

A+
Kotov
 
Dernière édition:
Re : Clé primaire enfonction de deux champs concaténés

Bonjour Kolov, avant tout merci d'avoir répondu 🙂.

Pour plus de précision, mes champs concaténés sont en réalités importé par un code vba, dans une liste déroulante, celle-ci étant ensuite directement lié à une cellule (C30 par exemple). Pour ta question sur la clé primaire, le nom et le prénom ne le sont pas, j'ai bien mis un numéro.

Sinon, le tout était pour moi de savoir comment faire la relation entre ces champs concaténés et la clé primaire de ma base qui n'est entre autre qu'un numéro. J'ai donc alors penser à une autre solution, me paraissant beaucoup plus simple, tout simplement en mettant la clé primaire dans la liste déroulante. Cela se présente alors comme çà dans la liste : Georges BINOT Société DULAC (67).

J'ai ensuite écrit un code VBA qui extrait le numéro 67 entre les parenthèses, ca marche parfaitement 🙂.

Il y a quand meme une dernière question qui me turlupine, comment faire pour intégrer une cellule à un code SQL, dans le sens ou lorsque je fais une recherche par SQL, mon critère serait la cellule. J'utilise la méthode du SQL incrusté dans le VBA, donc il est possible que cela soit simplement WHERE numcli="Feuil1!C30" ?

Nelieru
 
Dernière modification par un modérateur:
Re : Clé primaire enfonction de deux champs concaténés

Bonjour Nelieru

Pour ta question sur le SQL (le WHERE toto = <valeur_cellule>) :
Il y a moyen de le faire sans une ligne de code.
Regarde du coté de MicrosoftQueries (Données-->Données Externes-->Créer une requête), c'est vraiment puissant...

A+, bon Excel
 
Re : Clé primaire enfonction de deux champs concaténés

J'ai en effet regardé du côté de MicrosoftQueries, sympathique d'ailleurs. Mais le problème restera le même, voir pire.

Je m'explique, ma démarche est au départ de lancer une requête SQL qui récupére des données d'une base, et les insérer dans une liste déroulante excel. Avec le code VBA que j'ai fait, je récupère la clé primaire de ma liste (ici 67 pour Georges BINOT Société DULAC (67)).

Une fois la clé primaire récupéré, je la place dans une cellule C30 par exemple, il me faut ensuite lancer une requête qui affichera les données (téléphone, adresse etc...) en fonction de cette clé récupérée, donc tous les champs qui correspondent à la cellule C30.

Il faut donc au final que je lancer tout en même temps et donc dans une seule et meme macro.

Donc passer par MSQueries ne serait pas génial malgré qu'il soit un bon outil, il faut donc que je passe par du VBA. Le code n'est pas un problème, il me manque juste ce petit truc de la condition WHERE numcli=???. J'ai essaye Range("cellule").value, Feuil1!cellule, mais rien ne marche. Auriez vous des suggestions =)?

Nelieru
 
Dernière modification par un modérateur:
Re : Clé primaire enfonction de deux champs concaténés

Re-coucou

j'ai pas du très bien comprendre ton PB, mais avec MSQueries, tu peux par faire une requête en fonction de ta clef (situé dans une cellule), et ta requête se met à jour à chaque fois que la cellule change de valeur (la clef donc). Il ne te resterai plus qu'à récupérer la clef (avec du code) l'écrire dans la cellule, et la requête se met à jour...

comme dit plus haut : je suis pas sur d'avoir compris ton PB... le mieux serait que tu passes un fichier en exemple.

A+
 
Re : Clé primaire enfonction de deux champs concaténés

J'ai ré-éditer le message deux lignes plus haut, en effet mon explication n'était pas clair -_-'...
 
Dernière modification par un modérateur:
Re : Clé primaire enfonction de deux champs concaténés

Personne pour me répondre 🙁?

J'ai essayé ce code aussi mais ca ne marche pas, il me fait dit de syntaxe...

Set rec = db.OpenRecordset("
SELECT nomcli, adrcli, cpcli, villecli, payscli, telcontact_c, faxcontact_c, fonctioncontact_c, numcontact_c
FROM CLIENT, CONTACT_C
WHERE numcli_c = numcli AND numcontact_c=" & Range("C38").Value "", DAO.dbOpenSnapshot)

EDIT: j'avais oublié un & à coté de Value, à présent cela marche...
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…