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

  1. #1
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    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 expérimenté
    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
    Points : 1 562
    Points
    1 562
    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 ....
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  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
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    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, 127 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 à 13h22.

  6. #6
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    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
    Bonjour,
    Puis-je te rappeler qu'un tableur Excel n'est pas une base de données relationnelle. Une clé primaire effectue le lien entre 2 tables dans le but de ne pas recopier les valeurs d'une table à l'autre. Seule l’identifiant (ID) apparaît dans l'autre table.


    se sont les requêtes qui permettent d'afficher les valeur liées par la clé primaire.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select Table1.Champ1,Table2.Champ1    from Table1 innert join table2 on table2.id=table1.id

    tu demande de gérer par macro ce qu'ACCESS gère en assembleur. De plus ACCESS ne recopie pas les données d'une table à l'autre en automatique. Ce dont tu fais allusion c'est le schéma relationnel avec ses contraintes mais ça marche pas comme ça.
    Dernière modification par Invité ; 24/11/2014 à 14h05.

  8. #8
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Merci encore pour votre aimable aide et pour cet éclaircissement !

    Bonne journée à vous !

  9. #9
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Je reviens vers vous concernant la clé primaire. Lorsque je protège la colonne dans laquelle se trouve la clé primaire, la fonction vba ne fonctionne plus. Pourriez-vous m'aider ?

    Merci.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    il faut déprotéger la feuille avant et la re-protéger après
    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
      Unprotect "Password"
        Sh.Cells(Target.Row, 1) = ClePrimaire(Sh.Name, Sh.Index)
      Protect "Password"
     End If
    End Sub
    Dernière modification par Invité ; 29/11/2014 à 00h41.

  11. #11
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    C'est ce que j'avais fait avec un point devant unprotect, mais même sans, il marque une erreur au niveau du Sh.Cells ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_Open()
     
    End Sub
     
    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
      Unprotect "Xenna"
        Sh.Cells(Target.Row, 1) = ClePrimaire(Sh.Name, Sh.Index) '----> à ce niveau
      Protect "Xenna"
     End If
    End Sub
    ?

  12. #12
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Bonsoir à tous,

    Est-ce que quelqu'un aurait une solution à mon problème ? J'aimerais que la clé primaire ne puisse pas être effacée. J'ai donc protégé ma colonne A mais du coup la fonction clé primaire bug ... et excel plante ...

    Help svp !

  13. #13
    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 à 10h15.

  14. #14
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Je n'ai pas protégé ma feuille clé primaire. Il bug dans le ThisWorkbook

    Je vous joins le fichier.
    Fichiers attachés Fichiers attachés

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Voila ça marche!
    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 Password:="Xenna"
        Sh.Cells(Target.Row, 1) = ClePrimaire(Sh.Name, Sh.Index)
      Sh.Protect Password:="Xenna"
     End If
    End Sub

  16. #16
    Futur Membre du Club
    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
    Points : 7
    Points
    7
    Par défaut




    Cela mérite plus qu'un café virtuel !

    Merci encore à vous ! Vous êtes super !

    Xenna

+ 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, 17h50
  2. Clé primaire auto-incrémentée
    Par CinePhil dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 21/03/2009, 00h24
  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, 18h17
  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, 15h25
  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, 21h46

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