macro pour supprimer lignes selon valeur de cellules

patrmich

XLDnaute Nouveau
Bonjour,

Je suis novice en programmation.

Je souhaiterais créer une macro Excel qui permette la fonction suivante :
- supprimer les lignes pour lesquelle la valeur de la cellule d'une colonne (colonne G par exemple) est inférieure à 6.

Merci par avance pour toute aide.

Patrick
 

Kotov

XLDnaute Impliqué
Re : macro pour supprimer lignes selon valeur de cellules

Bonsoir Patrick,

Tentes ceci :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim n&, i&
n = Cells(65536, 7).End(3).Row
For i = n To 1 Step -1
        If Cells(i, 7) < 6 Then Rows(i).Delete
Next i
End Sub


Edit : salut BhBh, j'avais oublié de rafraîchir l'écran. Par ailleurs, tu économises une ligne, bravo ;)

Bonne soirée
Kotov
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : macro pour supprimer lignes selon valeur de cellules

Bonsoir,

Kotov :)

Personnellement, j'ai un gros défaut, je déclare rarement mes variables.....

Cependant, je préfère ne pas les déclarer, que mettre :

Code:
Dim n&, i&

Comme je ne connais pas tous les raccourcis, je recherche, regarde à quoi correspond ce symbole (Long, en l'occurrence)

Donc, ma question est :

A quoi servent les raccourcis de déclaration de variables, sauf aux initiés?

Tout à fait amicalement ;)
 

patrmich

XLDnaute Nouveau
Re : macro pour supprimer lignes selon valeur de cellules

L'utilité de la macro que vous m'avez donnée me mets l'eau à la bouche pour d'autres macros....

Est il possible de faire une macro permettant la fonction suivante :
- supprimer les lignes pour lesquelle la valeur de la cellule d'une colonne (colonne H par exemple) ne contient pas le mot Somme.

Merci par avance pour toute aide.

Patrick
 

patrmich

XLDnaute Nouveau
Re : macro pour supprimer lignes selon valeur de cellules

J'ai arrêté et rallumé le PC : toujours le même message d'ereur dans l'exécution de la macro "efface_le_mot_somme"

La macro précédente ("efface_moins_six") fonctionne elle toujours très bien, dans le même fichier excel.
 

Kotov

XLDnaute Impliqué
Re : macro pour supprimer lignes selon valeur de cellules

Bonsoir,

Kotov :)

Personnellement, j'ai un gros défaut, je déclare rarement mes variables.....

Cependant, je préfère ne pas les déclarer, que mettre :

Code:
Dim n&, i&

Comme je ne connais pas tous les raccourcis, je recherche, regarde à quoi correspond ce symbole (Long, en l'occurrence)

Donc, ma question est :

A quoi servent les raccourcis de déclaration de variables, sauf aux initiés?


Tout à fait amicalement ;)
----------------------------------
Salut BhBh,

Quand je parlais de gagner une ligne je pensais plutôt à
Code:
n = Cells(65536, 7).End(3).Row
For i = n To 1 Step -1

que tu remplaces par
Code:
For i = [H65000].End(xlUp).Row To 1 Step -1

Par ailleurs, et pour répondre à ta question, je reste attaché à la déclaration des variables, même si dans le très court code de ce fil, la déclaration ou l'absence de déclaration n'a guère d'effet.

Les avantages qui me viennent à l'esprit :
1. l'espace mémoire alloué à chaque variable :

il est préférable, notamment dans les gros projets, d'ajuster au mieux les ressources aux besoins.
Une variable déclarée Byte (entier de 0 à 255) occupe 1 octet en mémoire
Boolean (Vrai/faux) = 2 octets
Integer ou % (entier) = 2 octets
Long ou & (entier long) = 4 octets
Single ou !(nbre à virgule flottante, simple précision ) = 4 octets
Double ou # (nbre à virgule flottante, double précision ) = 8 octets
Currency (monétaire) = 8 octets
Date = 8 octets
Decimal = 16 octets
Pour la déclaration String ou $ qui correspond à une chaîne de caractères, je ne suis plus très sûr, mais ça dépasse 10 octets avec je crois une limite en Ko (une soixantaine, à vérifier ..)

Une variable non déclarée est assimilée au type Variant, qui alloue un espace mémoire de 16 octets pour pouvoir s'adapter à la plupart des types.

Dans une petite macro, ça n'a pas d'importance, mais dans un gros projet, inutile d'allouer de 4 à 8 fois plus de mémoire que nécessaire.
En revanche Variant est utile pour éviter les dépassements de capacité quand on ne sait pas trop quel type de données sera stockée.
J'ai également un souvenir confus d'une erreur provoquée par Variant dans le stockage de certaines chaînes de caractères spécifiques, mais j'ai oublié lesquelles (à prendre au conditionnel)


2. Une organisation plus claire :

En déclarant les variables en début de portée, en associant éventuellement un commentaire
à chaque variable, la macro est bien plus compréhensible.
C'est également très utile dans les gros projets, notamment pour se replonger dans le code après plusieurs mois ou années.
L'an passé, j'ai réalisé pour mon job, un projet dont le code source, imprimé en police 8, équivaut à 60 feuilles A4. De temps en temps j'apporte des modifs en fonction des résultats et évolutions attendues, et je t'assure être très heureux d'avoir "perdu" plusieurs heures à commenter chaque module, chaque macro, chaque variable.

Pour ces raisons, pour ne pas en perdre l'habitude, pour donner l'exemple aux débutants VBA, je continue de déclarer les variables.


Mais effectivement, sur un code très court, ça ne change rien.

Bonne journée
Amitiés

Kotov
 
Dernière édition:

KImi9664

XLDnaute Nouveau
Re : macro pour supprimer lignes selon valeur de cellules

j'ai utilisé la macro pour supprimé la ligne et cela marche très bien.

J'aimerai cependant que la suppression se fasse uniquement sur les colonnes de D à W, comment faut-il remplacer le rows??

Merci d'avance
 

domoi

XLDnaute Nouveau
Re : macro pour supprimer lignes selon valeur de cellules

Bonjour,
Je souhaiterai supprimer les lignes en fonction des valeurs (determinees et peu nombreuses) que contiennent certaines cellules dans certaines collone. Je m'explique : lorsque dans la colonne A j'ai la valeur 21001, ou 22451 ou encore 91245 la ligne doit etre supprimee. Meme topo pour la colonne E. (Ceci j'ai reussi a coder).
Toutefois dans ma colonne F, j'aimerai effectuer cette operation avec des dates : toutes les lignes ayant des dates superieures au sur-lendemain doivent etre egalement supprimees. (c'est la ou ca beug).
J'ai tente le code suivant (fonctionne jusqu'au moment ou je fais intervenir l'aspect calendrier). Pourriez-vous m'aider a arraner ce code.

Sub supprime()
Dim lig As Double, Deuxj As Integer, Auj As Integer, Aprsdmn As Double

Deuxj = 2
Auj = Now
Result = Now + Deuxj


Application.ScreenUpdating = False
For lig = Cells(65536, 1).End(xlUp).Row To 1 Step -1
Select Case Cells(lig, 1).Value
Case "21001", "22541", "91245"
Rows(lig).delete
End Select
Select Case Cells(lig, 5).Value
Case "GE", "GH-TH", "127SB-UE", "59YTB-BE"
Rows(lig).delete
End Select
Select Case Cells(lig, 6).Value
If Result = Now Then
Rows(lig).delete
End Select
Next lig

End Sub



Merci
Cordialement

Domoi
 

Discussions similaires

Réponses
22
Affichages
898