Ouvrir fichier excel puis supprimer ligne

tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   -  
 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

43 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

Problème central : une macro doit ouvrir 130 fichiers Excel et supprimer les lignes dont la valeur en colonne C dépasse 3300.
Les solutions recommandent d'ouvrir chaque classeur via Workbooks.Open, d’identifier la dernière ligne de la colonne C et d’itérer de bas en haut pour supprimer les lignes dont la valeur dépasse 3300.
Certains points abordés incluent la correction du chemin et du nom de la feuille, et la conversion des données en nombres lorsque la colonne C est au format texte.
D'autres échanges suggèrent d’adapter le type de délimiteurs et le chemin exact, et recommandent d’enregistrer et fermer chaque fichier après suppression pour éviter les pertes.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Après avoir ouvert le fichier texte...
    Il est afficher convenablement ? chaque donnée dans une colonne ?
    A+
    0
  2. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Et dans quel colonne tu peu avoir 3300 ?
    0
  4. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. 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
  7. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    Ç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
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  9. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  11. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  12. 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
    1. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  13. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  14. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  15. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Tu pourrais déposer un exemple du classeur 1DAP.tif.xls sur CiJoint.fr et mettre le lien dans un poste suivant ?
    0
  16. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    Voila le lien pour le fichier :

    http://www.cijoint.fr/cjlink.php?file=cj201104/cijbwBRu7R.xls
    0
  17. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  18. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  19. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Grrr, autant pour moi... faut un S à WorkBook
    Workbooks.Open Chemin & i & "DAP.tif.xls" 
    A+
    0
  20. tius38 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  21. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  • 1
  • 2
  • 3