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 :

Clé primaire auto incrémentée non modifiable [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Novembre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Novembre 2014
    Messages : 24
    Par défaut Clé primaire auto incrémentée non modifiable
    Bonsoir au Forum,

    Je fais appel à nouveau à vos lumières. Peut-on créer en Excel comme dans ACCESS une clé primaire numérique automatiquement incrémentée ?
    J'avais mis cette formule dans ma colonne A en la bloquant avec la validation des données et je l'ai copiée sur toutes les cellules de ma colonne mais le soucis c'est que si on efface la donnée de la colonne B, la clé s'efface également:

    Auriez-vous une idée en VBA peut-être ?

    Merci

    Xenna

    Aur

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonsoir,

    Solution simple, si j'ai bien compris, vous faites comme vous l'avez décrit mais à la fin, vous reprenez tout et vous faites une copie + collage spécial = valeurs.
    Sous VBA, c'est aussi facile mais un exemple (fictif possible) aiderait ....

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    non le N° de ligne ne peut pas être une clé primaire, car la suppression d'une ligne permettrait de numéroter une nouvelle ligne avec un ID déjà utilisé.

    l'intérêt d'une clé primaire est de faire le lien entre deux onglets (Tables) .

    il faut utiliser une feuille contenant les clés primaires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Debug.Print ClePrimaire("A1")
    End Sub
     
    Function ClePrimaire(Cle As String) As Long
    ClePrimaire = ClePrimaire("Clés_Primaire").Range(Cle) + 1
    Sheets("Clés_Primaire").Range(Cle) = ClePrimaire
    End Function

  4. #4
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Novembre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Novembre 2014
    Messages : 24
    Par défaut
    Bonjour,

    Un grand merci pour vos réponses mais je n'arrive pas à intégrer ce code dans mon fichier

    Voici le fichier

    Encore merci
    Fichiers attachés Fichiers attachés
    • Type de fichier : xls GB.xls (78,0 Ko, 150 affichages)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    le fichier est en pièce jointe!
    Code ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Trim("" & Sh.Cells(Target.Row, 1)) = "" And Trim("" & Sh.Cells(Target.Row, 2)) <> "" _
    And Sh.Name <> "Clés_Primaire" Then _
     Sh.Cells(Target.Row, 1) = ClePrimaire(Sh.Name, Sh.Index)
    End Sub

    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function ClePrimaire(Cle As String, Pos As Integer) As Long
    ClePrimaire = Sheets("Clés_Primaire").Cells(Pos, 2) + 1
    Sheets("Clés_Primaire").Cells(Pos, 2) = ClePrimaire
    Sheets("Clés_Primaire").Cells(Pos, 1) = Cle
    End Function
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 23/11/2014 à 12h22.

  6. #6
    Membre averti
    Femme Profil pro
    Webdesigner
    Inscrit en
    Novembre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Novembre 2014
    Messages : 24
    Par défaut
    Bonjour,

    Je te remercie infiniment pour ta réponse mais lorsque je modifie une donnée dans GTT, les valeurs qui ont été transférées vers GM ne s'adapte pas. Est-ce que la clé primaire ne doit pas avoir ce rôle également ??

    Si par exemple la clé n°1 dans GTT, c'est une ligne qui nécessite une RM dans la liste de choix (--> copie des données vers GM), si jamais l'utilisateur s'est trompé et modifie l'une des cellules dans GTT qui a déjà été copiées vers GM, la donnée en question ne s'adapte pas également dans GM ?

    Merci pour le temps que vous me consacrer ....

    Xenna

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    si tu as protégé la feuille Clés_Primaire également
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function ClePrimaire(Cle As String, Pos As Integer) As Long
    Sheets("Clés_Primaire").Unprotect "Password"
    ClePrimaire = Sheets("Clés_Primaire").Cells(Pos, 2) + 1
    Sheets("Clés_Primaire").Cells(Pos, 2) = ClePrimaire
    Sheets("Clés_Primaire").Cells(Pos, 1) = Cle
    Sheets("Clés_Primaire").Protect "Password"
    End Function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Trim("" & Sh.Cells(Target.Row, 1)) = "" And Trim("" & Sh.Cells(Target.Row, 2)) <> "" _
    And Sh.Name <> "Clés_Primaire" Then
     Sh.Unprotect "Xenna"
        Sh.Cells(Target.Row, 1) = ClePrimaire(Sh.Name, Sh.Index) '----> à ce niveau
      Sh.Protect "Xenna"
     End If
    End Sub
    Dernière modification par Invité ; 01/12/2014 à 09h15.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment créer une clé primaire auto incrémentée?
    Par lolymeupy dans le forum PowerAMC
    Réponses: 10
    Dernier message: 26/11/2013, 16h50
  2. Clé primaire auto-incrémentée
    Par CinePhil dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 20/03/2009, 23h24
  3. Clé primaire auto incrémentée, problème insertion
    Par barnoufal dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 12/02/2008, 17h17
  4. création clé primaire auto incrémentable SQL ACCESS ?
    Par colorid dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/11/2007, 14h25
  5. [VB.NET] [ADO.NET] Clef primaire auto incrémenté
    Par Guld dans le forum Accès aux données
    Réponses: 4
    Dernier message: 25/09/2004, 20h46

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