A voir également:
- Faire référence à un classeur en particulier en VBA
- Meilleur site de vente entre particulier - Guide
- Whatsapp répondre à un message en particulier - Guide
- Reference pto - Accueil - Box & Connexion Internet
- La référence n'est pas valide excel - Forum Excel
- Imprimer un classeur excel sur mac - Guide
4 réponses
Bonjour,
Essayes ceci :
Cordialement,
Jordane
Essayes ceci :
Sub supprimer_annulations() Dim Wb As Workbook Dim Sh As Worksheet Dim nombredannul As Long Dim nbLignes As Long Set Wb = ActiveWorkbook Set Sh = Wb.ActiveSheet nbLignes = Sh.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row For L = nbLignes To 1 Step -1 If Sh.Cells(L, 15) = "Annul" Then nombredannul = nombredannul + 1 '------------------------------------------ 'ici.. tu pourrais mettre la suppression.. '------------------------------------------ End If Next MsgBox nombredannul End Sub
Cordialement,
Jordane
Bonjour,
dommage que tu nous fasses des mystères avec cette énigme:
ainsi que la ligne du dessous (sous certaines conditions)
car cela fera peut-^tre tout refaire!...
combien de lignes "annul" aurais tu , environ?
des milliers de lignes : cest à dire 5000 10000,50000 ?
car cela fera peut-^treaussi tout refaire!...
en attendant
Michel
dommage que tu nous fasses des mystères avec cette énigme:
ainsi que la ligne du dessous (sous certaines conditions)
car cela fera peut-^tre tout refaire!...
combien de lignes "annul" aurais tu , environ?
des milliers de lignes : cest à dire 5000 10000,50000 ?
car cela fera peut-^treaussi tout refaire!...
en attendant
Sub annuler_lig() Dim Nbre As Integer, Cptr As Integer, Lig As Integer Application.ScreenUpdating = False With ActiveSheet Nbre = Application.CountIf(.Columns("o"), "annul") For Cptr = 1 To Nbre Lig = .Columns("O").Find("annul", .Cells(Cells.Rows.Count, "O")).Row Rows(Lig).Delete Next End With MsgBox Nbre & " lignes annulées" End Sub
Michel
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
Bonjour Michel, merci de ta réponse.
Le tableau traiter fait environ 5000 lignes, et le nombre de lignes avec "Annul" est de 138.
Les conditions pour supprimer cecs lignes ainsi que celle du dessus est la suivante :
Les deux lignes doivent être rigoureusement identiques à l'exception de la colonne I (9), (qui contient des montants, dont je dois vérifier que l'un est l'opposé de l'autre).
Si cette condition n'est pas respectée, alors les lignes concernées ne doivent pas être supprimées et apparaître en rouge.
Voilà ce que j'ai pour le moment :
On me renvoie une erreur qui concerne la ligne de code en gras. Je pense que l'erreur vient du "-.Cells(...)" car si j'enlève le signe "-" je n'ai plus d'erreur.
Saurais-tu m'aider là dessus s'il te plaît ? C'est la dernière ligne droite (j'espère !) :)
PS : Merci pour ton code mais je n'y comprends pas grand chose, je suis vraiment novice en VBA, toutes mes connaissances se résument à ce qui apparaît dans mon code :p
Le tableau traiter fait environ 5000 lignes, et le nombre de lignes avec "Annul" est de 138.
Les conditions pour supprimer cecs lignes ainsi que celle du dessus est la suivante :
Les deux lignes doivent être rigoureusement identiques à l'exception de la colonne I (9), (qui contient des montants, dont je dois vérifier que l'un est l'opposé de l'autre).
Si cette condition n'est pas respectée, alors les lignes concernées ne doivent pas être supprimées et apparaître en rouge.
Voilà ce que j'ai pour le moment :
Sub supprimer_annulations()
Dim classeur As String
Dim feuille As String
Dim ligne As Integer
Dim nombredannul As Integer
classeur = ActiveWorkbook.Name
feuille = ActiveSheet.Name
ligne = 1
nombredannul = 0
With Application.Workbooks(classeur).Worksheets(feuille)
While .Cells(ligne, 1).Value <> ""
ligne = ligne + 1
If .Cells(ligne, 15) = "Annul" And .Cells(ligne, 9) = -.Cells(ligne - 1, 9) Then 'vérif que le montant passé en annulation est l'exact opposé du montant annulé
.Rows(ligne - 1).Delete 'suppression de la ligne au dessus de celle avec "Annul"
.Rows(ligne - 1).Delete 'suppression de la ligne "Annul", qui porte alors le même numéro que la ligne qui vient d'être supprimée
ligne = ligne - 2 'Pour suivre la variation de numéro de ligne entraîné par les suppressions
nombredannul = nombredannul + 1
'
'Si la deuxième condition (après le AND) n'est pas respectée, alors ne pas supprimer les lignes ne respecant pas cette condition
'et mettre ces lignes en rouge
'
End If
Wend
End With
MsgBox "Le tableau comporte " & nombredannul & " annulation(s)"
End Sub
On me renvoie une erreur qui concerne la ligne de code en gras. Je pense que l'erreur vient du "-.Cells(...)" car si j'enlève le signe "-" je n'ai plus d'erreur.
Saurais-tu m'aider là dessus s'il te plaît ? C'est la dernière ligne droite (j'espère !) :)
PS : Merci pour ton code mais je n'y comprends pas grand chose, je suis vraiment novice en VBA, toutes mes connaissances se résument à ce qui apparaît dans mon code :p
Non pas du tout haha, et je t'en remercie beaucoup !
Mais je ne connais pas ces instructions avec les variables nbre et lig
Je ne te demande pas de tout m'expliquer, sauf si le coeur t'en dit, mais j'aime mieux comprendre à 100% le code que je met dans mes macros !
J'ai cru comprendre que c'était pour compter le nombre de lignes dans le tableau, mais ça fonctionne très bien (en tous cas ça en a l'air) avec le "while", car le tableau est constitué d'un seul bloc. Donc quand il rencontre une case vide en colonne A, la boucle s'arrête.
Mais je ne connais pas ces instructions avec les variables nbre et lig
Je ne te demande pas de tout m'expliquer, sauf si le coeur t'en dit, mais j'aime mieux comprendre à 100% le code que je met dans mes macros !
J'ai cru comprendre que c'était pour compter le nombre de lignes dans le tableau, mais ça fonctionne très bien (en tous cas ça en a l'air) avec le "while", car le tableau est constitué d'un seul bloc. Donc quand il rencontre une case vide en colonne A, la boucle s'arrête.
voilà le code aves les commentaires explicatifs
en espérant les 100% ;o)--
Michel
Option Explicit
'-------------
Sub annuler_lig()
'déclaration des variables
Dim Nbre As Integer, Cptr As Integer, Lig As Integer
'fige le défilement de l'écran: indispensable, confort des yeux, rapidité _
a écrire dans pratiquement toutes macros
Application.ScreenUpdating = False
'with -end with: on travaille dans le bloc "feuille active" (évite les select chronophages)
With ActiveSheet
'nombre de fois où est inscrit "annul"
Nbre = Application.CountIf(.Columns("o"), "annul")
'on ne boucle que sur ces lignes: rapidité, allègement du code
For Cptr = 1 To Nbre
'Cells.Rows.Count, "O": dernière ligne de la feuille(1million et des poussières): la ligne suivante repart ainsi à 1
'on cherche la 1° ligne contenant "annul"
Lig = .Columns("O").Find(what:="annul", after:=.Cells(Cells.Rows.Count, "O")).Row
'détruit la ligne
.Rows(Lig).Delete 'j'avais oublié le point devant 'rows"
' la ligne étant détruite, le prochain "next" trouvera la nouvelle 1° ligne avec "Annul"
Next
End With
MsgBox Nbre & " lignes annulées"
End Sub
'outre la rapidité, ce système avec "find" évite de chercher la dernière ligne de la feuille et de remonter bêtement jusqu'en haut
' "option explicit" oblige à déclarer les variables utilisées et surtout, détecte toute faute de frappe(ca je sais bien faire) _
dans le code, et interdit le déroulement de la macro; très précieux quand on teste un code _
bref! indispensable
en espérant les 100% ;o)--
Michel
En fait ce qui ne marchait pas dans mon essai est que le numéro de ligne commençait à 0 au lieu de 1.
Merci :p