Sélection et suppression de lignes variables et non consécutives dans un tableau

puppetquito

XLDnaute Nouveau
Bonjour,

Cela ne fait pas longtemps que j'utilise vba et j'aurais besoin de votre aide sur un problème toujours sans issue après plusieurs heures...

J'obtiens le tableau en pièce jointe et par soucis de mise en page, pour toutes les lignes ayant le même indice "C" (colonne 1) et le même indice "Exp" (colonne 2), mon code regroupe les données de toutes les années sur la première ligne.

Et là arrive le problème : je voudrais supprimer les lignes dont j'ai copié les données et qui sont maintenant inutiles, à savoir les lignes 2, 7, 9, 12, 15, 17, 20, 22, 23, 26, 27,etc.

J'ai tenté avec le code suivant (entre autres) :

Sheets("EAC").Select

Plg = Rows(3).Select

For K = 4 To DernLigne2

If Feuil2.Cells(K, 1).Value = Feuil2.Cells(K - 1, 1).Value And Feuil2.Cells(K, 2).Value = Feuil2.Cells(K - 1, 2).Value Then
Q = Q + 1

Else

Ligne1 = Feuil2.Cells((K - 1) - (Q - 2), 1).Row (la ligne juste en dessous de celle que je souhaite garder avec toutes les infos)
Ligne2 = Feuil2.Cells((K - 1), 1).Row (la ligne juste avant la ligne n'ayant pas les mêmes indices "C" et "Exp")
Plg = Union(Plg, Rows(Ligne1 & ":" & Ligne2)).Select
Q = 1

End If

Next K

Plg.EntireRow.Delete

End With

End Sub

En effet, le problème si je supprime les lignes dont je ne veux plus au fur et à mesure et que lorsqu'il re-rentre dans la boucle For, la ligne située sous celle qui a été supprimée prend son indice et n'est donc pas testée...
J'ai donc choisi d'essayer de faire sélectionner à mon programme toutes les lignes que je voulais supprimer (par une sorte d'union foireuse) et de supprimer cette sélection à la fin.

Il me sort une erreur de type 424. Je ne la comprends pas dans ce cas là car je n'ai pas utilisé d'objet non défini ou mal orthographié.

Je pense qu'il y a un problème avec l'union. A priori ce n'est pas un problème avec les indices car j'ai utilisé ce genre d'indices plus tôt dans le code pour calculer des moyennes et pour regrouper les données et cela a fonctionné.
De plus, pour faire cette union, je croyais avoir besoin d'une sélection initiale et j'ai donc dû créer la ligne 3...
C'est pas très joli tout ça, quelqu'un saurait-il comment me dépatouiller de ça s'il vous plait ?


Merci d'avance !!
 

Pièces jointes

  • Classeur1.xls
    35.5 KB · Affichages: 28
  • Classeur1.xls
    35.5 KB · Affichages: 29
  • Classeur1.xls
    35.5 KB · Affichages: 32
G

Guest

Guest
Re : Sélection et suppression de lignes variables et non consécutives dans un tableau

bonjour,

il n'y a pas de code dans le classeur exemple

Il faut partir de la dernière ligne vers la première

Code:
For k = DernLigne2 to 4 step -1
   '....lignes de codes
Next


En ce qui concerne l'union (méthode plus rapide) il faut d'abord tester si elle existe

Code:
if not plg is nothing then
    Set plg = Union(Plg,Rows(Ligne1 & ":" & Ligne2))
else
   Sep plg = Rows(Ligne1 & ":" & Ligne2
End if


A+
 
Dernière modification par un modérateur:

puppetquito

XLDnaute Nouveau
Re : Sélection et suppression de lignes variables et non consécutives dans un tableau

Merci ! mais je n'ai toujours pas trouvé l'issue...

Dans la boucle For "à l'envers" (comme indiquée dans votre premier conseil), j'ai écrit ce code :


'Sheets("Ecart_au_conseil").Select
'Q = 1
'Plg = Rows(3).Select

'For K = DernLigne2 To 4 Step -1
' If Feuil2.Cells(K, 1).Value = Feuil2.Cells(K - 1, 1).Value And Feuil2.Cells(K, 2).Value = Feuil2.Cells(K - 1, 2).Value Then
' Q = Q + 1
' Else
' Ligne1 = Feuil2.Cells(K + 1, 1).Row
' Ligne2 = Feuil2.Cells((K + (Q - 1)), 1).Row
' Rows(Ligne1 & ":" & Ligne2).Select
' Selection.EntireRow.Delete
'Q = 1
'End If

'Next K

Mais il supprime toutes les lignes, jusqu'à la ligne 6... Je ne trouve pas mon erreur...

Avec l'union, il me donne une erreur 424 sur la ligne If Not Plg Is Nothing :

Q = 1
Plg = Rows(3).EntireRow.Select
For K = 4 To DernLigne2

If Feuil2.Cells(K, 1).Value = Feuil2.Cells(K - 1, 1).Value And Feuil2.Cells(K, 2).Value = Feuil2.Cells(K - 1, 2).Value Then
Q = Q + 1
Else
Ligne1 = Feuil2.Cells((K + 1), 1).Row
Ligne2 = Feuil2.Cells(K + (Q - 1), 1).Row
Rows(Ligne1 & ":" & Ligne2).Select
If Not Plg Is Nothing Then
Set Plg = Union(Plg, Rows(Ligne1 & ":" & Ligne2))
Else
Set Plg = Rows(Ligne1 & ":" & Ligne2)
End If
Q = 1

End If
Next K


Plg.EntireRow.Delete


J'ai remis le fichier avec le code original, mais ce classeur n'est qu'une copie, car les données étant confidentielles je ne pouvais mettre les données brutes.

Merci !
 

Pièces jointes

  • Classeur1.xls
    50 KB · Affichages: 28
  • Classeur1.xls
    50 KB · Affichages: 26
  • Classeur1.xls
    50 KB · Affichages: 33
G

Guest

Guest
Re : Sélection et suppression de lignes variables et non consécutives dans un tableau

Re,

Plg doit être un objet Range et déclaré comme tel

plg=Rows(3).EntireRow.Select ne veut rien dire à par que tu sélectionne la ligne 3 entièrement

Donc déclarer une plage qui contiendra l'union de cellule:
Code:
Dim plageASupprimer as range
Ensuite
Code:
  If  plageASupprimer Is Nothing Then
     Set plageASupprimer = ...... 'premiere plage de cellules à supprimer
  Else
     Set plageASupprimer = Union(plageASupprimer, ......) 'Rajoute une nouvelle plage de cellule
 end if

Déclare TOUTES tes variables avec les types attendus correspondants s'il sont connus. Cela rendra le code plus compréhensible et facile à débuguer.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 286
Membres
103 170
dernier inscrit
HASSEN@45