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 - Comparaison de colonne [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Par défaut VBA - Comparaison de colonne
    Bonjour à tous,

    Je sollicite une nouvelle fois votre aide afin de m'aider à résoudre mon problème.

    Je souhaiterai faire une comparaison de colonne:
    Dans ma feuille 1("Extraction"), j'ai un numéro qui est unique dans ma colonne B et une date et heure dans ma colonne M

    Extraction
    Col A - Col B - ligne
    "25789" - "18/10/2015 10:57:00" - "10"
    "25790" - "19/10/2015 14:00:15" - "11"
    "25791" - "19/10/2015 15:29:00" - "12"
    "25793" - "20/10/2015 11:30:00" - "13"

    Dans la feuille 2("Base de donnée"), j'ai la même chose, c'est à dire dans ma colonne B, j'ai toujours un numéro unique et dans ma colonne M, j'ai une date et une heure (mais pas toujours)

    Base de donnée
    Col A - Col B - ligne
    "25789" - "18/10/2015 10:57:00" - "75"
    "25790" - "19/10/2015 14:00:15" - "76"
    "25791" - " (null) " - "77"
    "25793" - "20/10/2015 11:29:00" - "78"

    Au final :

    Extraction
    Col A - Col B

    "25791" "19/10/2015 15:29:00"
    "25793" "20/10/2015 11:30:00"


    Base de donnée
    Col A - Col B
    "25789" - "18/10/2015 10:57:00"
    "25790" - "19/10/2015 14:00:15"



    Donc mon but étant de comparer dans la feuille 1 et 2, si il y a le même numéro (feuil1 avec le numéro "25789" et dans la feuil 2 numéro "25789") et si l'heure (feuil1 l'heure est "18/10/2015 10:57:00" et feuil2 l'heure est "18/10/2015 10:57:00") alors je la supprime dans la feuil1(Extraction)

    Et si le numéro est le même dans la feuil1 et feuil2 et que l'heure est différent, alors je supprime dans le feuil2 (Base de donnée)

    Je pense avoir mon programme, mais j'ai quelques bug. (Surtout que je compare en fonction de la ligne alors que la ligne peut-être différente)

    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
    Sub test()
     
      Dim i As Integer
      Dim Ext As Range
      Dim BDD As Range
      Dim Date_remise As Range
     
       Set BDD = Worksheets("Base de donnée").Range("B2:B600")
      Set Date_remise = Worksheets("Base de donnée").Range("M2:M600")
      Set Ext = Worksheets("Extraction").Range("B2:B600")
     
     
      With ThisWorkbook.Sheets("Extraction")
       ' i sera égal à 2000, 1999,...,2
        For i = 2000 To 2 Step -1
          'On controle que le numéro de ticket et que l'heure de remise sont identiques. Sinon on supprime
          If ((Application.CountIf(BDD, .Range("B" & i).Value) <> 0) And (Application.CountIf(Date_remise, .Range("M" & i).Value) <> 0)) Then
            'Supprime les numéro doublons dans Extraction
            .Rows(i).Delete
          End If
        Next i
      End With
     
      With ThisWorkbook.Sheets("Base de donnée")
       ' i sera égal à 20000, 19999,...,2
        For i = 20000 To 2 Step -1
          'On controle que le numéro de ticket qui existe dans Extraction, ce supprime dans Base de Donnée
          If Application.CountIf(Ext, .Range("B" & i).Value) <> 0 Then
            'Supprime les numéro doublons dans Base de Donnée
            .Rows(i).Delete
          End If
        Next i
      End With
     
      MsgBox ("Fini")
     
     
     
    End Sub
    Avez-vous quelque suggestion pour moi?

    Merci d'avance
    TintinU2

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour.

    Il y a la méthode VBA Find (voir l'exemple dans l'aide VBA) et
    l'objet Dictionary (voir aussi dans l'aide VBA) mais hors cadre si c'est un exercice !


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 4
    Par défaut
    Bonjour Marc-L,

    Merci pour ta réponse.

    Je comprend bien le principe de Find, cependant comment faire pour avoir mon numéro comme variable à retrouver dans ma deuxième feuille ?
    D'après l'aide : object.Find(target target doit être ma variable à trouver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub jenesaispas()
     
    Dim DernLigne As Long
     
    DernLigne = Range("B" & Rows.Count).End(xlUp).Row
     
    maPlage = Range(Cells(2, 2), Cells(DernLigne, 2))
     
    .Find (maPlage)
    End Sub
    ça doit ressembler à ceci?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Non, cela doit ressembler à l'exemple de l'aide !

    Find renvoie l'objet Range (la cellule) contenant la valeur cherchée. En appliquant un décalage via Offset,
    tu récupères la cellule d'une autre colonne de la même ligne …

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

Discussions similaires

  1. [XL-2013] Comparaison de colonnes/cellules et action spécifique (formule ou VBA)
    Par Sanglizaster dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 22/04/2015, 11h33
  2. [SQL] vs [VBA] comparaison de tables et mise à jour
    Par borisa dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/02/2006, 10h15
  3. [VBA] Fusionner plusieurs colonnes en une seule
    Par brutos2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2006, 14h25
  4. [vba] comparaison <>
    Par manujuggler dans le forum Access
    Réponses: 5
    Dernier message: 10/01/2006, 16h07
  5. [VBA] Trier les colonnes d'une listview
    Par alncool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/09/2005, 14h12

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