avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 2012
-
13 mai 2007 à 16:52
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
14 mai 2007 à 23:32
Bonjour,
Petite question, j'ai trouvé sur le forum pour supprimer une ligne vide:
Private
Sub DeleteEmptyLines(XLS As Object)
Dim LastLine As Long, i As Long
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 14 mai 2007 à 11:29
Est-ce que tu as déclaré et intialisé l'objet XLS ?
Si oui , que vaut cette variable ?
Si non, essaie peut-être comme ceci (et n'oublie pas le moins un)
For i = LastLine To 1 Step - 1 ' -1, pas 1 If Cells(i, 3).Value vbNullString And Cells(i, 4).Value vbNullString Then
Rows(i).Delete
End If
Next i
For i = LastLine To 1 Step -1
If XLS.Application.WorkSheetFunction.CountA(XLS.Rows(i)) = 0 Or _ (XLS.Cells(i, 3).Value vbNullString And XLS.Cells(i, 4).Value vbNullString) _
Then XLS.Rows(i).Delete
Next i
End Sub
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 13 mai 2007 à 17:28
Avec la référence du classeur devant, bien sûr :
LastLine = XLS.ActiveSheet. Range("A65536").End(xlUp).Row
Par contre, le paramètre (XLS As Object) est à proscrire.
Autant utiliser le classeur, qui est (normalement) référencé ailleurs (dans la procédure appelante, je suppose) :
Private
Sub DeleteEmptyLines(XLS As Excel.WorkBook)
@++
<hr width ="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 13 mai 2007 à 18:46
Bonjour à tous,
Bonjour Mortalino,
[auteurdetail.aspx?ID=926087 avyrex1926] a utilisé la source de PCPT (http://www.codyx.org/snippet_supprimer-lignes-vides-classeur_203.aspx) Je viens de l'adapter pour vbs. Elle supprime bien toutes les lignes vides.
Petite question, car ne connaissant pas les fonctions d'Excel, je n'ai pas compris le
objExcel.Application.WorkSheetFunction.CountA(ObjExcel.Rows(i)) = 0
Je viens d'essayer ton ajout. C'est efficace.
For i = LastLine To 1 Step -1
If XLS.Application.WorksheetFunction.CountA(XLS.Rows(i)) = 0 Or _ (XLS.Cells(i, 3).Value vbNullString And XLS.Cells(i, 4).Value vbNullString) _
Then XLS.Rows(i).Delete
Next i
End Sub
<hr size="2" width="100%" />
Il me crée toujours un bug rendu à: LastLine LastLine XLS.ActiveSheet.Range("C65536").End(xlDown).Row
Pourtant LastLine = la ligne 18 et dans mon fichier excel, la ligne 18 est la derniere ligne qui contient des données dans les colone C et D. À partire de la ligne 19, il y a des données dans la colone A et B mais pas dans les autres donc en théorie, il devrait les supprimer les lignes, mais non, il ne le fait pas.
For i = LastLine To 1 Step -1
If XLS.Application.WorksheetFunction.CountA(XLS.Rows(i)) = 0 Or _ (XLS.Cells(i, 3).Value vbNullString And XLS.Cells(i, 4).Value vbNullString) _
Then XLS.Rows(i).Delete
Next i
End Sub
<hr size="2" width="100%" />
Et le probleme sur:
LastLine = LastLine + XLS.ActiveSheet.Range("C65536").End(xlDown).Row
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 14 mai 2007 à 02:50
Si tu veux avoir la dernière ligne de la colonne C, met en commentaire la ligne en bleu et ça devrait bien fonctionner
Utilise seulement cette ligne
LastLine = Range("C65536").End(xlUp).Row
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 14 mai 2007 à 03:07
Salut MPI,
J'ai modifié pour :
<hr size="2" width="100%" />Private Sub DeleteEmptyLines_Click()
Dim LastLine As Long, i As Long
LastLine = Range("A65536").End(xlUp).Row
For i = LastLine To 1 Step 1
If XLS.Application.WorksheetFunction.CountA(XLS.Rows(i)) = 0 Or _ (XLS.Cells(i, 3).Value vbNullString And XLS.Cells(i, 4).Value vbNullString) _
Then XLS.Rows(i).Delete
Next i
End Sub
<hr size="2" width="100%" />Maintenant, y'a plus de message d'erreur mais il ne fais rien aussi. Il me supprime pas les lignes qui non pas de données dans les colone C et D.
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 14 mai 2007 à 14:42
J'ai juste changé 2 valeurs et maintenant, ça fonctionne. Je sais pas pourquoi mais bon sa fonctionne.
Voici ce que j'ai changé (en bleu):
For i = LastLine To 1 Step - 1 ' -1, pas 1 If Cells(i, 11).Value vbNullString And Cells(i, <gras>12).Value</gras> vbNullString Then
Rows(i).Delete
End If
Next i
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 14 mai 2007 à 15:06
Bref, t'étais en VBA Excel, et depuis le début on croyait que t'étais avec VB6...
Attention au thème lors de la dépose de la question (comme quoi, ça a son importance)
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 14 mai 2007 à 16:03
Oui, c'est bien ce que je dis, t'es avec VBA (Visual Basic pour Applications) et non Visual Basic 6.0 Professionnel (indépendant, créer des exécutables, dll, dll ActiveX, etc..)
C'est 2 choses différentes et importantes à savoir. Dans ton code :
If Cells(i, 11).Value vbNullString And Cells(i, 12 ).Value vbNullString Then
Rows(i).Delete
Si t'étais en VB6 ça ne fonctionnerait pas, il faudrait référencer Excel et le classeur avant, et de l'utiliser comme objet devant Cells, Rows, etc..
Dim xlApp As New Excel.Application, xlBook As Excel.WorkBook
Set xlBook = xlApp.WorkBooks.Open("C:\chemin\fichier.xls)
If xlBook. Cells(i, 11).Value vbNullString And <gras>xlBook.Cells(i, 12).Value</gras> vbNullString Then
xlBook. Rows(i).Delete
Comme tu vois, les syntaxes différent légèrement.
En tout cas, tu as utiliser le snippet de PCPT (fait pour VB6), si tu avait utilisé le mien qui se trouvait juste au dessus, ça aurait fonctionné depuis le départ
@++
<hr size ="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 14 mai 2007 à 16:17
Ok, pas de problème
Dis toi une chose, si tu doucle clique sur une icone qui ressemble à ça, et qu'une interface s'ouvre, c'est VB6.
Si par contre, t'ouvre Excel (ou Word, Acess) et que tu fais Alt + F11 (ou menu Outil, Macro, Visual Basic Editor), c'est VBA !
Bonne apprentissage
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 14 mai 2007 à 16:38
Oui, mais avec 2 conditions :
1/ Cocher la bonne référence : Microsoft Excel Object Library x.x (x = version)
2/ Référncer l'application et le classeur Excel, comme je l'ai fait un peu plus haut
Si tu te débrouilles bien, tu pourras même utiliser les fonctions VBA dans VB6 (Cos, Tan, etc..) comme je l'ai montré récemment dans un autre post
Si tu veux un exemple concrêt, regarde dans mes sources Trieur de doublons, tu y trouveras du code pour ouvrir un fichier Excel existant, travailler dessus, et enregistrer une copie de celui-ci (enfin presque, sans les doublons) Tout cela en partant de VB6
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~