Object requis sur suppression de ligne à partir d'une macro access sur une feuil
alstomman
Messages postés7Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention30 novembre 2007
-
26 nov. 2007 à 16:49
alstomman
Messages postés7Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention30 novembre 2007
-
30 nov. 2007 à 15:47
Bonjour, je souhaiterai une aide sur mon codage en VBA sur access.
Mon but est grace à un bouton commande, ouvrir la feuille d'un fichier XLS et supprimer des lignes.
Suivant ma macro ci-dessous access m'affiche Object requis:
"ligne_eff" est la 1er ligne à supprimer!!!
Dim xlApp, xlSheet, xlBook As Object
Dim ligne_eff As Integer
'J'initialise mes variables
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("D:\temp\TERMES.xls")
xlBook.Application.Visible = True
'Accède à la feuille
Set xlSheet = xlBook.Sheets("Infos_Termes")
'sélectionner la 1er ligne de l'équipement à éliminer
xlSheet.Rows(ligne_eff & ":" & ligne_eff).select
Selection.Range(Selection, Selection.End(xlDown)).Select "BUG=Object requis"
'supprimer les lignes de l'équipement
xlSheet.Selection.Delete Shift:=xlUp
'Code de fermeture
xlBook.Save 'Saugarder la feuille excel
xlApp.Quit 'fermer excel
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "Fin de la procédure. :)"
A voir également:
Object requis sur suppression de ligne à partir d'une macro access sur une feuil
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 27 nov. 2007 à 00:31
Déjà ici il y a un problème.
Dim xlApp, xlSheet, xlBook As Object
Seul xlBook est déclaré en Object, les 2 autres sont Variant
Dim xlApp As Object, xlSheet As Object, xlBook As Object
Puis ici,
Tu déclares une variable ligne_eff (à 0 par défaut) mais tu ne lui donnes pas de valeur, donc encore 0 par défaut
xlSheet.Rows(ligne_eff & ":" & ligne_eff).select
Les lignes ou colonnes 0 n'existent pas sous Excel
Puis si tu sélectionnes comme le code l'indique, il n'est pas nécessaire de le resélectionner
xlSheet.Rows(ligne_eff & ":" & ligne_eff).select <strike>Selection.Range(Selection, Selection.End(xlDown)).Select</strike>
alstomman
Messages postés7Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention30 novembre 2007 27 nov. 2007 à 08:40
Merci pour tes explications MPi.
Je dois avouer que cela m'aidé.
Par contre, après la sélection de ma 1ère ligne à effacer, faisant référence à :
xlSheet.Rows(ligne_eff & ":" & ligne_eff).select,
je voudrais sélectionner les lignes suivantes, par la même fonction qu'un CTRL+ALT+flèche vers le bas quand tu es sur la feuille excel, d'ou l'expression <strike>Selection.Range(Selection, Selection.End(xlDown)).Select.
</strike>Je penne sur cette sélection de ligne pour pouvoir ensuite effacer la sélection complète.
alstomman
Messages postés7Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention30 novembre 2007 27 nov. 2007 à 11:02
Merci pour tes explications MPi.
Je dois avouer que cela m'aidé.
Par contre, après la sélection de ma 1ère ligne à effacer, faisant référence à :
xlSheet.Rows(ligne_eff & ":" & ligne_eff).select,
je voudrais sélectionner les lignes suivantes, par la même fonction qu'un CTRL+ALT+flèche vers le bas quand tu es sur la feuille excel, d'ou l'expression <strike>Selection.Range(Selection, Selection.End(xlDown)).Select.
</strike>Je penne sur cette sélection de ligne pour pouvoir ensuite effacer la sélection complète.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 27 nov. 2007 à 23:27
Je ne sais pas comment ton fichier est monté...
Mais est-ce que c'est possible pour toi de filtrer une colonne pour avoir seulement les données à effacer ?
Parce que si tu sélectionnes une première ligne puis que tu fais Ctrl-Shift-Flèche bas, toutes les lignes seront sélectionnées puis supprimées. Peut-être que certaines lignes ne le devraient pas ??? C'est pourquoi, sans voir ce que contient le fichier, c'est assez difficile de répondre correctement. Mais peut-être aussi que c'est vraiment ce que tu veux...
Et effectivement, j'avais mal lu la partie du Ctrl-Shift-Flèche bas...
J'ai plutôt l'habitude de déterminer la dernière ligne pour la sélectionner dans le Range comme ceci
DerniereLigneEcrite = Cells(Rows.Count, "A").End(xlUp).Row
Rows(2 & ":" & DerniereLigneEcrite ).select
MPi²
Vous n’avez pas trouvé la réponse que vous recherchez ?
alstomman
Messages postés7Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention30 novembre 2007 28 nov. 2007 à 08:33
Salut MPi,
Malheureusement, j'ai 2 erreurs:
1ère erreur avec: "erreur de compilation: sub ou fonction non définie"
Function effacement()
Dim DerniereLigne As Integer
'J'initialise mes variables
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("D:\temp\TERMES.xls")
xlBook.Application.Visible = True
'Accède à la feuille
Set xlSheet = xlBook.Sheets("Infos_Termes")
DerniereLigne = Cells(Rows.Count, "A").End(xlUp).Row
Rows(2 & ":" & DerniereLigne).select
'Code de fermeture
xlBook.Save 'Saugarder la feuille excel
xlApp.Quit 'fermer excel
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
MsgBox "Fin de la procédure. " & DerniereLigne
End Function
ensuite, j'ai fait des modif:
2è erreur: "objet requis"
DerniereLigne = xlSheet.Cells(Rows.Count, "A").End(xlUp).Row
xlSheet.Rows(2 & ":" & DerniereLigne).select
J'aimerai qu'ensemble nous trouvions la solution de ce END(xlUp).
J'ai essayé aussi END(xldown)....rien.
Sinon, j'ai trouvé une autre solution, plus barbare, j'ai rajouté une colonne dans ma table que j'avais copié, grâce, à cette nouvelle colonne, j'ai intégré le nombre de lignes que j'avais copié, ainsi je récupére sur la feuille excel ce chiffre et je l'utilise pour la supression de mes lignes.
J'attend avec impatience tes commentaires sur QUOI porte mes erreurs .
alstomman
Messages postés7Date d'inscriptionmardi 20 novembre 2007StatutMembreDernière intervention30 novembre 2007 30 nov. 2007 à 15:47
Bonjour MPI et Pynuch88,
J'ai essayé vos deux méthodes et se fut un echec.
Pour MPi, j'ai modifié DerniereLigne en LONG et rien y fait il me donne toujours les mêmes erreurs sur la ligne ou il calcule la dernière ligne
DerniereLigne = xlSheet.Cells(Rows.Count, "A").End(xlUp).Row
mes variables-objets xlApp, xlBook, xlSheet je les ai déclaré au début de ma macro en Public as Object .
Est ce que la version de mon access peut influencer sur ce codage.
Description de mon access :Microsoft access 2000 et j'utilise un excel 2000.
Pour pynuch, c'est pareille pas de bonne nouvelle!!!
J'ai trouvé une autre solution plus barbare, mais bon ça marche.
PAR CONTRE COMME JE SUIS TéTU, JE VOUDRAIS BIEN QUE L'ON TROUVE LA SOLUTION!!!!! Rrrrrrrrrrrr!!!
Merci de m'aider encore!!
J'attend impatiencement vos réponses!!