![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: octobre 2008
Localisation: Afrique du Sud
Âge: 22
Messages: 22
|
Bon je viens de me rendre compte qu'il ne faut poser qu'un probleme par post donc j'en ouvre un nouveau pour ce probleme de ligne vides.
Donc voila mon probleme. J'effectue une mise a jour de ma base de donnees par l'intermediaire d'un module VB qui me formate un tableau excel de facon a regrouper toutes les donnees du classeur sur la premiere feuille puis ensuite importe cette feuille sous excel. Lors de cette importation, il reste des lignes blanches sur cette feuille qu'il faudrait que je supprime avant importation. Donc voila ma requete: serait-il possible de coder la recherche de lignes vides ainsi que leur suppression? Voila mon module de formatage du fichier excel: Code :
' Entries : strBook <- Book path. ' strSheet <- Name of the sheet to delete. Function UpdatePrepare( _ ByVal strBook As String, _ ByVal strSheet As String) Dim xlApp As Excel.Application Dim wbk As Excel.Workbook Dim Feuille As Worksheet Dim PlageSource As Range ' définit la plage source dans les feuilles qui seront transférées Dim CelluleCible As Range ' définit la première cellule en A de la feuille 1 disponible ' Open the book Set xlApp = CreateObject("Excel.Application") Set wbk = xlApp.Workbooks.Open(strBook) ' Desactivate Excel messages xlApp.DisplayAlerts = False For Each Feuille In Worksheets If Feuille.Name <> "A" Then Set CelluleCible = Worksheets("A").Cells(Rows.Count, 1).End(xlUp)(2) Feuille.Rows("1:3").Delete Set PlageSource = Feuille.Range("a1:ap" & Feuille.Cells(Rows.Count, 1).End(xlUp).Row) PlageSource.Copy Destination:=CelluleCible End If Next Feuille Worksheets("A").Rows("1:2").Delete Worksheets("A").Columns("g").Delete wbk.Close True ' Close Excel xlApp.Quit Set xlApp = Nothing End Function |
|
|
|
|
|
#2 (permalink) |
![]() |
Bonjour
Voici une procédure générique qui supprime les lignes vides d'une feuille. Il y a probablement plus beau et plus performant, mais le résultat est là Code :
Sub SupprimerLignesVidesFeuille(Feuille As Worksheet) Dim ligne As Long For ligne = Feuille.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1 If Feuille.Rows(ligne & ":" & ligne).Cells.SpecialCells(xlCellTypeBlanks).Count = Feuille.UsedRange.Columns.Count Then _ Feuille.Rows(ligne & ":" & ligne).Delete Next ligne Debug.Print Feuil2.UsedRange.Columns.Count End Sub
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#3 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: octobre 2008
Localisation: Afrique du Sud
Âge: 22
Messages: 22
|
J'ai integre ca a mon code mais j'obtient une erreur 91 comme quoi "Object variable or With block variable non set"
Pourtant tout est deja declare. Voila ce que donne le code si vous pouvez me dire ce qui cloche. Code :
' Entries : strBook <- Book path. ' strSheet <- Name of the sheet to delete. Function UpdatePrepare( _ ByVal strBook As String, _ ByVal strSheet As String) Dim xlApp As Excel.Application Dim wbk As Excel.Workbook Dim Feuille As Worksheet Dim PlageSource As Range ' définit la plage source dans les feuilles qui seront transférées Dim CelluleCible As Range ' définit la première cellule en A de la feuille 1 disponible Dim ligne As Long ' Open the book Set xlApp = CreateObject("Excel.Application") Set wbk = xlApp.Workbooks.Open(strBook) ' Desactivate Excel messages xlApp.DisplayAlerts = False For Each Feuille In Worksheets If Feuille.Name <> "A" Then Set CelluleCible = Worksheets("A").Cells(Rows.Count, 1).End(xlUp)(2) Feuille.Rows("1:3").Delete Set PlageSource = Feuille.Range("a1:ap" & Feuille.Cells(Rows.Count, 1).End(xlUp).Row) PlageSource.Copy Destination:=CelluleCible End If Next Feuille For ligne = Feuille.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1 If Feuille.Rows(ligne & ":" & ligne).Cells.SpecialCells(xlCellTypeBlanks).Count = Feuille.UsedRange.Columns.Count Then _ Feuille.Rows(ligne & ":" & ligne).Delete Next ligne Debug.Print Feuil2.UsedRange.Columns.Count Worksheets("B-C").Delete Worksheets("A").Rows("1:2").Delete Worksheets("A").Columns("g").Delete wbk.Close True ' Close Excel xlApp.Quit Set wbk = Nothing Set xlApp = Nothing End Function Merci beaucoup |
|
|
|
|
|
#4 (permalink) |
![]() |
Désolé... J'ai laissé trainé une coquille.
Il faut supprimer la ligne Code :
debug.print feuil2...
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#6 (permalink) |
![]() |
Ben oui.
Tu as pris une partie de mon code, qui utilise un objet nommé Feuille, et tu l'a mis dans ton code, qui utilise aussi un objet feuille. Mais tu as mis ma partie de code en dehors de la boucle for each feuille...... Le code que je t'ai donné est "générique". C'est-à-dire que (en ôtant la ligne Debug.print), il fonctionne hors d'une autre procédure. Ce code EST une procédure complète qui doit recevoir en paramètre un objet Worksheet. Il est donc préférable de laisser mon code tel quel, hors d'une procédure, et d'appeler ma procédure en lui passant l'argument voulu. Dans ta procédure de "consolidation" des feuilles, il est à mon avis plus "perfomant" de l'appeller uniquement sur la feuille de consolidation.
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#7 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: octobre 2008
Localisation: Afrique du Sud
Âge: 22
Messages: 22
|
Desole mais je ne vois pas du tout ce que tu me dis de faire. Comment dois-je faire pour le placer hors de ma procedure? Dois-je creer un autre module?
S'il te plait explique moi car je te le rappel je suis novice en VB!lol Merci d'avance |
|
|
|
|
|
#8 (permalink) |
![]() |
Ma procédure fonctionne un peu à l'instar de ta fonction UpdatePrepare.
Elle a juste besoin d'un paramètre constitué d'un objet Worksheet. Elle peut être appelée par n'importe quel code, par exemple (en adaptant le nome de la feuille Code :
SupprimerLignesVidesFeuille worksheets("MaFeuille") Donc, le plus simple à mon avis, est de mettre la ligne renseignée plus haut tout à la fin de la procédure qui transfère les données sur la feuille de consolidation, en remplaçant simplement "MaFeuille" par le nom de la feuille de consolidation En clair Code :
Function UpdatePrepare( _ ByVal strBook As String, _ ByVal strSheet As String) ... ... SupprimerLignesVidesFeuille worksheets("A") Worksheets("B-C").Delete Worksheets("A").Rows("1:2").Delete Worksheets("A").Columns("g").Delete wbk.Close True ' Close Excel xlApp.Quit Set wbk = Nothing Set xlApp = Nothing End Function
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#9 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: octobre 2008
Localisation: Afrique du Sud
Âge: 22
Messages: 22
|
Ah je suis vert!!!!! sur le principe maintenant ca fonctionne. Le seul hic c'est que je n'ai en fait aucune ligne vide!!!!!
J'ai en fait des points inutiles qui se baladent sur ces lignes qui dans le fichiers de base servaient de separation. Par contre serait-il possible d'adapter ca pour qu'il supprime toute la ligne si la 1ere cellule de la ligne est vide?? Quoi qu'il en soit merci pour tes explications!!!! Chaque jour passe ici m'eclaire un peu plus! |
|
|
|
|
|
#10 (permalink) |
![]() |
Tant mieux si tu progresses...
Dans ma procédure, il y a une ligne qui teste le nombre de cellules vides. Il faut simplement remplacer ce test pour tester si c'est la cellule de la première colonne de la ligne qui est vide ou pas Code :
For ligne = Feuille.Cells.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1 If Feuille.cells(ligne,1)="" Then _ Feuille.Rows(ligne & ":" & ligne).Delete Next ligne
__________________
Pierre Fauconnier -------------------- "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) Pensez au tag ![]() Mon blog sur DVP - Mes petits papiers sur DVP Je ne peux en aucun cas être tenu pour responsable des conséquences de l'utilisation des codes que je fournis dans le cadre des réponses apportées sur les forums, même s'il s'avérait que ces codes sont erronés ou amènent à des dysfonctionnements, de manière manifeste ou non. |
|
|
|
|
|
#11 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: octobre 2008
Localisation: Afrique du Sud
Âge: 22
Messages: 22
|
Merci beaucoup franchement ca marche au poil!!!!!!
Merci pour ton temps Pierre. A tres bientot pour un nouveau topic car le projet que je dois mener surpasse de loin la plupart de mes connaissances en Access et VB!! |
|
|
|
|
![]() |
![]() |
||
Rechercher et supprimer les lignes vides d'un tableau excel via access
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|