Faire référence à un classeur en particulier en VBA
Fermé
bdadvi94
Messages postés
14
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
8 mars 2016
-
16 févr. 2016 à 11:12
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 17 févr. 2016 à 14:21
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 17 févr. 2016 à 14:21
A voir également:
- Faire référence à un classeur en particulier en VBA
- Site de vente en ligne particulier - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Whatsapp répondre à un message en particulier - Guide
- Dans le document à télécharger, les références des pièces détachées sont affichées par pays, puis par type de pièces. réorganisez le document pour avoir : les pays dans l'ordre alphabétique : allemagne, espagne, france et italie ; et pour chaque pays, les pièces d'auto, de bateau et de moto dans cet ordre. quelle est la référence de la pièce en ligne 500 ? ✓ - Forum Windows
- Référence future non valide ou référence à un type non compilé ✓ - Forum Word
4 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
Modifié par jordane45 le 16/02/2016 à 11:44
Modifié par jordane45 le 16/02/2016 à 11:44
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par jordane45 le 16/02/2016 à 13:47
Modifié par jordane45 le 16/02/2016 à 13:47
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. |
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
17 févr. 2016 à 11:38
17 févr. 2016 à 11:38
AAAAAH ! Jordane est TOUT CONTENT!
Il a trouvé une image à colorier et a pu faire joujou, le pitchou
il aura droit à un bonbon pour la peine
Il a trouvé une image à colorier et a pu faire joujou, le pitchou
il aura droit à un bonbon pour la peine
bdadvi94
Messages postés
14
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
8 mars 2016
16 févr. 2016 à 13:45
16 févr. 2016 à 13:45
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 16/02/2016 à 13:50
Modifié par michel_m le 16/02/2016 à 13:50
autrement dit ma proposition t' as paru nulle ?
boucler sur 5000 lignes plutôt que 138: BRAVO!
Et le tout sans figer l'écran: SPLENDIDE !
boucler sur 5000 lignes plutôt que 138: BRAVO!
Et le tout sans figer l'écran: SPLENDIDE !
bdadvi94
Messages postés
14
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
8 mars 2016
16 févr. 2016 à 13:53
16 févr. 2016 à 13:53
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.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
bdadvi94
Messages postés
14
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
8 mars 2016
17 févr. 2016 à 09:00
17 févr. 2016 à 09:00
Bon!
et bien,reste avec le While,
et bien,reste avec le While,
bdadvi94
Messages postés
14
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
8 mars 2016
17 févr. 2016 à 09:18
17 févr. 2016 à 09:18
Bonjour,
Si j'ai bien compris ce que tu dis, les instructions
permettent de ne boucler que sur les lignes comportant "annul" ? :)
Si j'ai bien compris ce que tu dis, les instructions
Nbre = Application.CountIf(.Columns("o"), "annul")
For Cptr = 1 To Nbre
Lig = .Columns("O").Find("annul", .Cells(Cells.Rows.Count, "O")).Row
permettent de ne boucler que sur les lignes comportant "annul" ? :)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
bdadvi94
Messages postés
14
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
8 mars 2016
17 févr. 2016 à 11:33
17 févr. 2016 à 11:33
Hé oui....
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 17/02/2016 à 14:29
Modifié par michel_m le 17/02/2016 à 14:29
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
16 févr. 2016 à 12:15
En fait ce qui ne marchait pas dans mon essai est que le numéro de ligne commençait à 0 au lieu de 1.
16 févr. 2016 à 12:15
Merci :p