Filtrage et supression dissymétriques !!!

Isab

XLDnaute Occasionnel
Bonjour et merci de m'aider,

J'utilise Excel 2007 mais le document sera utilisé aussi sur Excel 2003.
je suis débutante en Excel. ( je le resterai lentemps à mon avis) :)

Mon souci est:

J'ai la feuille/onglet " données" avec des informations que je rentre avec un surform ..
Je filtre ensuite cette table au moyen d'une macro Worksheet_Activate (dans feuil2) le resultat se voit apparaitre dans la "feuil2"
Cela fonctionne très bien, les lignes sont en harmonie et les modifications correctement portées. mon problème c'est au moment de la suppression. Etant donnée que le filtre est construit sur une plage (partie de chaque ligne et non toute la ligne).
En effet quand je supprime une ligne dans la feuille de départ "donnée" je souhaire que la ligne entière soit supprimée dans la feuille2 et non seulement la plage filtrée précédement.. sans quoi les données seraient dissymétriques

Merci de me proposer vos idées sur ce problème mais aussi ne pas hesiter à corriger ou apporter des ameliorations ..gestion erreur et autres...

Mon code:

Private Sub Worksheet_Activate()

Dim DerLig As Long
Dim Fbase As Worksheet

On Error Resume Next
ActiveSheet.ShowAllData

Set Fbase = Sheets("Données") ' onglet contenant les données

With Fbase
DerLig = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 'calcul de la dernière ligne

.Range("B15:E" & DerLig). _
AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("B15:E15"), Unique:=False

End With

On Error Resume Next
ActiveSheet.ShowAllData


End Sub


Ci_joint un fichier d'exemple..en espérant avoir bien expliqué et bien atache mon fichier..
 

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

bonjour Isab et bienvenue dans le monde d'excel

bonjour le forum

une piste peut etre a placer a la fin de ta sub

juste apres la derniere ligne" ActiveSheet.ShowAllData" et tu declare une variable" I as integer"

For i = 16 To Sheets("Feuil2").[B65000].End(xlUp).Row
If Sheets("feuil2").Cells(i, 2) = "" Then Rows(i).EntireRow.Delete
Next

alors ce code te supprime totalement la ligne entiere et toutes les lignes vide qu'elle va rencontrer de la selection.


si c'est ce que tu veux.

bonne soirée.
 

MJ13

XLDnaute Barbatruc
Re : Filtrage et supression dissymétriques !!!

Bonjour à tous

Code:
For i = 16 To Sheets("Feuil2").[B65000].End(xlUp).Row
If Sheets("feuil2").Cells(i, 2) = "" Then Rows(i).EntireRow.Delete
Next

Normalement quand on veux supprimer des lignes, on part du bas vers le haut avec un petit step -1 :).
 

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

Bonjour à tous

Code:
For i = 16 To Sheets("Feuil2").[B65000].End(xlUp).Row
If Sheets("feuil2").Cells(i, 2) = "" Then Rows(i).EntireRow.Delete
Next

Normalement quand on veux supprimer des lignes, on part du bas vers le haut avec un petit step -1 :).

merci pour l'info mj13 en plus je m'était appercu d'un problème lié a deux lignes consecutives vides et je pense qu'avec ta solution ça reglerais le problème.
 

Isab

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

Re_bonsoir à tous.. Mj13, Vmax01

J'ai bien testé le bout de code proposé par Vmax et j'ai rajouté le -1 de Mj13
mais rien n' y fait..

seule la plage filtrée est effacé à moins que je suis passée à côté de quelque chose...merci de creuser d'avantage pour me venir en aide.. merci...
 

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

seule la plage filtrée est effacé à moins que je suis passée à côté de quelque chose...merci de creuser d'avantage pour me venir en aide.. merci...
qu'entand tu dit seul la plage filtée est effacé ?? c'est pas ce que tu voulais ??? tu voulais aussi que la ligne concerné premiere feuille soit aussi effacée ??
 
Dernière édition:

Isab

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

Vmax,

la plage filtrée s'efface forcement toute seule quand on efface à partir de la feuille de données
mets toi sur la feuille "Données efface une ligne par " Supprimer ligne".. ensuite mets toi sur la feuille "feuil2" tu constateras que la plages est effacée donc tout va jusqu'au là... mais les données dans les cellule de la meme ligne (hors partie filtrées , sont toujours là) !!! je souhaiterai que toute la ligne se Supprime.. merci
 

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

bon essai ça en declarant i et j as integer

ça fait l'inverse et ça commance du bas ver le haut ....

For i = 16 To Sheets("Feuil2").[A65000].End(xlUp).Row
j = Sheets("Feuil2").[A65000].End(xlUp).Row - i + 16
If Sheets("feuil2").Cells(j, 2) = "" Then Rows(j).EntireRow.Delete
Next

si MJ13 passe par ici je suis preneur de sa solution car je seche un peus (je ne suis pas un pro du VBA).
 
Dernière édition:

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

isa je me suis trompé sur le code je te donne le bon j'ai interferé des lignes

J = Sheets("Feuil2").[A65000].End(xlUp).Row
For i = 16 To Sheets("Feuil2").[A65000].End(xlUp).Row
If Sheets("feuil2").Cells(J, 2) = "" Then Rows(J).EntireRow.Delete
J = J - 1
Next

voila ça marche. bonne soirée.
 

Isab

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

Vmax -rebonsoir.. j'aurai aimé te dire que c'est ça..mais ya toujours un mais...


as tu testé de supprimer autre chose que la dernière ligne dans la feuille donnée? essaie avant l'avant dernière ou avec une du milieu..

tu verras il ya aura dyssimétrie entre les colonnes..

sans doute parceque le clique sur la feuil2 déclenche le filtre en premier avant même de pouvoir supprimer ( par le petit bout de code à la fin)!

en tous cas tu es sur la bonne voix.. ( tu ne dois pas être loin)

j'avais pensé aussi à une solution des la suprression dans la feuille donnée ( et agir sur la feuil2 par variable numero de ligne)..mais je sais pas comment m y prendre et je ne sais pas si la supression est gerée entant qu'évenement)..

en tous cas je te remercie pour tes efforts peut être que tu finiras par trouver avant moi ou quelqu'un d'autre saura nous instruir avec son savoir vba.. ..-) je vais me défouler sur un bout de choco..
 

Isab

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

A vrai dire ..et à bien regardé... il me semble que mon filtre est mal fait :::!! ( peut-être)

quand je supprime une ligne ( à part la dernière) dans la feuille "Donnée" / point de départ donc... la feuil2 ayant perdu la dite plage par suppression depuis la feuille donnée.. se trouve ainsi remontée..( c'est le cas de dire).. enfin un decalage quoi... et donc dissymétrie..

peut-être un Vbiiiiiiiste ...matinal...( les autre ici hihihihi) pourra m'apporter une solution !
 

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

bonjour isab et bonjour le forum

j'ai supprimé le filtre et remplacer par une boucle qui verirfie

essai ça tu remplace TOUTE ta sub par ce code

Private Sub Worksheet_Activate()
Dim Cel As Range
Dim i As Integer
Dim j As Integer
For Each Cel In Sheets("feuil2").Range("B16:B" & Sheets("Feuil2").[B65000].End(xlUp).Row)
If Sheets("Données").Cells(16 + i + j, 2) <> Cells(Cel.Row + j, 2).Value Then
Cells(Cel.Row + j, 2).EntireRow.Delete
j = j - 1
Else
For j = 2 To 6
Sheets("Feuil2").Cells(Cel.Row, j) = Sheets("Données").Cells(16 + i, j)
Next
j = 0
End If
i = i + 1
Next
End Sub

mais il faut qu'au départ il y ai des données sur ta feuil2
et ça ne fait que verifier ou modiffier des lignes existante mais ne te rajoute pas de nouvelles lignes

je me suis contanter de faire ce que tu demande sans chercher plus loin.... maintenant si il faut que ta base de donnée se mette a jour c'est une autre histoire.

bonne journée
 
Dernière édition:

vmax01

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

voila combiné avec ton code ça doit etre parfait....
Code:
Private Sub Worksheet_Activate()
Dim DerLig As Long
Dim Fbase As Worksheet
Dim Cel As Range
Dim i As Integer
Dim j As Integer
 For Each Cel In Sheets("feuil2").Range("B16:B" & Sheets("Feuil2").[B65000].End(xlUp).Row)
    If Sheets("Données").Cells(16 + i + j, 2) <> Cells(Cel.Row + j, 2).Value Then
        Cells(Cel.Row + j, 2).EntireRow.Delete 'supprime la ligne
        j = j - 1
    End If
    i = i + 1
 Next
On Error Resume Next
ActiveSheet.ShowAllData
Set Fbase = Sheets("Données") ' onglet contenant les données
With Fbase
    DerLig = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 'calcul de la dernière ligne
    .Range("B15:E" & DerLig). _
    AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("B15:E15"), Unique:=False
End With
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

bonne journée.
 

Isab

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

Bonjour Vmax...

je n'ai pas encore testé ton code...je le ferai en journée...

sinon une piste de reflexion différente ..mais je bloque, je n'arrive pas à faire le boulot...

Cette fois ci : on part de la feuille "Données" et on essaie de faire le boulot en laissant le code de départ sur la feuille 2 ( à moins que tu juges autrements).

le but étant de supprimer les rangées dans les deux feuilles "Donnéesé" et "Feuille2" ... un début de code qui fait le boulot sauf que la ligne target telle que ci dessous: ne fait pas la difference entre supprimer et inserer ligne..

voici le code à tester / coller sur la feuille données:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim p As Range, a, i As Byte
Set p = Selection
a = Split(p.Address(0, 0), ",")

If Target.Columns.Count = Columns.Count Then
MsgBox "selection supprimée" 'pour le test de supression

Dim Plage As String
Plage = Selection.Address
MsgBox Plage 'pour le test

Sheets("Données").Range(Plage).Select
Sheets("Feuil2").Range(Plage).EntireRow.Delete


End If

End Sub
 

Isab

XLDnaute Occasionnel
Re : Filtrage et supression dissymétriques !!!

Bonsoir Vmax.. he bien j'ai testé ton code ... hélas les supression au centre ne sont pas bien gerées... les liens entre les enregistrements des deux feuilles ne peut pas résister !!

sinon t'as fais du bon boulot... mais Excel n'est pas si intuitif que ca de mon point de vue.. ils gere une plage en filtrant les ajouts mais pour filtrer les suppressions.. il ne se préocupe de rien !!! bonjour la casse :) je suis habituée à travailler sur Filemaker .. que je trouve largement superieur .. il est à la fois database et tableur et bien plus... et tout ça..d'une souplesse autre que chez microsoft.. n'est pas apple qui veut :)

Sinon pour revenir à mes moutons.. en réalité je cherche simplement à lier les données de deux feuilles ( ajout et supression, recherche, enfin.. un lien solide sans risque de rupture permetant de si glisser d'une feuille à l'autre de façon facile et sans se perdre). avec file maker je construit mes liens entre tables avec des id primaire/secondaire et des id unique pour chaque enregistrement.. sur excel à part le numero de rangée ( attention au tri et aux suppression) ..il faut chercher...

si t'as id sur comment "solidement lier deux feuille je suis preneuse
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100