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 :

Génération de numéros uniques logiques


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2020
    Messages : 1
    Par défaut Génération de numéros uniques logiques
    Bonjour à tous,

    Je dois réaliser un fichier de suivi de pièces. Ces pièces afin de pouvoir être tracées doivent être numérotées.
    Ce qui a été choisi est que le numéro de la pièce sera : numéro lié au fournisseur (voir ci-après) suivi du numéro de ligne.
    En fonction du fournisseur :
    - Paul : 01
    - Pierre : 02
    - Jacques : 03

    Exemple : Je suis sur la ligne 2, si ma pièce vient de chez Paul, je sélectionne dans la liste "Paul" dans la colonne "Fournisseur" et automatiquement dans la colonne "N° pièce" se génère le numéro 012.

    Pour le moment j'ai donc écrit dans la colonne "N° pièce" :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI([@Fournisseur]="PAUL";"01";SI([@Fournisseur]="PIERRE";"02";SI([@Fournisseur]="JACQUES";"03";"")))

    J'espère avoir été claire ! Je vous remercie par avance pour vos réponses,

    Navym

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    pas claire au moins pour moi
    si j'ai fournisseur en colonne A
    je veux récupérer le numéro de la ligne de ce fournisseur; il suffit de taper la formule en colonne B :
    =LIGNE(A2)
    en colonne C concaténer le nom de fournisseur et le numéro de ligne avec :
    CONCATENER(A2;TEXTE(B2;"000"))
    ce qui donne sans passer par une colonne intermédiaire
    CONCATENER(A2;TEXTE(LIGNE(A2);"000"))
    revenir avec plus d'explication si c'est pas ce que tu cherches
    bonne continuation

  3. #3
    Candidat au Club
    Homme Profil pro
    DAF
    Inscrit en
    Juin 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : DAF
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2020
    Messages : 4
    Par défaut
    A votre place, je n'utiliserais pas la fonction SI qui va devenir très vite compliquée à mesure que le nb de fournisseur augmentera.
    Voici comment je ferais:
    1) création d'une table des fournisseurs avec deux colonnes et les intitulés des colonnes en première ligne : nom et code. idéalement cette table doit être transformée en tableau de donnée via le menu insertion tableau en prenant bien soin de cocher la case "mon tableau comporte des entête. Le tableau sera par exemple renommé "T_fournisseurs"

    Nom : T_fournisseurs.jpg
Affichages : 126
Taille : 5,5 Ko

    2) création d'une table des pièces avec (au moins) 3 colonnes: N° pièce, nom fournisseur et code pièce. La table peut également être transformée en tableau (nommé T_pièces), ce qui facilitera la syntaxe des formules et leur lisibilité.Le numéro de pièce est saisi. La colonne nom fournisseurs peut être une liste de choix (données/ validation de données /liste) qui prend sa source dans T_fournisseurs et s'incrémente automatiquement grace à la combinaison des fonctions decaler et nbval.

    Nom : T_pièces.jpg
Affichages : 124
Taille : 11,8 Ko

    3) utilisation de la formule SOMMEPROD pour la génération du code unique dans la colonne "code pièce":
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =TEXTE(SOMMEPROD((T_Fournisseurs[Nom]=[@Fournisseur])*T_Fournisseurs[Code])&[@[N° pièce]];"00#")
    !!La disposition des parenthèses est très importante pour cette formule.

    Vous pourriez également utiliser la fonction bdlire mais elle nécessite de créer une zone de critère, ce dont sommeprod vous dispense

    La formule peut ensuite être incrémentée vers les autres lignes
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent 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
    Par défaut
    Citation Envoyé par navym Voir le message
    suivi du numéro de ligne.
    Mauvaise idée : il suffirait de faire un tri dans tes données pour que tous les numéros "uniques" soient intervertis.

    La seule solution fiable serait que le numéro soit "en dur" dans la cellule.
    Mais ça, des fonctions ne savent pas le faire. Il sera donc nécessaire de passer par du VBA, par exemple une macro évènementielle Worksheet_Change qui détecterait la saisie du fournisseur et génèrerait le code en conséquence.

  5. #5
    Candidat au Club
    Homme Profil pro
    DAF
    Inscrit en
    Juin 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : DAF
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2020
    Messages : 4
    Par défaut
    Je ne crois pas qu'il soit intéressant de se lancer dans des macros pour une utilisation aussi simple, ni qu'il soit cohérent d'utiliser dans votre nomenclature les N° de ligne d'excel pour des données qui seront triées, le plus simple est selon moi de mettre un numéro de ligne "en dur" dans le tableur et de faire une formule toute simple.

    Toute fois si votre choix est ferme, avec les tableaux suivants:Nom : Tableau_génération_num_unique.jpg
Affichages : 124
Taille : 31,2 Ko

    et le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Not Application.Intersect(Range("T_pièces[Fournisseur]"), Target) Is Nothing Then
     
        Range("F" & Target.Row) = recherche_Num_fournisseur(ActiveSheet.Range("E" & Target.Row)) & Target.Row
        Exit Sub
     
    End If
     
    End Sub
     
    Function recherche_Num_fournisseur(nom_fournisseur As String) As Double
     
    Dim cellule As Range
     
    For Each cellule In Range("T_fournisseurs[Nom]")
     
        If cellule.Text = nom_fournisseur Then
     
            recherche_Num_fournisseur = ActiveSheet.Range("B" & cellule.Row)
     
            Exit For
     
        End If
     
    Next cellule
     
     
    End Function
    Le tout avec des formats personnalisés de cellule pour faire apparaître le 0 en début de code (type 00#)
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent 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
    Par défaut
    Citation Envoyé par Hyene spatiale Voir le message
    Je ne crois pas qu'il soit intéressant de se lancer dans des macros pour une utilisation aussi simple, ni qu'il soit cohérent d'utiliser dans votre nomenclature les N° de ligne d'excel pour des données qui seront triées, le plus simple est selon moi de mettre un numéro de ligne "en dur" dans le tableur et de faire une formule toute simple.
    A titre personnel, c'est aussi comme ça que je procèderais.

    Mais je mettais en garde contre l'usage de la fonction LIGNE() pour ce type d'utilisation.

  7. #7
    Candidat au Club
    Homme Profil pro
    DAF
    Inscrit en
    Juin 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : DAF
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2020
    Messages : 4
    Par défaut
    Citation Envoyé par Menhir Voir le message
    A titre personnel, c'est aussi comme ça que je procèderais.

    Mais je mettais en garde contre l'usage de la fonction LIGNE() pour ce type d'utilisation.
    Bien vu. Je vous ai confondu avec la personne qui a initié le topic.
    A titre personnel j'évite la fonction ligne à part peut être avec la fonction indirect.

Discussions similaires

  1. Génération de numéro (Suite)
    Par Ataturk dans le forum Access
    Réponses: 2
    Dernier message: 06/03/2007, 18h00
  2. Numéro unique ?
    Par Oufti dans le forum SQL Procédural
    Réponses: 12
    Dernier message: 05/06/2006, 20h59
  3. [MySQL] Projet PHP : Génération de numéro de Références et Stockage
    Par Jimmy_S dans le forum PHP & Base de données
    Réponses: 136
    Dernier message: 27/10/2005, 17h22
  4. Génération de nombres uniques
    Par developper dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 12/09/2005, 15h42
  5. Génération de numéro de série
    Par shadeoner dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 06/04/2005, 15h25

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