IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Macros et VBA Excel Discussion :

Création clé primaire avec formule concatener


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut Création clé primaire avec formule concatener
    Bonjour,
    Je créer un listing de chauffeur avec leur coordonnées.

    J'ai créer une colonne avec la formule concaténer pour créer un ID en majuscule (3 lettres du nom et 3 lettres du prénom):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAJUSCULE(CONCATENER(GAUCHE(B2;3);GAUCHE(C2;3)))
    J'aimerais que cette ID soit une clé primaire.
    Je suppose que le risque de doublon est de risque faible ?
    Qu'en pensez-vous ?

    Pourriez-vous m'aider ?

    P.S. J'ai office 365..que dois-je remplir dans le préfixe ?

    BAV.
    Olivier.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par zire478 Voir le message
    JE suppose que le risque de doublon est de risque faible ?
    Qu'en pensez vous ?
    Jean-Pierre Dupont et Jean-François Dupuis, ça te semble improbable ?
    Et je ne parles même pas de deux personnes ayant le même nom et prénom, ce qui est loin d'être impossible.

    Je ne sais pas ce que tu veux faire avec cette "clé primaire", mais, à mon sens, une clé primaire doit être un code unique pour chaque élément et certainement pas un code "probablement" unique.
    Les doublons ne doivent pas être improbables mais impossibles. Comme par exemple le numéro de sécurité sociale.

    Pourquoi se compliquer la vie quand un simple numéro d'ordre (écrit en dur, bien sûr) fait très bien l'affaire ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    En effet tu as raison.
    Pour tout expliquer je suis un utilisateur standard d'excell avec une connaissance minime des formules et rien de VBA.

    J'aimerais créer un fichier excell pour gérer le transport de patient.

    Ma 1ère étape est de créer une base de donnée "Chauffeur" avec les infos suivantes:
    nom/prénom/tél fixe/gsm/adresse postale/mail/date visite médicale/date de mise a jour des données.

    J'aimerais un ID qui me permet de reconnaître le chauffeur et qui soit donc unique.
    Est il possible a cet ID d'ajouter un chiffre derrière si un ID identique existe déjà mais en évitant d'encoder 2 fois le même chauffeur ?

    Bien à vous.
    Olivier.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par zire478 Voir le message
    Ma 1ère étape est de créer une base de donnée "Chauffeur" avec les infos suivantes:
    nom/prénom/tél fixe/gsm/adresse postale/mail/date visite médicale/date de mise a jour des données.
    Le gsm me semble une clé plus fiable que le nom.

    J'aimerais un ID qui me permet de reconnaître le chauffeur et qui soit donc unique.
    Est il possible a cet ID d'ajouter un chiffre derrière si un ID identique existe déjà mais en évitant d'encoder 2 fois le même chauffeur ?
    Il est possible d'utiliser la fonction LIGNE() qui retourne le numéro de ligne.
    Le problème c'est que dès que tu fais un tri, la valeur renvoyée par cette fonction change. Elle est donc déconseillée pour faire une clé primaire.

    Ce que je te conseille pour la première création, c'est d'utiliser LIGNE() pour tous tes enregistrements puis de faire sur la colonne un gros "copier/coller valeur" histoire de la figer.
    Ensuite, au fil des saisies, tu taperas le nombre de lignes existantes + 1 en dur.

    Excel ne te permettra pas de créer une clé fiable en utilisant uniquement des fonctions.
    A moins, comme je le disais, d'utiliser un élément déjà unique en lui-même comme le gsm.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut
    ok j'abandonne cette idée. mais chaque chauffeur n'a pas de gsm donc pas encoder achaque fois.

    Je reviens donc sur ton idée de numéro d'ordre..comment faire cette clé primaire...comment aussi être sur que je n'encode pas 2 fois le même chauffeur...possible de comparer plusieurs colonne ?

    en fait je veux une clé primaire car le but est d'éviter un double encodage d'un même chauffeur...comment faire cela ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme te l'a justement écrit Menhir, que je salue au pssage, un simple numéro est une clé primaire. Que tu sois bon en VBA ou pas c'est un simple bon sens.
    En Belgique, nous avons une clé unique pour chaque personne enregistrée dès sa naissance, c'est le numéro national et ce numéro tous les chauffeurs l'ont.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut
    oui en effet le numéro NISS...je veux bien essayer avec cette info..peux tu m'aider a créer cette clé primaire avec ce numéro NISS ?
    et respecter le format xx.xx.xx-xxx.xx

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le code NISS est une valeur numérique donc tu peux utiliser le format personnalisé.
    Je te conseille donc la lecture de cet excellent tutoriel de Jean Ballat Création, enregistrement et fusion de formats personnalisés et tant qu'à faire, tu peux aussi lire sur le sujet ce billet Comment extraire la date de naissance du numéro de registre national avec Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un proverbe français dit qu'il n'y à pas qu'un âne qui s'appelle martin.

    Personnellement je connais trois Michel.

    Heureusement que mon répertoire téléphonique sais les gérer.

    Sur une table de base de données, on n'aime pas que les clés primaire soient saisie par utilisateur même si elle représente l'identifiant unique du registre d'état civile.

    On qualifie les données saisie et on ajoute dans la base avec un Id qui est un n° auto incrément.

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par zire478 Voir le message
    Je reviens donc sur ton idée de numéro d'ordre..comment faire cette clé primaire...
    Pour les lignes qui n'ont pas encore été renseignées, tu mets dans la colonne clé une fonction MAX de ce qui précède +1.
    Au moment de renseigner la ligne, tu figes cette valeur en la retapant à la main.

    comment aussi être sur que je n'encode pas 2 fois le même chauffeur...possible de comparer plusieurs colonne ?
    La solution la plus simple est de mettre une MFC sur la colonne pour signaler les doublons.
    Tu peux aussi mettre sur cette colonne une validation de données qui utilise la fonction NB.SI pour empêcher que la valeur soit saisie plus d'une fois.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Personnellement ajouterais un onglet de configuration avec en B1 par exemple mon n° auto incrément.
    [B1]= [B1]+1

    Ça évitera de redistribuer u même n° à une autre personne en cas de suppression de ligne.

  12. #12
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zire478 Voir le message
    en fait je veux une clé primaire car le but est d'éviter un double encodage d'un même chauffeur...comment faire cela ?
    Bonjour à tous,

    Pourquoi tu n'utiliserais le N° du Permis de conduire qui à mon avis doit être unique pour ta clef ?
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re bonjour pour peu que tu ai 3 colonne dispo dans ton tableau
    tu concataine 3 cellule
    exemple

    formule
    =MAJUSCULE(CONCATENER(GAUCHE(B3;3);GAUCHE(C3;3);A3))
    que tu applique a toute la colonne utilisé le dernier agument c'est la colonne 1 de ta plage chauffeur soit la "A"
    meme si le resultat de la concatenation de "B" et "C" le numero fait la difference

    Nom : Capture.JPG
Affichages : 3692
Taille : 59,4 Ko

    edit :
    est que je suis encore bien reveillé moi
    meme sans colonne dispo
    =MAJUSCULE(CONCATENER(GAUCHE(B3;3);GAUCHE(C3;3);LIGNE(B3)))
    et pareille tu etend la formule a tout la colonne

    Nom : Capture.JPG
Affichages : 3440
Taille : 51,2 Ko

    de meme que ceci pourrait faire l'affaire:
    Nom : Capture.JPG
Affichages : 3486
Taille : 103,4 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut
    Bonjour à tous,

    Un tout grand merci pour vos différents choix!!
    J'ai choisi la solution de patrick a savoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAJUSCULE(CONCATENER(GAUCHE(B3;3);GAUCHE(C3;3);A3))
    Voici ma formule au finale pour que la colonne ID reste vide tant que le prénom et nom ne sont pas rempli:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI([Prénom]="";"";SI([Nom]="";"";MAJUSCULE(CONCATENER(GAUCHE(C2;3);GAUCHE(D2;3);[]))))
    Merci bcp!
    Olivier.

  15. #15
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Petit détail : le fonction CONCATENER() ne sert plus à rien depuis l'introduction de l'opérateur &.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MAJUSCULE(GAUCHE(B3;3)&GAUCHE(C3;3)&A3)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  16. #16
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut
    Merci bcp. Je viens d'adapter cette formule

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    ok zire
    ca implique tout de meme une colonne suplementaire la "A" ,tandis que l'exemple 2 et 3 non c'est pas rien
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #18
    Membre du Club
    Homme Profil pro
    Infirmier
    Inscrit en
    Octobre 2018
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Infirmier

    Informations forums :
    Inscription : Octobre 2018
    Messages : 90
    Points : 41
    Points
    41
    Par défaut
    d'accord mais le problème c'est que le numéro va changer si je supprime ou trie les données....

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Ne jamais utiliser de format personnalisé pour des données "chiffrées" qui ne sont pas des nombres... Le format personnalisé n'empêchera pas de "laisser tomber" les 0 non significatifs à gauche. C'est le cas notamment pour les numéros postaux des 9 premiers départements français (format spécial pourtant préconisé par Microsoft) qui laisse tomber le 0 et qui fait par exemple que le code postal d'Aubenas (07200) saisi avec ce format personnalisé devient 7200 (mais affiché 07200). Les N.N. Belges tombent sous ce cas de figure puisque des N.N. peuvent commencer par 0.

    Si on veut travailler proprement, on met en format texte les colonnes des données qui ne sont pas des nombres (=> sur lesquels on n'appliquera pas d'opérations arithmétiques), tels que les numéros nationaux, les codes postaux, les numéros de téléphone, de sécurité sociale, de compte bancaire, ...

    C'est le b.a.ba de la gestion de données

    PS: j'espère que tu ne gères pas les numéros de tes patients selon ce qui est préconisé dans cette discussion... Monsieur X risquerait une hystérectomie et madame Y une ablation de la prostate...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zire478 Voir le message
    d'accord mais le problème c'est que le numéro va changer si je supprime ou trie les données....
    Bonjour,
    C'est exactement ce que j'explique au poste #11. Pour qu'un identifiant soit univoque il doit être indépendant des données.

    Bien sur avant l'ajout d'une nouvelle lignes il te faudra qualifié les données saisie pour éviter les doublons.
    Dernière modification par AlainTech ; 19/11/2018 à 04h32.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2013] Macro Excel création de colonne avec formules
    Par Micheltru dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2016, 10h41
  2. Réponses: 2
    Dernier message: 26/10/2012, 10h28
  3. Création clé primaire avec une séquence
    Par richard_sraing dans le forum PL/SQL
    Réponses: 0
    Dernier message: 14/11/2008, 00h36
  4. Création de table avec plusieurs clés primaires
    Par jeanjean0403 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 31/12/2007, 15h10
  5. Requête avec création clé primaire
    Par mrenaut dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 06/03/2007, 19h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo