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
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
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
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
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.
Ce coup-ci, tu devras continuer tout seul
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![]()
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_
mais ça n'ai pas correct
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Rows(c).Select Selection.Delete Shift:=xlUp
c n'est pas la variable qui desiqne la ligne ??
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
Et évite les sélections qui ne servent qu'à alourdir le code dans 90% des cas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Rows(c.row).Delete Shift:=xlUp
Dans le cas présent utilise FL2.Rows(...
Bonne soirée
Partager