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
impecable, merci
donc maintenant je vais essayer de pousser le code pour qu'il supprime les lignes d'un tableau qui ont la cellule a identique au deuxieme tableau
le souci c'est que je ne comprend absolument pas comment fonctionne cette partie de ton code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dercol = IIf(FL1.Cells.SpecialCells(xlCellTypeLastCell).Column > FL2.Cells.SpecialCells(xlCellTypeLastCell).Column, _ FL1.Cells.SpecialCells(xlCellTypeLastCell).Column, FL2.Cells.SpecialCells(xlCellTypeLastCell).Column)
c'est la première fois que je vois SpecialCells, ainsi que xlCellTypeLastCell
mais bon on va plancher dessus
je mettrais résolu lorsque je rajouterais (si j'y arrive) le code que je cherche au final
pour finir, je ne comprend pas pourquoi tu me precise
"Dans le cas présent utilise FL2.Rows(..."
Là, pour être certain de comparer toute la ligne en cours, on doit être certain de comparer toutes les données de la ligne. Or on ne connaît pas la longueur de la ligne (le nbre de colonnes) sauf à la vérifier pour chacune d'elles. Il va plus vite de prendre la ligne la plus longue de la plage de données. Si les cellules sont vides dans les deux feuilles, la correspondance sera également acquise pour des lignes identiques.Envoyé par bosk1000
Pour IIf, je te conseille de regarder dans l'aide en ligne, c'est très bien expliqué.
Quant on travaille sur deux feuilles de calculs, il est grandement préférable de désigner la feuille concernée (et je ne dis pas de l'activer !). D'autant que j'ignore quelle est la feuille active, ce dont, avec ce code, je me moque.Envoyé par bosk1000
Bonne journée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager