Supprimer ligne avec condition [Résolu]

avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 13 mai 2007 à 16:52 - Dernière réponse : cs_MPi 3875 Messages postés mardi 19 mars 2002Date d'inscription 17 août 2018 Dernière intervention
- 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 

    LastLine = XLS.ActiveSheet.UsedRange.Row - 1 
    LastLine = LastLine + XLS.ActiveSheet.UsedRange.Rows.Count 

    For i = LastLine To 1 Step -1 
        If XLS.Application.WorkSheetFunction.CountA(XLS.Rows(i)) = 0 Then XLS.Rows(i).Delete
    Next i 
End Sub

Si il y a des données dans la colone A et B mais qu'il n'y à rien dans la colone C et D, je voudrais qu'il supprime la ou les ligne(s) completement.

Comment y arriver s.v.p?

Merci encore
Afficher la suite 

Votre réponse

29 réponses

Meilleure réponse
cs_MPi 3875 Messages postés mardi 19 mars 2002Date d'inscription 17 août 2018 Dernière intervention - 14 mai 2007 à 11:29
3
Merci
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

MPi

Merci cs_MPi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de cs_MPi
Meilleure réponse
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2007 à 16:45
3
Merci
Tiens j'ai retrouvé le topic sur les fonctions Excel Depuis VB6 :
http://www.vbfrance.com/infomsg_VISUAL-BASIC_927302.aspx

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  

Merci mortalino 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de mortalino
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 13 mai 2007 à 17:07
0
Merci
Re,

Private
 Sub DeleteEmptyLines(XLS As Object) 
    Dim LastLine As Long, i As Long 

    LastLine = XLS.ActiveSheet.UsedRange.Row - 1 
    LastLine = LastLine + XLS.ActiveSheet.UsedRange.Rows.Count 

    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~
  
Commenter la réponse de mortalino
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 13 mai 2007 à 17:18
0
Merci
mortalino,

y a-t-il une raison pourquoi il me donne une erreur rendu à :

LastLine = XLS.ActiveSheet.UsedRange.Row - 1
    LastLine = LastLine + XLS.ActiveSheet.UsedRange.Rows.Count

Pourtant, il devrait fonctionner!
Commenter la réponse de avyrex1926
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 13 mai 2007 à 17:25
0
Merci
Autant utiliser le bon vieux Range ;)
LastLine = Range("A65536").End(xlUp).Row

Ce code te parle  

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Commenter la réponse de mortalino
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 13 mai 2007 à 17:28
0
Merci
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~
  
Commenter la réponse de mortalino
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 13 mai 2007 à 18:46
0
Merci
 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.

jean-marc
Commenter la réponse de cs_JMO
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 00:59
0
Merci
Bon voici quelque nouvelles,

J'ai fais plusieurs test, et toujours rien.

Bon si je récapitule, voici le script:

<hr size= "2" width="100%" />Private Sub DeleteEmptyLines_Click()
Dim LastLine As Long, i As Long

    LastLine = Range("C65536").End(xlUp).Row    LastLine LastLine XLS.ActiveSheet.Range("C65536").End(xlDown).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%" />
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.
Commenter la réponse de avyrex1926
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 01:10
0
Merci
Désolé

Plutot :
<hr size="2" width="100%" />
Private Sub DeleteEmptyLines_Click()
Dim LastLine As Long, i As Long

    LastLine = Range("C65536").End(xlUp).Row
    LastLine = LastLine + XLS.ActiveSheet.Range("C65536").End(xlDown).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%" />
Et le probleme sur:
LastLine = LastLine + XLS.ActiveSheet.Range("C65536").End(xlDown).Row
Commenter la réponse de avyrex1926
cs_MPi 3875 Messages postés mardi 19 mars 2002Date d'inscription 17 août 2018 Dernière intervention - 14 mai 2007 à 02:50
0
Merci
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

MPi
Commenter la réponse de cs_MPi
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 03:07
0
Merci
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.

Je continue de chercher moi aussi.

Merci pour ton aide 
Commenter la réponse de avyrex1926
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 12:55
0
Merci
que veux tu dire par déclaré et intialisé l'objet XLS?

Parle tu de la référence?
Commenter la réponse de avyrex1926
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 14:42
0
Merci
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

Merci
Commenter la réponse de avyrex1926
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2007 à 15:06
0
Merci
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~
  
Commenter la réponse de mortalino
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 15:55
0
Merci
Je suis avec VB6 aussi.

Mais avec une base de données excel. 
Commenter la réponse de avyrex1926
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2007 à 16:03
0
Merci
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~
  
Commenter la réponse de mortalino
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 16:12
0
Merci
OK, je commence à comprend la différence là!

C'est tellement nouveau que j'ai de la difficulté à voir la différence.


Je me suis acheté un livre sur Microsoft Visual Basic 6 et je dois apprendre
les termes, mais bon, je vais y parvenir.


Merci pour l'explication et je vais essayer ta façon de faire, car je veux
rester le plus possible en vb6.


Je te donne des nouvelles là-dessus!


merci

 
Commenter la réponse de avyrex1926
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2007 à 16:17
0
Merci
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~
  
Commenter la réponse de mortalino
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 14 mai 2007 à 16:30
0
Merci
J,ai justement cliqué sur un icone comme ça, donc on peut aussi utiliser du scritp vba dans vb6 alors ?
Commenter la réponse de avyrex1926
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 14 mai 2007 à 16:38
0
Merci
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~
  
Commenter la réponse de mortalino

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.