Supprimer les 1ères colonnes si vides [Résolu]

Signaler
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007
-
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007
-
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

Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
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
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

Merci pour le tuyau mais le lien ne focntionne pas.
JL
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
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
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
çà 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
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Re,
Il faut comprendre:
Le code de PCPT supprime bien les premières colonnes vides.

jean-marc
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
37
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
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
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
Messages postés
134
Date d'inscription
samedi 23 septembre 2006
Statut
Membre
Dernière intervention
1 juin 2007

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