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

VBA Access Discussion :

Vérifier si une valeur est présente avant de copier


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien lean
    Inscrit en
    Avril 2011
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien lean
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2011
    Messages : 220
    Points : 66
    Points
    66
    Par défaut Vérifier si une valeur est présente avant de copier
    Bonjour à tous,
    Je rencontre un soucis dans la construction d'une base de données sous accès.
    Mon problème est que je voudrai vérifier la présence d'une valeur dans une table avant l'insertion de cette même valeur, afin d'éviter des doublons, en language Vba.

    Est-ce que quelqu'un peut m'aider?

    Je vous remercie

  2. #2
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Hello
    plusieurs solutions:
    - index sans doublons, ce qui interdit à la requête d'ajout de travailler
    - fonction dlookup utilisée en VBA
    - requête supression avant la requête ajout
    - requête de non correspondance
    - ....
    donne un peu plus de précisions pour une aide plus adaptée
    -------------------Simplifi----------comme si tout était simple--------

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien lean
    Inscrit en
    Avril 2011
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien lean
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2011
    Messages : 220
    Points : 66
    Points
    66
    Par défaut
    Merci pour ta réponse.
    En fait dans la base,j'importe des données différentes
    qui se trouvent sur des fichiers excel,ces valeurs peut aller de 200 à 6000 lignes pour pouvoir faire des comparaisons.Lors de chaques importations,j'ai créer une requête qui permet de rajouter une donnée dans une colonne afin d'identifier quelle est le fichier importé.cette donnée est demandé à chaque fois à l'utilisateur.
    Ce que je voudrai est dès que l'utilisateur entre la donnée dans la fenêtre "veuillez entrer la référence" une macro vérifie si cette valeur est présente dans la colonne si oui refuser l'importation,sinon effectuer l'importation.

    Je vous remercie de votre aide

  4. #4
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    alors c'est dlookup qui va te permettre de trouver si la valeur existe
    -------------------Simplifi----------comme si tout était simple--------

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien lean
    Inscrit en
    Avril 2011
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien lean
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2011
    Messages : 220
    Points : 66
    Points
    66
    Par défaut
    Merci
    Cette information,je l'ai déjà aperçu sur d'autre personne qui ont déjà eu ce genre de soucis. Mais je n'arrive pas à le mettre en place.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    hello
    est tu déjà touché un peu à VBA?
    si oui, sur sortie de la zone de texte un petit programme
    si isnull(dlookup("le nom du champ","la table","la bonne colonne = " & la valeur de la zone de texte)) alors
    exécuter requête ajout
    sinon
    msgbox "blabla"

    pour te donner la vraie programmation, il me faudrait beaucoup plus de renseignements
    -------------------Simplifi----------comme si tout était simple--------

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien lean
    Inscrit en
    Avril 2011
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien lean
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2011
    Messages : 220
    Points : 66
    Points
    66
    Par défaut
    Salut merci pour ton aide, pour répondre à ta question oui j'ai déjà touché au VBA mais ça remonte à plusieurs années.

    Concernant la formule que tu m'a indiqué ceci est bonne si on recherche une valeur dans une même table.
    Ce n'est pas mon cas,J'explique en quelques mots le fonctionnement de ma base.

    J'importe un classeur excel dans une table tampon sur celle-ci j’exécute une requête "mise à jour" afin de rajouter une valeur à la première colonne (identification pour les nombreuses importations)dès la requête fini,je lance une requête ajout dans une table "rapport" et je recommence des que j'ai un nouveau document excel.

    cette table "rapport" permet de faire des analyse comparaison,par rapport aux nombreuses importations.

    suite à ça,je voudrai pour chaque importation qu'une macro "recherche" se lance après l’exécution de la requête "mise à jour" par rapport à la valeur attribuer et qui me dise si cette valeur est présente dans la première colonne de la table "rapport" si oui, ne rien faire sinon exécuter requête ajout.


    quelqu'un peux m'aider?

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 264
    Points : 19 430
    Points
    19 430
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    A la lecture de ton dernier message, il me semble qu'il te faut créer une requête de non correspondance entre ta table tampon mise à jour (Table1) et ta table Rapport, table de destination pour l'ajout de tes données.

    La requête de non-correspondance entre Table1 et Rapport peut-être obtenu facilement à l'aide de l'assistant du même nom.

    Tu devrais aboutir à 1 sql du genre:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Table1.champ1, Table1.champ2, Table1.champ3
    FROM Table1 LEFT JOIN Rapport ON Table1.champ1 = Rapport.champ1
    WHERE (Rapport.champ1 Is Null);

    Ensuite, supposons que cette requête se nomme Requete1, tu ajoute les données de cette requête dans la table Rapport au moyen d'une requête Ajout, qui devrait ressembler à cela au niveau sql:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO Rapport
    SELECT *
    FROM Requete1;

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien lean
    Inscrit en
    Avril 2011
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien lean
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2011
    Messages : 220
    Points : 66
    Points
    66
    Par défaut
    Merci pour ton aide.
    Peux tu me dire comment rajouter suite à cette requête(non correspondance), un message disant donnée déjà existant si cela est le cas et non existant si absent?
    Merci

  10. #10
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 264
    Points : 19 430
    Points
    19 430
    Billets dans le blog
    63
    Par défaut
    Salut,

    Si ta requête Ajout (qui copie les données dans la table Rapport) se nomme "Ajout", alors tu peux mettre le code suivant sur clic d'un bouton "Commande1" (dans un formulaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Commande1_Click()
     
       ' S'il y a au moins un enregistrement non présent dans rapport
       If DCount("Champ1", "Requete1") > 0 Then
     
          CurrentDb.Execute "Ajout"
     
       Else ' sinon affiche le message.
     
          MsgBox ("Données déja présentes !")
     
       End If
     
    End Sub
    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  11. #11
    Membre du Club
    Homme Profil pro
    Technicien lean
    Inscrit en
    Avril 2011
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien lean
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2011
    Messages : 220
    Points : 66
    Points
    66
    Par défaut
    Je viens d'essayer ça marche parfaitement. J'étais sur le point d'abandonner.

    Je te remercie fortement

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 161
    Points : 59
    Points
    59
    Par défaut
    Bonjour tout le monde,

    Je souhaite faire la même chose mais le problème c'est que moi je passe directement par un formulaire et non pas par une requête.



    Si vous avez besoin de plus d'informations ou même du code je reste disponible.

    Merci beaucoup d'avance car cela fait déjà plusieurs jours que je cherche et que je ne trouve pas ou que si je trouve les codes ne fonctionnent pas pour moi notamment celui là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
      Select Case DataErr
        Case 3022:
          MsgBox "Un genre de film existe déjà avec ce code.", vbExclamation
          Response = acDataErrContinue 
      End Select
    End Sub

    ou encore celui là:
    Mise en place
    1.Ouvrez votre formulaire en mode Création.
    2.Faites apparaître les propriétés du champ à vérifier (dans notre exemple, le champ Code Genre), et activez l'onglet Événement.
    3.Cliquez dans l'événement Avant MAJ, déroulez la liste proposée, puis choisissez Procédure événementielle.
    4.Cliquez sur les points de suspension à droite de l'événement, pour passer dans le code VBA.
    5.Faites en sorte que votre événement ressemble à ceci :
    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
     
    Private Sub Code_Genre_BeforeUpdate(Cancel As Integer)
      ' Chercher le Code Genre dans la table
      Dim varCode As Variant
      varCode = DLookup("[Code Genre]", "tbl Genres", _
        "[Code Genre]='" & Me.Code_Genre & "'")
     
      ' Si le code a été trouvé, c'est qu'il y a doublon...
      ' sauf si on est en train de modifier le même code
      If (Not IsNull(varCode)) And (Me.Code_Genre <> Me.Code_Genre.OldValue) Then
        MsgBox "Un genre de film existe déjà avec ce code.", vbExclamation
     
        ' Annuler la mise à jour
        Cancel = True
      End If
    End Sub

  13. #13
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Hello marg0t
    primo, si tu veux une réponse, il vaut mieux ne pas poster sur un sujet résolu
    deuzio, il me semble nécessaire de ré-exposer ton problème complètement
    -------------------Simplifi----------comme si tout était simple--------

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

Discussions similaires

  1. Vérifier si une chaine est présente dans une autre
    Par Galdon dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2008, 14h42
  2. Vérifier si une valeur est dans un tableau croisé dynamique
    Par psykodumarteau dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/07/2008, 13h39
  3. Réponses: 11
    Dernier message: 16/12/2007, 16h33
  4. Comment vérifier qu'une valeur est NULL ?
    Par innova dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2006, 14h53
  5. vérifier qu'une valeur est numérique
    Par kopofb dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/11/2005, 14h02

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