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

tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
14 avril 2011 à 15:24
Oui oui c'est normal, avant de faire les 130 je là test sur un petit nombre.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
14 avril 2011 à 15:58
Reste un problème sur tes fichiers, il y a un point de millier, il faut probablement le supprimer AVANT.
Sinon ça efface tout
C'est ça le problème ?
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
14 avril 2011 à 16:07
Oui il faut le changer en virgule, si je le fais pas effectivement ça me supprime tout les fichiers (en lançant une macro individuel sans l'ouverture automatique)

J'ai la formule, elle fonctionne :

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


Si on regarde elle remplace un point par un point mais j'ai chercher sur internet et pour que ça marche il fallait mettre comme séparateur décimal une virgule et remplacer un point par un point,
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
14 avril 2011 à 16:37
autre constatation..
Tes fichiers ont le séparateur de décimale "." (point)
Si c'est le cas, si je prend ton modèle (le 5) il n'y na aucune donnée supérieure à 3300
Tu en dis...
0

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

Posez votre question
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
14 avril 2011 à 16:48
Oui dans le 5 il y a aucune valeur supérieure à 3300, c'est vrai

Ici il y en a un avec, pour tester la macro c'est mieux :

http://www.cijoint.fr/cjlink.php?file=cj201104/cijwLUi0Oa.xls
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
14 avril 2011 à 23:20
je pense que ça y est...
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"
        Columns("C:C").NumberFormat = "@"
        For Lig = ActiveWorkbook.ActiveSheet.Range("C65536").End(xlUp).Row To 2 Step -1
            Cells(Lig, "C") = Replace(Cells(Lig, "C"), ".", ",")
            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
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
15 avril 2011 à 09:08
Malheureusement non lol. Je pense que je dois avoir un problème avec mes fichiers c'est pas possible que rien ne marche.

Quand je la lance, elle fait tout buggé, je suis obligé de fermer via le gestionnaire de tache et si je là fait manuellement pas par pas, ça ne bug pas mais elle ne change rien.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 avril 2011 à 12:21
Tes fichiers ont des formats un peu... exotique, j'ai du recourir à quelques astuces.
J'ai testé sur tes deux classeurs et ça fonctionne parfaitement.
Fait un essais..
Lancer en pas à pas,

Tu met l'éditeur sur un côté de l'écran et Excel de l'autre de façon à voir les deux fenêtre simultanément.
Mettre le curseur DANS la macro et taper F8, ensuite chaque fois que tu tape F8 l'instruction suivante est exécutée.
contrôler le résultat sur Excel après chaque commande
MAIS JE PENSE A UNE CHOSE... OU TU MET LE CODE ???
Il DOIT être dans un module général par exemple Module1,
>> Insertion >> Module, c'est là que tu dois mettre le code.
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
15 avril 2011 à 13:03
Effectivement ça marche nickel :), merci beaucoup !!!

Mais je viens de m'apercevoir d'un autre petit truc, aprés avoir fait cela je fais un histogramme et il me dit "la plage d'entrée ne peut contenir des données non numériques".
J'ai regardé et effectivement les données de la colonne C sont au format texte. On peut les convertir en nombre manuellement. Mais peut-on le faire avec une macro ? Car aprés sur mes 130 fichiers je fais l"histogramme grâce à une macro que j'ai déjà et marche sans problème.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 avril 2011 à 15:06
Mais oui,
Ajoute après la ligne..
    Next Lig
    Columns("C:C").NumberFormat = "0.000"


j'ai plus les fichiers préparés, essaye voir ?
si ça ne va pas tu dis je reprendrais
A+
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
15 avril 2011 à 15:12
Nan ça marche pas, mais il n'y a pas de message d'erreur (en automatique ou étape par étape)
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 avril 2011 à 15:32
Je crois comprendre ce que tu veux dire,
toutes tes données doivent être convertie ? y compris la colonne D avec décimale et A,B,E,F en entier ?
Si oui, ça n'a plus rien à voir avec ta demande première mais ça peu se résoudre assez facilement.
Tu dis.
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
15 avril 2011 à 15:52
Non non les autres colonnes je m'en fou, ce qui m'intéresse c'est que la colonne C pour faire mon histogramme. Et pour faire l'histogramme il faut que les données soient sous forme de nombre et non de texte.
Et aprés la macro qui traite la colonne C, toutes les valeurs de celle-ci sont au format texte.

Donc on peut passer toutes les colonnes au format nombre si c'est plus facile.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
Modifié par lermite222 le 15/04/2011 à 16:04
tu n'a pas compris la question, ...
Ton histogramme, il se sert des 4 colonnes, si oui.. toutes les données de tes fichiers sont en texte faut donc les transformer.
Si non, la colonne C est transformée en nombre avec la ligne que je t'ai communiquer.
Bien entendu faut repasser le fichier par la macro, même s'il n'y a plus de données à supprimer.
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
15 avril 2011 à 16:24
Non je me sers que de la colonne C. Avec la macro suivante je supprime les colonnes D,E,F et je rentre ma plage des classes en colonne F.
Je viens d'essayer de faire l'histogramme aprés être passé avec la macro pour supprimer les lignes et changer la colonne C en nombre mais ça ne marche pas. Il me dit que la plage d'entrée ne peut contenir des valeurs non numériques.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
Modifié par lermite222 le 15/04/2011 à 16:50
Oui, là t'est un peu dur à la détente... :-)
Je viens de te dire que les colonnes A,B,E,F sont en texte.... F en TEXTE
Donc ça peu pas marcher, et ça marche pas non plus en manuel.
change la ligne..
Columns("C:C").NumberFormat = "0.000"

par
Columns("C:F").NumberFormat = "0.000"

Et REFLECHIT UN PEU quand même... :-))))
C'est pas parce qu'ont t'aide que tu dois mettre des oeillères.
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
15 avril 2011 à 16:57
Le fait est que le bug provient pas de la colonne F mais de la colonne C :).

Colonne C, plage d'entrée
Colonne F plage des classes
Et le bug c'est "la plage d'entrée ne peut contenir des données non numériques."

Je viens d'essayer juste en convertissant la colonne C en nombre et l'histogramme marche.

Je réfléchis je réfléchis ^^.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
15 avril 2011 à 17:15
la colonne C... EST NUMÉRIQUE.
Montre ton code qui affiche l'histogramme
0
tius38 Messages postés 22 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 19 avril 2011
18 avril 2011 à 09:28
Bonjour bonjour,

Voila le code :

Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range("$C2:$C100"), "", _
ActiveSheet.Range("$F$2:$F$19"), False, False, True, False


F2-F19 c'est ma plage des classes
C2-C100 c'est ma plage d'entrée. J'ai mis jusqu'à 100 parce que je ne sais pas comment lui dire de sélectionner que les cases remplis en colonne C mais bon comme ça ça marche.
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 193
19 avril 2011 à 11:06
Probable que la macro supporte pas les cellules vides, essaye avec...
Dim DerLig As Long
    DerLig = [C65536].End(xlUp).Row
    Application.Run "ATPVBAEN.XLA!Histogram", ActiveSheet.Range("$C2:$C" & DerLig), "", _
    ActiveSheet.Range("$F$2:$F$19"), False, False, True, False
A+
0