jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention 1 juin 2007
-
6 oct. 2006 à 12:58
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 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.
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
' 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")
'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
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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)
'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
'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"
jeanluc065
Messages postés134Date d'inscriptionsamedi 23 septembre 2006StatutMembreDerniè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