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 :

suprimer une ligne identique sur deux tableaux


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut suprimer une ligne identique sur deux tableaux
    bonsoir
    j'ai deux tableaux
    et sur le tableau 1 il y a des lignes identique à celle du tableau 2
    je voudrais supprimer les lignes du tableau 1 qui sont identiques au tableau 2

    merci pour votre aide

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Une ligne entière est un range, or un range est un tableau à deux dimensions. Si on sait que deux tableaux peuvent se comparer l'un à l'autre sans boucle, on sait aussi que deux ranges peuvent se comparer.
    Tu peux donc comparer une ligne entière à une autre ligne entière.
    Y'a plus qu'à
    Comme je m'en vais pour le we je ne suis pas certain de pouvoir t'aider plus que ça mais tu trouveras bien quelqu'un
    Bonne journée

  3. #3
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    ok, je vais creuser sur la commande "range", mais je ne vois pas comment sans une boucle demander de verifier si la ligne 1 du tableau 2 se trouve sur une des lignes du tableau 1 et par une boucle ça me parait super lourd de cette manière

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En fait tu ne testes que les lignes dont la cellule de la colonne 1 correspond.
    J'avais quelques minutes alors teste déjà ça mais je pense qu'on doit pouvoir encore simplifier.
    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
    Option Explicit
     
    Sub Test()
    Dim FL1 As Worksheet, FL2 As Worksheet, ok As Boolean
    Dim Plage As Range, c As Range
    Dim NoLig As Long, NoCol As Integer, Dercol As Integer
        Set FL1 = Worksheets("Feuil1")
        Set FL2 = Worksheets("Feuil2")
     
        'On prend le + grand N° de colonne
        Dercol = IIf(FL1.Cells.SpecialCells(xlCellTypeLastCell).Column > FL2.Cells.SpecialCells(xlCellTypeLastCell).Column, _
            FL1.Cells.SpecialCells(xlCellTypeLastCell).Column, FL2.Cells.SpecialCells(xlCellTypeLastCell).Column)
     
        Set Plage = FL2.Range(FL2.Cells(1, 1), FL2.Cells(FL2.Cells.SpecialCells(xlCellTypeLastCell).Row, 1))
        With Plage 'on recherche une donnée de la colonne A de FL1 dans la colonne A de FL2
            For NoLig = 1 To FL1.Cells.SpecialCells(xlCellTypeLastCell).Row
                Set c = .Find(FL1.Cells(NoLig, 1))
                If Not c Is Nothing Then
                    ok = True
                    For NoCol = 1 To Dercol
                        ok = ok And (FL1.Cells(NoLig, NoCol) = FL2.Cells(c.Row, NoCol))
                        if not ok then exit for 'permet de réduire le tps d'exécution
                    Next
                    'et là, si ok, tu fais ce que tu veux
                    If ok Then _
                        MsgBox "La ligne " & c.Row & " de la feuille " & FL2.Name & _
                        " correspond à la ligne " & NoLig & " de la feuille " & FL1.Name
                End If
            Next
        End With
    End Sub
    Ce coup-ci, tu devras continuer tout seul

  5. #5
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    grandiose

    merci

    dis moi, crois tu qu'il serais possible de faire la même chose, mais conditionner à la valeur de la cellule a dans chaque tableau

    car dans mon pocessus complet ailleur, j'ai un travail similaire, mais les colones ayant été déplacé et d'autre supprimé, ils ne se reconnaisse pas

    le dénominateur commun est la colonne a

    en revenant au code que tu as mis (et pour comprendre et progresser)
    tu utilise des alias (FL1 et FL2 pour les feuilles), c'est très malin. On peux conservé cette technique pour toutes les application simple comme sheets alias.select par exemple ?

    sinon j'enrage d'avoir du mal a bien comprendre le fonctionnement de ton code

    de plus j'ai mis après then_
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Rows(c).Select
       Selection.Delete Shift:=xlUp
    mais ça n'ai pas correct
    c n'est pas la variable qui desiqne la ligne ??

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    c représente un range, ici la cellule. Si tu affiches c.address, tu as l'adresse de la cellule c.address. Donc pour supprimer la ligne, utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Rows(c.row).Delete Shift:=xlUp
    Et évite les sélections qui ne servent qu'à alourdir le code dans 90% des cas.
    Dans le cas présent utilise FL2.Rows(...
    Bonne soirée

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/08/2014, 21h36
  2. [Free Pascal] Détecter les lignes identiques dans deux tableaux de texte
    Par jeanmich dans le forum Free Pascal
    Réponses: 11
    Dernier message: 10/01/2009, 15h43
  3. mettre une requête SQL sur deux lignes
    Par MAMANHOU dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/11/2008, 15h37
  4. Réponses: 4
    Dernier message: 19/05/2006, 10h10
  5. afficher une ligne contante sur le graphe d'un DBChart ?
    Par bigfoot dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/12/2004, 16h33

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