Excel 2003 - supp ligne suiv val dans col
Résolu/Fermé
Dauph-B51
Messages postés
4
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
7 avril 2008
-
7 avril 2008 à 04:24
Dauph-B51 - 7 avril 2008 à 22:57
Dauph-B51 - 7 avril 2008 à 22:57
A voir également:
- Excel 2003 - supp ligne suiv val dans col
- Aller à la ligne excel - Guide
- Liste déroulante excel - Guide
- Formule excel - Guide
- Hors ligne instagram - Guide
- Vente en ligne particulier - Guide
3 réponses
LePierre
Messages postés
249
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
2 août 2012
337
7 avril 2008 à 09:23
7 avril 2008 à 09:23
bonjour
les lignes répondant aux trois conditions seront supprimées avec ce code :
à plus
les lignes répondant aux trois conditions seront supprimées avec ce code :
Sub test() For Lig = 45000 To 1 Step -1 ColB = Cells(Lig, 2).Value ColC = Cells(Lig, 3).Value ColD = Cells(Lig, 4).Value If ColB = "" And ColC = "" And ColD = "Y" Then Rows(Lig & ":" & Lig).Select Selection.Delete Shift:=xlUp End If Next End Sub
à plus
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
7 avril 2008 à 09:33
7 avril 2008 à 09:33
bonjour
avec une macro de ce genre tu devrait nettoyer ton classeur
avec une macro de ce genre tu devrait nettoyer ton classeur
Public Sub sup_condi() Dim lig As Long For lig = UsedRange.Rows.Count To 1 Step -1 If Cells(lig, 2) = "" And Cells(lig, 3) = "" And Cells(lig, 4) = "Y" Then Rows(lig).Delete End If Next lig End Sub
LePierre
Messages postés
249
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
2 août 2012
337
7 avril 2008 à 11:02
7 avril 2008 à 11:02
bonjour
ce code est en effet beaucoup plus rapide en exécution mais il faut tenir compte des lignes vierges en tête du tableau
Je vous propose ce code modifié :
à plus
ce code est en effet beaucoup plus rapide en exécution mais il faut tenir compte des lignes vierges en tête du tableau
Je vous propose ce code modifié :
Public Sub sup_condi() Dim lig As Long ActiveSheet.UsedRange.Select ligDeb = ActiveCell.Row - 1 For lig = ActiveSheet.UsedRange.Rows.Count + ligDeb To 1 Step -1 If Cells(lig, 2) = "" And Cells(lig, 3) = "" And Cells(lig, 4) = "Y" Then Rows(lig).Delete End If Next lig End Sub
à plus
Dauph-B51
Messages postés
4
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
7 avril 2008
7 avril 2008 à 16:03
7 avril 2008 à 16:03
1000 merci pour tout cela
Je vais faire le test ce soir , je te dirai la suite
A+
Dauph
Je vais faire le test ce soir , je te dirai la suite
A+
Dauph
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
7 avril 2008 à 15:02
7 avril 2008 à 15:02
bonjour
il faut tenir compte des lignes vierges en tête du tableau
Si elle sont vierges, elles n'ont pas "Y" en colonne D ?
il faut tenir compte des lignes vierges en tête du tableau
Si elle sont vierges, elles n'ont pas "Y" en colonne D ?
Dauph-B51
Messages postés
4
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
7 avril 2008
7 avril 2008 à 16:01
7 avril 2008 à 16:01
Merci pour ton contact
Il n'y a pas de ligne vierge
c'est une base figée que le programmeur m'a exportée au format XLS.
Je vais faire les tests des possibilités indiquées ci-dessus ce soir
Je dirai si OK
En fait à titre indicatif toutes les cases en question contiennent un caractère mais je dois supprimer tous les "Y"
Cordialement
Il n'y a pas de ligne vierge
c'est une base figée que le programmeur m'a exportée au format XLS.
Je vais faire les tests des possibilités indiquées ci-dessus ce soir
Je dirai si OK
En fait à titre indicatif toutes les cases en question contiennent un caractère mais je dois supprimer tous les "Y"
Cordialement
LePierre
Messages postés
249
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
2 août 2012
337
7 avril 2008 à 16:58
7 avril 2008 à 16:58
bonjour
le morceau de code :
compte le nombre de lignes de la sélection.
S'il y a des lignes vierges en tête de feuille, le nombre de ligne n'est plus égal au N° de la dernière ligne de la sélection.
Ce qui revient à dire que les dernières lignes (nombre correspondant au nombre de lignes vierges en tête de tableau) de la sélection ne seront pas analysées.
c'est en testant ton code (qui me plait bien par ailleurs) que j'ai constaté ce problème.
à plus
le morceau de code :
ActiveSheet.UsedRange.Rows.Count
compte le nombre de lignes de la sélection.
S'il y a des lignes vierges en tête de feuille, le nombre de ligne n'est plus égal au N° de la dernière ligne de la sélection.
Ce qui revient à dire que les dernières lignes (nombre correspondant au nombre de lignes vierges en tête de tableau) de la sélection ne seront pas analysées.
c'est en testant ton code (qui me plait bien par ailleurs) que j'ai constaté ce problème.
à plus
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
>
LePierre
Messages postés
249
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
2 août 2012
7 avril 2008 à 18:37
7 avril 2008 à 18:37
bonjour LePierre,
Effectivement, tu as vu la faille et la fonction usedrange a quelques faiblesses (même si ici ce n'est pas le cas) mais comme toujours, on peut contourner.
Comme l'utilisation du select en vba est source de lenteur et depuis 2000 souvent inutile, on peut le faire ainsi
Merci de la détection de l'erreur et à bientôt sur un autre sujet.
Effectivement, tu as vu la faille et la fonction usedrange a quelques faiblesses (même si ici ce n'est pas le cas) mais comme toujours, on peut contourner.
Comme l'utilisation du select en vba est source de lenteur et depuis 2000 souvent inutile, on peut le faire ainsi
Public Sub sup_condi() Dim lig As Long For lig = UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1 If Cells(lig, 2) = "" And Cells(lig, 3) = "" And Cells(lig, 4) = "Y" Then Rows(lig).Delete End If Next lig End Sub
Merci de la détection de l'erreur et à bientôt sur un autre sujet.
LePierre
Messages postés
249
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
2 août 2012
337
>
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
7 avril 2008 à 18:47
7 avril 2008 à 18:47
superbe
par contre j'ai un petit problème je suis obligé d'ajouter "ActiveSheet." devant " UsedRange.SpecialCells(xlCellTypeLastCell).Row " sinon j'ai erreur d'exécution '424' Objet requis
est-ce grave docteur ?
merci et à plus
par contre j'ai un petit problème je suis obligé d'ajouter "ActiveSheet." devant " UsedRange.SpecialCells(xlCellTypeLastCell).Row " sinon j'ai erreur d'exécution '424' Objet requis
est-ce grave docteur ?
merci et à plus
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
>
LePierre
Messages postés
249
Date d'inscription
samedi 8 mars 2008
Statut
Membre
Dernière intervention
2 août 2012
7 avril 2008 à 19:19
7 avril 2008 à 19:19
bonjour
est-ce grave docteur ?
Oh non ! je ne pense pas que ta santé soit en danger pour si peu, si celle d'excel !
Cela fait partie de quelque "bizarreries" comme par exemple, comme c'est le cas ici, après la suppression des lignes, usedrange n'est pas toujours mis correctement à jour mais si tu sauvegardes, fermes et ouvres à nouveau, il retrouve ses esprits : c'est un peu dommage quand tu veux rajouter une ligne en fin après les suppressions.
Pour ajouter "ActiveSheet." devant, c'est un peu le même problème et cela dépend où tu mets ta macro sur une feuille ou dans un module. Dans ce dernier cas, la feuille n'est pas nécessairement activée pour excel.
En fait, si tu regardes la doc, c'est obligatoire, et je respectais cela scrupuleusement mais comme excel prend un certain nombre de valeurs par défaut, j'ai fini par ne plus les mettre et dans certains cas il réclame la rigueur !
lui aussi...
est-ce grave docteur ?
Oh non ! je ne pense pas que ta santé soit en danger pour si peu, si celle d'excel !
Cela fait partie de quelque "bizarreries" comme par exemple, comme c'est le cas ici, après la suppression des lignes, usedrange n'est pas toujours mis correctement à jour mais si tu sauvegardes, fermes et ouvres à nouveau, il retrouve ses esprits : c'est un peu dommage quand tu veux rajouter une ligne en fin après les suppressions.
Pour ajouter "ActiveSheet." devant, c'est un peu le même problème et cela dépend où tu mets ta macro sur une feuille ou dans un module. Dans ce dernier cas, la feuille n'est pas nécessairement activée pour excel.
En fait, si tu regardes la doc, c'est obligatoire, et je respectais cela scrupuleusement mais comme excel prend un certain nombre de valeurs par défaut, j'ai fini par ne plus les mettre et dans certains cas il réclame la rigueur !
lui aussi...
7 avril 2008 à 16:02
Je vais faire le test ce soir , je te dirai la suite
A+
Dauph
7 avril 2008 à 22:57
C'est tout de même géniale
Dans le mélange des avis des uns et des autres j'ai trouvé la solution
Merci à vous tous
Mon problème est résolu pour l'instant
A+
Dauph