Supprimer les 1ères colonnes si vides

Résolu
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007 - 6 oct. 2006 à 12:58
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007 - 7 oct. 2006 à 16:13
Bonjour à toutes et tous,

depuis access 2002, avant d'importer des données de feuilles excell, je souhaiterais supprimer les premières colonnes vides si il y en a dans ma feuille (ref).
En fait, je dois traiter des classeurs excell provenant de clients différents et dans certains cas, les premières colonnes sont vides. Ce sont celles-là que je voudrais supprimer.
Donc je devrais avoir un code test avec une boucle mais je suis hyper débutant, qui pourrait m'aider ?
Cà devrait ressembler à ceci avec une boucle adapté aux colonnes vides.

objExcel.ActiveWorkbook.Worksheets("ref").colonnes where colonnes vides

DeleteMerci d'avance.
JL

12 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
7 oct. 2006 à 13:38
 Re,

Il n'y pas beaucoup de différences entre:

    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 

et
    Dim LastLine, i 
    LastLine = ObjExcel.ActiveSheet.UsedRange.Row - 1 
    LastLine = LastLine + ObjExcel.ActiveSheet.UsedRange.Columns.Count
    For i = LastLine To 1 Step -1 
        If ObjExcel.Application.WorkSheetFunction.CountA(ObjExcel.Columns(i)) = 0 Then ObjExcel.Columns(i).Delete 
    Next

En fait, j'y suis arrivé par hasard, puisque je viens de voir que je n'avais pas changé UsedRange.Row - 1
J'ai testé sur un .xls avec 1, 2, puis 3 premières colonnes vides.

jean-marc
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 oct. 2006 à 17:42
salut,
voici ici un exemple pour les lignes : http://www.codyx.org/snippet_supprimer-lignes-vides-classeur_203.aspx

à toi d'adapter pour les colonnes
++
PCPT   [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
6 oct. 2006 à 18:14
Merci pour le tuyau mais le lien ne focntionne pas.
JL
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 oct. 2006 à 18:58
bizarre, il fonctionne chez moi...
bref.

<hr size= "2" width="100%" />en VBA (par Mortalino )

Sub
 Supprimer_Lignes_Vides() 
    Dim DerniereLigne As Long 
    Dim i             As Long 
DerniereLigne  = ActiveSheet.UsedRange.Row - 1 
DerniereLigne =  DerniereLigne + ActiveSheet.UsedRange.Rows.Count 
For i = DerniereLigne To 1 Step -1 
    If Application.WorkSheetFunction.CountA(Rows(i)) = 0 Then _
        Rows(i).Delete 
Next i 
End Sub

<hr size="2" width="100%" />en VB6 (par moi-même)

Option
 Explicit 

Private Sub Form_Load() 
    Dim ExlObj As Object 

'   ouvre excel
    Call OpenXlsDocument(ExlObj, "C:\test.xls") 

'   supprime les lignes vides
    Call  DeleteEmptyLines(ExlObj)  

'   focus pour avoir le msgbox devant excel
    Me.Show: Me.SetFocus: Me.Hide 

    If MsgBox("Voulez-vous quitter EXCEL sans enregistrer?", vbYesNo, "Fermeture VB")  = vbYes Then ExlObj.Application.Quit 
    Set ExlObj = Nothing 
    Unload Me 
End Sub 
'
'
Private Sub OpenXlsDocument(XLS As Object, sPath As String) 
'   l'objet est de type feuille excel (pas de référence librairie à excel)
    Set XLS = CreateObject("Excel.Application") 

    XLS.Visible = True 
    XLS.Workbooks.Open FileName:=sPath, Editable:=True 

    'supprime l'affichage des messages d'erreurs ou de confirmation de suppression, ...
    XLS.DisplayAlerts = False 
End Sub 
'
'
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

<hr size="2" width="100%" />
@+
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
6 oct. 2006 à 19:31
Merci Mortalino,

je vais essayer d'adapter mais...
Tu m'aurais fourni l'algorithme de l'euro-millions, c'était la même chose !  lol
Bonne soirée.
JL
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 oct. 2006 à 20:06
çà doit pas être si compliqué .... de remplacer Row par Col

bonnes modifs.
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
7 oct. 2006 à 07:06
Bonjour PCPT,

Merci pour ta réponse mais comme hyper novice, je n'y arrive pas.
JMO m'a écrit cette focntion qui marche super bien et qui est un bel exemple didactique ( je renomme une feuille, j'ajoute une feuille, j'attribue la valeur du fichier à une cellule, je coupe des lignes d'une feuille que je colle dans une autre feuille et je sauvegarde)  et c'est dans cette fonction que je voudrais intégrer la commande " supprimer les premières colonnes vides de ma feuille "ident".


Quelqu'un pourrait-il m'aider ?
Merci d'avance

Function ShowFolderListmobi(path)
'présentation originale du classeur: 1 feuille appelée xysysysy.......
Dim fso:        Set fso = CreateObject("Scripting.FileSystemObject")
Dim Dossiers:   Set Dossiers = fso.GetFolder(path)
Dim fichiers:   Set fichiers = Dossiers.Files


Dim fichier, f, strListe


For Each fichier In fichiers
   
   DoCmd.Hourglass True
  Set f = fso.GetFile(fichier)
    If fso.GetExtensionName(fichier) = "xls" Then
    
       Dim objExcel, objClasseur
       Set objExcel = CreateObject("Excel.Application")
       Set objClasseur = objExcel.Workbooks.Open(fichier)


       objExcel.DisplayAlerts = False 'enlève l'alerte
       objExcel.Application.Visible = False


      'MsgBox objClasseur.Sheets(1).Name,,"Nom de la Feuil1 avant modification"
      If objClasseur.Sheets(1).Name <> "Référence" Then
      objClasseur.Sheets(1).Name = "ident"
   End If
  
     'Renommer la derniere feuille
      If objExcel.ActiveWorkbook.Sheets(1).Name <> "Référence" Then
         objExcel.ActiveWorkbook.Sheets.Add
         objExcel.ActiveWorkbook.Sheets(objExcel.Sheets.Count - 1).Name = "Référence"
   
     
      End If


      'écriture du nom du fichier dans la 1ère cellule de "Référence"
      objExcel.ActiveWorkbook.Sheets("Référence").Select
      objExcel.Cells(1, 1).Value = fichier
       objExcel.ActiveWorkbook.Sheets("identification").Select
     


   
      'Coupe les lignes 1 à 12 de la feuille "identification"
   objExcel.ActiveWorkbook.Sheets("ident").Select
     If objExcel.Cells(1, 1).Value = "User" Then
     objExcel.ActiveWorkbook.Worksheets("ident").Rows("1:11").Cut

    'Insert la selection coupée a partir de la ligne 2
    '(la ligne 2 se retrouvera donc APRES la selection insérée
    objExcel.ActiveWorkbook.Worksheets("Référence").Rows("2:2").Insert Shift:=xlDown
    objExcel.ActiveWorkbook.Worksheets("ident").Rows("1:11").Delete

c'est ici que je voudrais supprimer les premières colonnes vides de ma feuille "ident"                       
   
End If
       
      'WScript.Sleep "500"
      'MsgBox objClasseur.Sheets(1).Name,,"Nom de la Feuil1 après modification"


      objExcel.ActiveWorkbook.SaveAs fichier 'sauvegarde sous le même nom
      objExcel.ActiveWorkbook.Saved = True 'sauvegarde true=oui false=non
      'objExcel.DisplayAlerts=True 'remet l'alerte
      'objExcel.Application.Visible=True 'remet la visibilité
      objExcel.ActiveWorkbook.Close 'Fermeture d'Excel


    
      Set objExcel = Nothing
      Set objClasseur = Nothing
   End If
Next
Set f = Nothing
Set fichiers = Nothing
Set Dossiers = Nothing
Set fso = Nothing
DoCmd.Hourglass False
End Function
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
7 oct. 2006 à 12:51
 Bonjour à tous....

Salut Jean-Luc,

Le code de PCPT supprime bien les premières lignes.

Ex:
'source de PCPT => http://www.codyx.org/snippet_supprimer-lignes-vides-classeur_203.aspx    



        'Suppresson premières colonnes vides dans "ident1"
        'On se positionne sur la feuille "ident1"
        objExcel.ActiveWorkbook.Sheets("ident1").Select  
        Dim LastLine, i
        LastLine = ObjExcel.ActiveSheet.UsedRange.Row - 1
        LastLine = LastLine + ObjExcel.ActiveSheet.UsedRange.Columns.Count



        For i = LastLine To 1 Step -1
            If ObjExcel.Application.WorkSheetFunction.CountA(ObjExcel.Columns(i)) = 0 Then ObjExcel.Columns(i).Delete
        Next



       'Renomme la troisième feuille
       objClasseur.Sheets(3).Name = "ident2"


jean-marc
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
7 oct. 2006 à 13:04
 Re,
Il faut comprendre:
Le code de PCPT supprime bien les premières colonnes vides.

jean-marc
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
7 oct. 2006 à 13:18
salut,
j'ai fais çà moi?

j'avais dit de modifier row par col (columns apparemment), je touche pas à VBA (ni à VBS d'ailleurs )
merci de ton intervention JMO

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
7 oct. 2006 à 13:26
 Bonjour à tous....

Salut PCPT,
dixit:
çà doit pas être si compliqué .... de remplacer Row par Col

J'ai passé + de 2h sur google pour chercher une réponse en vbs,
et finalement, j'ai simplement adapté ton code.
Je ne connais pas VBA/VB6.

Bonne journée.
A+.
jean-marc
0
jeanluc065 Messages postés 134 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 1 juin 2007
7 oct. 2006 à 16:13
Merci Super Jean-Marc,

Cà fonctionne super bien.
Je t'adresse mes plus sincères remerciements car, grâce à toi, mon projet avance à grands pas.
Merci aussi à PCPT qui avait daigné me répondre et qui était sur la bonne voie.
Encore une fois, super site fréquenté par des gens exceptionnels. Bel esprit d'entraide.
JL

 
0
Rejoignez-nous