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 :

supprimer des doublons avec condition [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut supprimer des doublons avec condition
    Bonjour a tous,

    Mon code vba me permet d'aller chercher un tableau de commandes sur une page web
    et le colle dans un fichier Excel.
    Le problème réside dans la "mise a jour" de ces informations, je m'explique:

    Dans mon fichier excel j'ai 2 feuilles. La première récupère le tableau de la page web (jusque la mon code fonctionne),
    la deuxième est la liste de toutes les commandes récupérées dans la feuille 1.

    Le problème étant que je dois effectuer la récolte d'info une fois par jour et que les etats
    des commandes peuvent changer (c'est a dire que la ligne est la même a une case prêt)..

    J'aimerais ajouter les nouvelles commandes a la suite de la liste de la feuille 2 et "mettre a jour"
    celle qui existent déja si leur état change.
    (J'entend par "mettre a jour" le fait de supprimer la ligne avec l'ancien etat et la remplacer par celle avec le bon etat)
    (Si la remplacer est compliqué, uniquement la mettre dans la liste me convient amplement, je rangerais par date par la suite)
    Tout cela a partir uniquement de la feuille 1 et a l'aide d'un bouton.

    J'attend vos réponses, merci d'avance a ceux qui prendrons le temps de m'aider / me répondre.




    Je vous met quand même la premère partie de mon code même si le sujet de ma requête n'est pas l'optimisation de celle ci .

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
        Sub connection()
     
        Dim IEdoc As Object
        Dim DOCelement As Object
     
        Set ie = CreateObject("InternetExplorer.application")
        ie.Visible = False
        ie.Navigate ("https://*******")
     
        'attente de fin de chargement
        Do Until ie.ReadyState = 4
        DoEvents
        Loop
     
        Set IEdoc = ie.Document
     
        'login
        Set DOCelement = IEdoc.getElementsByName("LoginForm_Login").Item
        DOCelement.Value = "*******@gmail.com" 'Login
     
        'password
        Set DOCelement = IEdoc.getElementsByName("LoginForm_Password").Item
        DOCelement.Value = "******" 'mot de passe
     
        'account
        Set DOCelement = IEdoc.getElementsByName("LoginForm_RegistrationDomain").Item
        DOCelement.Value = "*******" 
        DOCelement.Select
     
        'connexion
        Set DOCelement = IEdoc.Forms(0)
        DOCelement.submit
     
        Application.Wait (Now + TimeValue("0:00:03"))
     
        ie.Navigate ("https://********")
     
        'attente de fin de chargement
        Do Until ie.ReadyState = 4
        DoEvents
        Loop
     
        'copie page
        With ie.Document
            Application.SendKeys "^a"
            Application.Wait Now + TimeValue("00:00:1")
            Application.SendKeys "^c"
        End With
     
        'attente de fin de chargement
        Do Until ie.ReadyState = 4
        DoEvents
        Loop
     
        'appelle fonction Insere Feuille Temporaire
        Call InsereFeuille
     
        'colle Feuille Temporaire
        Sheets("Temp1").Activate
        Range("a1").Select
        ActiveSheet.Paste
        Sheets("List").Activate
     
        'appelle fonction List
        Call List
     
        'appelle fonction Supprime Feuille Temporaire
        Call SupprimeFeuille
     
        'Fin
        Set IEdoc = ie.Document
        ie.Quit
     
        Sheets("Button").Range("D2") = "OK"
     
        End Sub
     
    Sub InsereFeuille()
        Sheets.Add.Move After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "Temp1"
    End Sub
     
    Sub SupprimeFeuille()
        Sheets("Temp1").Delete
    End Sub
     
    Sub List()
     
    Sheets("List").Cells.Clear
     
    Dim i As Integer
    Dim j As Integer
     
    Dim HyperLinks As String
    Dim ListHyperlinks As String
     
    For i = 82 To 131
        Sheets("List").Cells(i - 81, 1) = "N° de commande List : " & Sheets("Temp1").Cells(i, 5)
        Sheets("List").Cells(i - 81, 2) = "Date : " & Sheets("Temp1").Cells(i, 1)
        Sheets("List").Cells(i - 81, 3) = "Réf. cde : " & Sheets("Temp1").Cells(i, 3)
        Sheets("List").Cells(i - 81, 4) = "Réf. chantier : " & Sheets("Temp1").Cells(i, 4)
        Sheets("List").Cells(i - 81, 5) = "Total: " & Sheets("Temp1").Cells(i, 7)
        Sheets("List").Cells(i - 81, 6) = "Status: " & Sheets("Temp1").Cells(i, 6)
     
        ListHyperlinks = Sheets("Temp1").Cells(i, 3).HyperLinks(1).Address
        HyperLinks = Link(ListHyperlinks)
        Sheets("List").Cells(i - 81, 8) = HyperLinks
     
        If Sheets("Temp1").Cells(i, 8) <> "" Then
            ListHyperlinks = Sheets("Temp1").Cells(i, 8).HyperLinks(1).Address
            HyperLinks = ListHyperlinks
            Sheets("List").Cells(i - 81, 9) = HyperLinks
        End If
    Next
     
    Sheets("List").Columns(6).Replace "Status: Livrée", "Status: Livrée en totalité "
    Sheets("List").Columns(6).Replace "Status: Enregistrée", "Status: En préparation "
    Sheets("List").Columns(6).Replace "Status: Facturée", "Status: Livrée et facturée "
    Sheets("List").Columns(6).Replace "Status: Partiellement livrée", "Status: Partiellement livrée "
    Sheets("List").Columns(6).Replace "Status: Partiellement facturée", "Status: Partiellement livrée "
     
    End Sub
     
    Function Link(AdressSanelec As String)
     
    Dim LinkPos As Integer
     
    Dim LinkTemp As String
    LinkTemp = AdressSanelec
     
    Dim LinkAdress1 As String
    LinkAdress1 = "https://**********"
     
    Dim LinkAdress2 As String
    LinkAdress2 = "&OrderID="
     
    LinkTemp = Mid(LinkTemp, 123, 24)
    Link = LinkAdress1 & LinkTemp & LinkAdress2 & LinkTemp
     
    End Function

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    ca fait beaucoup de code a lire pour pas grand chose non ?

    Pour ton besoin, pourquoi ne pas faire une concatenation des elements dans une colonne et de faire une comparaison sur cette concatenation pour determiner les lignes a mettre a jour ?>
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Merci pour ta reponse

    Oui je suppose que ca n'est pas optimisé du tout et je comprend que Ca puisse faire mal aux yeux
    Comme je l'ai dit dans mon 1er message je ne suis pas ici pour optimiser mon code mais pour le faire avancer

    Peut tu me parler un peu plus en détails de la concaténation s'il te plaît je ne sais pas du tout comment ça marche

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Simplement, si par exemple tes donnees sont dans les colonnes A a D, et que la colonne D est susceptible d'etre mise a jour.

    Dans la colonne E tu peux avoir une formule comme
    =A2&"/"&B2&"/"&C2
    Il te suffira de faire une recherche sur cette concatenation pour determiner si la combinaison existe, et si c'es tle cas => mise a jour de la colonne D
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mai 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2017
    Messages : 28
    Par défaut
    Ça serait super ! Mais le fait que la comparaison soit faite entre 2 feuilles ne pose pas de problème ici ?

    Si tu sais qu'elle formule utiliser pour effectuer la comparaison et le copier coller j'avoue que je ne dis pas non

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Un simple Equiv() pour detecter le numero de ligne ne te convient-il pas ?

    Pour le code de mise a jour, un basique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'cas a adapter evidemment
    Range("FeuilFinale!D" & NumeroDeLigne).Value = Range("FeuilleInitiale!D1").Value
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. Supprimer des données avec conditions
    Par Jarrod06 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/05/2017, 11h00
  2. [MYSQL 5.5] Liste des doublons avec conditions particulières
    Par flashguitou dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/04/2014, 10h01
  3. [XL-2010] supprimer des onglets avec condition
    Par jkiii dans le forum Excel
    Réponses: 4
    Dernier message: 24/12/2013, 12h02
  4. VBA/MACRO : Regrouper la somme des doublons avec conditions
    Par suzette69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/06/2012, 20h24
  5. Supprimer des doublons selon une condition
    Par chloe44 dans le forum SAS Base
    Réponses: 4
    Dernier message: 04/04/2012, 10h28

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