Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
macro pour supprimer lignes selon valeur de cellules
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.
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
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.
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.
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
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.