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 :

VBA - Suppression doublons bdd


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    acheteur
    Inscrit en
    Juillet 2019
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : acheteur

    Informations forums :
    Inscription : Juillet 2019
    Messages : 62
    Par défaut VBA - Suppression doublons bdd
    Bonsoir à tous ou peut être bonne nuit
    Une petite question concernant un code VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub auto_open()
    Sheets("bdd").Columns("A:V").Copy Sheets("tcd1").Columns(1)
    End Sub
    je voudrais le compléter pour que les doublons soient supprimés après la copie des colonnes A à V dans l'onglet tcd1.

    Pouvez vous m'aider svp?
    Merci infiniment

  2. #2
    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
    Utilise la méthode RemoveDuplicates appliquée à Sheets("tcd1").Columns("A:V").
    Lire ça : https://msdn.microsoft.com/fr-fr/lib...3(v=office.15)

  3. #3
    Membre averti
    Homme Profil pro
    acheteur
    Inscrit en
    Juillet 2019
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : acheteur

    Informations forums :
    Inscription : Juillet 2019
    Messages : 62
    Par défaut
    Bonjour Menhir et merci du retour
    je viens d'essayé mais cela ne fonctionne pas. voici le fichier test Pièce jointe 573330

    Pouvez vous m'aider?

    Merci d'avance

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    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 962
    Par défaut
    bonjour
    vous pouvez toujours utiliser l'enregistreur automatique du macro...il te donne presque la solution
    à tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub auto_open()
    Sheets("bdd").Columns("A:V").Copy Sheets("tcd1").Columns(1)
    Sheets("tcd1").Range("$A$1:$V$11").RemoveDuplicates Columns:=1, Header:=xlYes
    End Sub

  5. #5
    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
    Pouvez vous m'aider?
    Pour ça, il faudrait que tu montres le code que tu as écrit, de préférence encadré de balises CODE.

  6. #6
    Membre averti
    Homme Profil pro
    acheteur
    Inscrit en
    Juillet 2019
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : acheteur

    Informations forums :
    Inscription : Juillet 2019
    Messages : 62
    Par défaut
    Merci BENNASR et Menhir
    cela fonctionne parfaitement
    2 autres et dernières questions :
    - si la bdd vient à évoluer (ce qui est souvent le cas), les lignes vont augmenter. Est ce que le fait de marquer $V$11 prendra en compte une douxième voire treizième ligne le cas échéant.
    - Dans le tableur test1, à l'ouverture du tableur l'onglet bdd se copie dans l'onglet tcd1 et supprime les doublons maintenant les futurs TCD seront donc automatiquement mis à jour (cf code vba du tableur test1). est il possible une fois le tableur ouvert, si la bdd doit être mise à jour par un utilisateur que le même procédé se réalise. (copie colle efface doublons et donc mise à jour des tcd). cela permettrait d'éviter de fermer le tableur et de le réouvrir pour que le code fonctionne (auto open)

    Pièce jointe 573346

    J'espère avoir été clair dans mes explications

    Merci d'avance

  7. #7
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Citation Envoyé par Martin3192 Voir le message
    [...]Est ce que le fait de marquer $V$11 prendra en compte une douxième voire treizième ligne le cas échéant.[...]

    En 2020, on utilise les tableaux structurés. Ces outils ont été créés pour s'adapter aux nouvelles données qui vont immanquablement arriver dans la feuille. L'utilisation des tableaux structurés en VBA va permettre, justement, d'éviter le problème que tu soulèves car tu pourras utiliser les références structurées qui s'adaptent aux changements de ton tableau. En 2020, on ne programme plus Excel comme en 2003, notamment parce que les tableaux structurés apportent une souplesse dans le code qui permet de coder mieux et plus vite.

    $V$11 dans le code pose problème, bien sûr. C'est du hard coding et ça ne doit jamais être utilisé dans du code. C'est une très mauvaise façon de procéder.



    Pour ce genre de traitement, on fait d'abord un peu de mise en place. On crée à la main le tableau qui recevra les données à dédoublonner, et le code VBA consiste alors à:
    • vider ce tableau
    • copier l'autre
    • dédoublonner



    Le fait de travailler avec des tableaux structurés va te permettre de ne pas te soucier du nombre de lignes ni du déplacement éventuel des tableaux, tant dans ton code VBA que pour la gestion du TCD qui, je suppose, viendra ensuite. Si tu appuies un TCD sur un tableau structuré, le TCD tiendra compte des nouvelles lignes sur simple rafraîchissement. Les tableaux structurés existent depuis 13 ans, il serait temps de les utiliser


    J'ai créé un tableau dans BDD et je l'ai nommé t_Source. Dans TCD1, j'ai créé un tableau avec les mêmes colonnes (par copier/coller) et je l'ai nommé t_TCD.

    Dès lors, le code est le suivant. Comme tu le vois, je l'ai découplé de Auto_Open, car ce code n'a rien à y faire. Il doit être déporté dans une procédure spécifique, car la responsabilité de Auto_Open ne s'arrête peut-être pas à ce traitement. Je t'invite à toujours procéder ainsi dans tes développements (voir ce billet ou celui-ci à ce sujet, ou cette discussion dans laquelle je donne un schéma explicite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub auto_open()
      PrepareTable
    End Sub
     
    Sub PrepareTable()
      If Not Range("t_TCD").ListObject.DataBodyRange Is Nothing Then Range("t_TCD").ListObject.DataBodyRange.Delete
      Range("t_tcd").Resize(Range("t_source").Rows.Count).Value = Range("t_source").Value
      Range("t_tcd").ListObject.DataBodyRange.RemoveDuplicates 1, xlYes
    End Sub
    Dès lors, Si tu veux y associer un bouton, il te suffit de placer un bouton de formulaire sur ta feuille et de lui affecter la macro Prepare


    Cela dit, quelle est l'utilité de dédoublonner? N'y aurait-il pas un problème en amont?
    "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...
    ---------------

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

Discussions similaires

  1. [XL-2016] Suppression Doublons dans Variable Array VBA
    Par Vb.pix dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/12/2019, 12h06
  2. Problème suppression doublons table BDD mySQL
    Par deviweb06 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/04/2019, 15h01
  3. [XL-2016] Code VBA suppression de doublons sauf 2 critères précis
    Par Shubaka2573 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/12/2017, 19h00
  4. Suppression doublons vba
    Par Nebrawk dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/04/2017, 15h01
  5. [WD16] Suppression doublons BDD
    Par JustineJ dans le forum WinDev
    Réponses: 11
    Dernier message: 16/08/2011, 13h06

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