Ouvrir fichier excel puis supprimer ligne

Fermé
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011 - 11 avril 2011 à 10:35
 Cindy - 20 avril 2012 à 12:07
Bonjour,

J'ai un petit soucis concernant une macro que j'essaie de réaliser pour le boulot. Je suis novice dans ce domaine.

Je dois à l'aide de la macro ouvrir mon fichier excel puis supprimer toutes les lignes qui contiennent une valeur supérieur à 3300 en colonne C.

Voila ce que j'ai :

J'ouvre mon fichier excel suivant son nom :

Sub macro()

For i = 1 To 130
feuille = Format(i, 0) & "DAP.tif.xls"

ChDir "C:\Documents and Settings\mc225714\Bureau\Supp3300"
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\mc225714\Bureau\Supp3300\" & Format(i, 0) & "DAP.tif.xls", Origin:= _
xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _
False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _
, Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers:=True


Et la je lui dis de supprimer les lignes avec une valeur supérieur à 3300 mais il manque quelque chose je pense. J'ai récupérer ça sur internet mais il me dit "erreur 424 objet requis"

Dim cel As Range
For Each cel In feuille
If Val(cel.Value) >= 3300 Then
cel.EntireRow.Delete
End If
Next cel
Next i
End Sub


Merci de votre aide

Bonne journée

A voir également:

43 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 avril 2011 à 15:56
Bonjour,
Après avoir ouvert le fichier texte...
Il est afficher convenablement ? chaque donnée dans une colonne ?
A+
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
11 avril 2011 à 16:22
Oui , dans chaque colonne (A,B,C,D et E), j'ai des valeurs à partir de la ligne 2 et le nom des colonnes en ligne 1
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
11 avril 2011 à 19:24
Et dans quel colonne tu peu avoir 3300 ?
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
12 avril 2011 à 08:47
Dans la colonne C. Si la valeur est supérieure à 3300, ça répond pas à mes conditions donc il faut que je supprime la ligne pour pouvoir faire mes calculs ensuite.
0

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

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 avril 2011 à 10:56
Une tite macro qui va faire ça..
Sub SupprimerLignes()
Dim Lig As Long
    For Lig = Range("C65536").End(xlUp).Row To 2 Step -1
        If Cells(Lig, "C").Value > 3300 Then
            Rows(Lig).Delete
            Lig = Lig + 1
        End If
    Next Lig
End Sub
A+
0
Merci ça fonctionne bien . Étant novice en VBA,, c'est super de trouver des gens qui partagent leurs connaissances et en plus avec des choses simples et compréhensibles.
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
12 avril 2011 à 14:04
Ça marche nickel :). Mais par contre j'arrive pas à combiner les deux. Ouvrir mes fichiers et ensuite supprimer les lignes, c'est bizarre.

Merci en tout cas, bonne journée
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 12/04/2011 à 15:14
Tu ouvre 130 feuille ou tu met tes 130 fichiers dans une seule feuille??
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
12 avril 2011 à 16:25
Nan j'ai 130 fichiers excels et dans chacun d'eux il faut que j'enlève les lignes qui ont une valeurs supérieur à 3300 en colonne C. Donc dans la macro j'ouvre les fichiers, je supprime les lignes si il y en a et ainsi de suite pour les 130 fichiers.

Voila la macro mais elle marche pas en l'état. Elle ouvre le fichier et c'est tout. Par contre si je demande pas d'ouvrir le fichier et que je le fais de maniere individuelle pour les 130, la partie que tu m'as donné pour supprimer la ligne fonctionne.

Sub macro()

For i = 1 To 130
feuille = Format(i, 0) & "DAP.tif.xls"

ChDir "C:\Documents and Settings\mc225714\Bureau\Supp3300"
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\mc225714\Bureau\Supp3300\" & Format(i, 0) & "DAP.tif.xls", Origin:= _
xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _
False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True


Cells.Replace What:=".", Replacement:=".", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Next i

Dim Lig As Long
For Lig = Range("C65536").End(xlUp).Row To 2 Step -1
If Cells(Lig, "C").Value > 3300 Then
Rows(Lig).Delete
Lig = Lig + 1
End If

Next Lig

End Sub


Il doit manquer un truc entre l'ouverture du fichier et la suite
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 13/04/2011 à 13:18
Tu n'a pas répondu à ma question.
1°) Tu ouvre le 1er fichier...
2°) tu ouvre le 2ém.. Où se trouve-t-il ? sur une autre page ou en dessous de l'autre ? (d'après ta macro il écrase le précédant.)
En fait, si tu veux mettre tes 130 fichiers l'un en dessous de l'autre ta macro n'est pas bonne.
Explique..
EDIT :
En relisant un de tes poste, ce sont des fichier Excel que tu ouvre... alors POURQUOI LES OUVRIR EN TEXTE ????

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
13 avril 2011 à 15:17
1) j'ouvre mon premier fichier excel
2) je supprime mes lignes
3) (qui est pas encore sur la macro mais j'ai le code il marche) il enregistre mon fichier et le ferme
4) j'ouvre mon deuxième fichier exel
5)...

Ben en fait pour avoir la formule d'ouverture automatique, j'ai fais "nouvelle macro" et ça a enregistré ce que je faisais et j'ai récupérer ça en changeant juste un truc pour ouvrir mes fichiers les uns après les autres suivant leur nom. Je sais pas pourquoi ils s'ouvrent en texte.
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
13 avril 2011 à 15:23
Bonjour,

Ta fin de boucle (next i) n'est pas au bon endroit, tu dois inclure ta boucle d'effecement dedant.

donc

for i ....

for Lig ...

next Lig

next i
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
13 avril 2011 à 15:41
Oui oui effectivement, j'ai du faire un test pour voir si il ouvrait tout mes fichiers d'affilé sinon il se trouve bien à la fin
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
13 avril 2011 à 15:29
Sub SuppLigne()
Dim i As Integer, Lig As Long
Dim Chemin As String
    Chemin = "LeChemin\Complet\DesFichier\"
    For i = 1 To 130
        Workbook.Open Chemin & i & "DAP.tif.xls"
        For Lig = ActiveWorkbook.Sheets("Feuil1").Range("C65536").End(xlUp).Row To 2 Step -1
            If Cells(Lig, "C").Value > 3300 Then
                Rows(Lig).Delete
                Lig = Lig + 1
            End If
        Next Lig
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    Next i
End Sub

Il faut adapter le chemin des fichiers
Aussi le nom de la feuille où sont les données (ici "Feuil1").
J'ai supposé que tes classeurs se nommaient.. 1DAP.tif.xls.. 2DAP.tif.xls... etc.
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
13 avril 2011 à 15:49
Oui tu as raison mes classeurs sont nommés 1DAP.tif.xls ...etc

Sub SuppLigne()


Dim i As Integer, Lig As Long
Dim Chemin As String
Chemin = "C:\Documents and Settings\mc225714\Bureau\Supp3300\"
For i = 1 To 130
Workbook.Open Chemin & i & "DAP.tif.xls"
For Lig = ActiveWorkbook.Sheets("feuil1").Range("C65536").End(xlUp).Row To 2 Step -1
If Cells(Lig, "C").Value > 3300 Then
Rows(Lig).Delete
Lig = Lig + 1
End If
Next Lig
ActiveWorkbook.Save
ActiveWorkbook.Close
Next i
End Sub


La ligne Workbook.Open Chemin & i & "DAP.tif.xls" ne fonctionne pas. Ca me met erreur 424 Objet requis.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 avril 2011 à 09:34
Tu pourrais déposer un exemple du classeur 1DAP.tif.xls sur CiJoint.fr et mettre le lien dans un poste suivant ?
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
14 avril 2011 à 13:43
Voila le lien pour le fichier :

http://www.cijoint.fr/cjlink.php?file=cj201104/cijbwBRu7R.xls
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 avril 2011 à 13:54
Change la ligne FOR.. par
For Lig = ActiveWorkbook.ActiveSheet.Range("C65536").End(xlUp).Row To 2 Step -1

Pour l'erreur..
Fait une autre macro avec..
Sub TestChemin()
Dim Chemin As String
    Chemin = Dir("C:\Documents and Settings\mc225714\Bureau\Supp3300\")
    MsgBox Chemin
End Sub

si tu n'a pas d'erreur dans le chemin le MsgBox devrait t'affiche le chemin, sinon ce serra vide
tu dis
A+
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
14 avril 2011 à 14:04
Une fois la macro lancé, à la fin ça m'ouvre une page excel vide avec une boite de dialogue ou il y a écrit "1DAP.tif.xls" avec OK aprés.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 avril 2011 à 14:51
Grrr, autant pour moi... faut un S à WorkBook
Workbooks.Open Chemin & i & "DAP.tif.xls" 
A+
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
14 avril 2011 à 15:12
Sub SuppLigne()


Dim i As Integer, Lig As Long
Dim Chemin As String
Chemin = "C:\Documents and Settings\mc225714\Bureau\Supp3300\"
For i = 1 To 2
Workbooks.Open Chemin & i & "DAP.tif.xls"
For Lig = ActiveWorkbook.ActiveSheet.Range("C65536").End(xlUp).Row To 2 Step -1
If Cells(Lig, "C").Value > 3300 Then
Rows(Lig).Delete
Lig = Lig + 1
End If
Next Lig
ActiveWorkbook.Save
ActiveWorkbook.Close
Next i
End Sub

Il n'y a plus de bug, elle va jusqu'au bout mais ça ne me supprime pas les valeurs supérieures à 3300. J'y comprends plus rien :)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 14/04/2011 à 15:23
Euuuh, tu a mis For i = 1 To 2 donc ça ne traite que les deux premier fichiers
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0