Ouvrir fichier excel puis supprimer ligne

tius38 Messages postés 23 Statut Membre -  
 Cindy -
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 9042 Statut Contributeur 1 191
 
Bonjour,
Après avoir ouvert le fichier texte...
Il est afficher convenablement ? chaque donnée dans une colonne ?
A+
0
tius38 Messages postés 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
Et dans quel colonne tu peu avoir 3300 ?
0
tius38 Messages postés 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
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
Cindy
 
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 23 Statut Membre
 
Ç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 9042 Statut Contributeur 1 191
 
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 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
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 23 Statut Membre
 
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 817 Statut Membre 161
 
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 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
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 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
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 23 Statut Membre
 
Voila le lien pour le fichier :

http://www.cijoint.fr/cjlink.php?file=cj201104/cijbwBRu7R.xls
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
Grrr, autant pour moi... faut un S à WorkBook
Workbooks.Open Chemin & i & "DAP.tif.xls" 
A+
0
tius38 Messages postés 23 Statut Membre
 
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 9042 Statut Contributeur 1 191
 
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