Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel


Réponse
 
LinkBack Outils de la discussion
Vieux 15/02/2006, 18h53   #1 (permalink)
JJ
Guest
 
Messages: n/a
Par défaut a l'attention de Pierrejean

Bonsoir PierreJean,
Bonsoir à tous,
je joins la macro que tu as écrite:

Sub test()
fin = Range('F1').End(xlDown).Row
For n = 1 To fin
If Cells(n, 6).Interior.ColorIndex = 3 Then
Rows(n).Copy Destination:=Rows(fin + 1)
Rows(n).Delete
End If
Next n
End Sub

Cette macro copie en bas de tableau puis supprime les lignes dont la colonne 6 est rouge (code 3)

Quand j'ai lancé la macro avec mon fichier, je me suis aperçu qu'elle laissait des lignes avec des cellules rouges éparpillées dans le fichier? (alors que le petit fichier de test fonctionnait)

J'ai compris que l'erreur se produisait quand 2 (ou plus) lignes avec des cellules rouges se 'touchaient', la ligne déplacée et supprimée semble ne pas être testée.

La macro fonctionne parfaitement si les lignes 'rouges' ne se touchent pas (une au dessus ou dessous de l'autre)

Que faudrait il rajouter à la macro pour éviter ces' oublis' ?

merci et bonne soirée
JJ
  Réponse avec citation
ANNONCES
Vieux 15/02/2006, 19h01   #2 (permalink)
XLDnaute Barbatruc
 
Avatar de porcinet82
 
Date d'inscription: mars 2005
Localisation: Issy les Moulineaux
Version Excel : Excel 2003 (PC)
Messages: 3 252
Envoyer un message via MSN à porcinet82
Par défaut Re:a l'attention de Pierrejean

Salut JJ,

Comme tu peux le constater, je ne suis pas pierrejean, mais bon je me permet de te repondre, et je pense qu'il ne m'en voudra pas.

Deux possibilité s'offre a toi, soit tu modifies comme ceci:
Code:
Sub test()
Dim fin As Integer, n As Integer
fin = Range('A1').End(xlDown).Row
For n = 1 To fin Step 1
    If Cells(n, 1).Interior.ColorIndex = 3 Then
        Rows(n).Copy Destination:=Rows(fin + 1)
        Rows(n).Delete
        n = n - 1
    End If
Next n
End Sub
Soit tu mets (et c'est ce qui est mieux) :
Code:
Sub test_v2()
Dim fin As Integer, n As Integer
fin = Range('A1').End(xlDown).Row
For n = fin To 1 Step -1
    If Cells(n, 1).Interior.ColorIndex = 3 Then
        Rows(n).Copy Destination:=Rows(fin + 1)
        Rows(n).Delete
        n = n - 1
    End If
Next n
End Sub
@+
__________________
« Connaître son ignorance est la meilleure part de la connaissance. »
porcinet82 est déconnecté   Réponse avec citation
Vieux 15/02/2006, 19h36   #3 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 5 947
Par défaut Re:a l'attention de Pierrejean

bonsoir JJ bonsoir porcinet

je ne t'en veux absolument pas porcinet

JJ je te propose quelque chose qui n'est pas tres elegant mais qui je crois fonctionne
(je continue a potasser le probleme qui se complique car a chaque effacement de ligne il ya modification des numeros de ligne)

Sub test()
Dim tablo()
Dim tab1 As Integer

fin = Range('F1').End(xlDown).Row
For n = 1 To fin
If Cells(n, 6).Interior.ColorIndex = 3 Then
Rows(n).Copy Destination:=Rows(fin + 1 + tab1)
ReDim Preserve tablo(tab1 + 1)
tablo(tab1 + 1) = n
tab1 = tab1 + 1
End If
Next
b = 1
For n = 1 To tab1
If n = 1 Then
Rows(tablo(n)).Delete
Else
Rows(tablo(n) - b).Delete
b = b + 1
End If
Next

End Sub
pierrejean est déconnecté   Réponse avec citation
Vieux 15/02/2006, 19h39   #4 (permalink)
JJ
Guest
 
Messages: n/a
Par défaut Re:a l'attention de Pierrejean

Merci Porcinet82,
Dans le If Cells c'est 6 car col 6, pour le reste je rajoute donc n=n-1
Pourquoi c'est preferable :
fin to 1 step-1 que 1 To fin step 1 ?
merci
Bonne soirée
  Réponse avec citation
Vieux 15/02/2006, 19h44   #5 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 5 947
Par défaut Re:a l'attention de Pierrejean

veux-tu essayer cela qui a le merite d'etre un peu plus concis

Sub test1()
fin = Range('F1').End(xlDown).Row
For n = fin To 1 Step -1
If Cells(n, 6).Interior.ColorIndex = 3 Then
Rows(n).Copy Destination:=Rows(fin + 1)
Rows(n).Delete
End If
Next n
End Sub
pierrejean est déconnecté   Réponse avec citation
Vieux 15/02/2006, 19h44   #6 (permalink)
XLDnaute Barbatruc
 
Avatar de porcinet82
 
Date d'inscription: mars 2005
Localisation: Issy les Moulineaux
Version Excel : Excel 2003 (PC)
Messages: 3 252
Envoyer un message via MSN à porcinet82
Par défaut Re:a l'attention de Pierrejean

re JJ, salut pierrejean,

Excuse moi JJ, c'est vrai que c'est cells(n,6), c'est que j'ai tester sur la colonne 1, donc j'avais remplacer.

La deuxième solution est préférable car tu pars d'en bas et tu remontes, ce qui est plus logique lorsque tu supprimes des lignes, ca évite de faire un retour dans la boucle.

@+

PS : Pierrejean, tu prends des cours avec Hervé pour les tableau??? Moi je ne me sens pas le courage de m'y mettre, pourtant je pense que ca pourrait m'etre utilise de temps en temps.

Eidtion: je vois qu'on vient de se croiser, ta macro est identique a celle que j'ai proposée ci-dessus :P

Message édité par: porcinet82, à: 15/02/2006 18:47
__________________
« Connaître son ignorance est la meilleure part de la connaissance. »
porcinet82 est déconnecté   Réponse avec citation
Vieux 15/02/2006, 19h50   #7 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 5 947
Par défaut Re:a l'attention de Pierrejean

@ porcinet

oui j'essaie d'utiliser les tableaux mais pour ce qui est de l'elegance je me traine loin derriere Herve (slurp sur les bottes)

chez moi ton second code a laissé une ligne et je n'ais pas testé le premier

j'ais bien sur adopté le step -1

edit:

je viens de tester ton premier code et j'ais du faire usage du ctrl pause

Message édité par: pierrejean, à: 15/02/2006 18:54
pierrejean est déconnecté   Réponse avec citation
Vieux 15/02/2006, 20h14   #8 (permalink)
JJ
Guest
 
Messages: n/a
Par défaut Re:a l'attention de Pierrejean

Bonsoir PierreJean
Je ne vois pas de difference entre cette macro et la première que tu as faite?
Dois je rajouter n=n-1 ou utiliser celle qui est moins élégante... ??
Merci a vous 2 et bonne soirée
JJ
  Réponse avec citation
Vieux 15/02/2006, 20h40   #9 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 5 947
Par défaut Re:a l'attention de Pierrejean

la difference est dans le fait que l'on attaque la feuille par le bas et lorsque l'on supprime une ligne ce sont celles qui ont deja été traitées qui se decalent
j'ais mis

for fin to 1 step -1
au lieu de
for 1 to fin

teste bien sur des copies de ton fichier
pierrejean est déconnecté   Réponse avec citation
Vieux 15/02/2006, 22h16   #10 (permalink)
JJ
Guest
 
Messages: n/a
Par défaut Re:a l'attention de Pierrejean

Bonsoir , petite question supplémentaire, car j'ai quelques lignes vierges dans mon tableau que je ne veux pas supprimer, puis je écrire ceci dans ta macro:

Sub test1()
fin = Range('F1').End(xlDown).Row
For n = fin To 1 Step -1
If Cells(n, 6).Interior.ColorIndex = 3 Then
Rows(n).Copy Destination:=Rows(fin + 1)
Rows(n).Delete
n = n - 1
Else
If Cells(n, 6).Value = ' ' Then
n = n + 1
End If
Next n
End Sub

Merci
JJ
  Réponse avec citation
Vieux 15/02/2006, 22h56   #11 (permalink)
Super Moderator
 
Avatar de PascalXLD
 
Date d'inscription: février 2005
Localisation: Rennes
Version Excel : Excel 2000 (PC)
Messages: 8 348
Par défaut Re:a l'attention de Pierrejean

Bonjour

Je t'invite JJ, comme Gerard l'a déjà fait je crois, à lire la charte et à l'appliquer

En effet on ne fait pas une question en apostrophant un membre du forum et de plus le titre doit être explicite donc on fait comment pour une recherche avec un titre comme le tien
__________________
Pascal(Visitez mon Blog Photo)

Vous pouvez devenir "Supporter XLD", plus de renseignements ICI
PascalXLD est déconnecté   Réponse avec citation
Vieux 16/02/2006, 09h56   #12 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 5 947
Par défaut Re:a l'attention de Pierrejean

precise s'il te plait
en effet en principe on ne supprime pas de ligne (elles sont transférées en bas de tableau)
ces lignes (de couleur) doivent rester en place si elles sont vides ??

ps: je viens de regaerder un peu
en fait une cellule rouge et vide seme la panique
en effet
fin = Range('F1').End(xlDown).Row
donne le numero de ligne de la derniere cellule vide de la colonne F

Pour le moment je ne vois pas comment traiter le problème

Message édité par: pierrejean, à: 16/02/2006 10:02
pierrejean est déconnecté   Réponse avec citation
Vieux 16/02/2006, 11h26   #13 (permalink)
XLDnaute Barbatruc
 
Avatar de porcinet82
 
Date d'inscription: mars 2005
Localisation: Issy les Moulineaux
Version Excel : Excel 2003 (PC)
Messages: 3 252
Envoyer un message via MSN à porcinet82
Par défaut Re:a l'attention de Pierrejean

Bonjou a tous,

JJ, je pense qu'avec un petit exemple de ton fichir, ce serai plus clair. En effet, tu dis avoir des lignes vides, mais sont-elles colorés en rouges?

Comme la deja dis pierrejean, donne plus d'informations. Lorsque l'on post, il faut penser que les autres ne connaissent pas le problème, il faut donc se mettre a leur place et donner le maximum d'info, a noter egalement qu'en general, un exemple vaut mieux qu'un long discour.

En attendant plus d'information,

@+
__________________
« Connaître son ignorance est la meilleure part de la connaissance. »
porcinet82 est déconnecté   Réponse avec citation
Vieux 16/02/2006, 12h51   #14 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 5 947
Par défaut Re:a l'attention de Pierrejean

essaie ce fichier [file name=pourJJ.zip size=7128]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/pourJJ.zip[/file]
Fichiers attachés
Type de fichier : zip pourJJ.zip (7,0 Ko, 0 affichages)
pierrejean est déconnecté   Réponse avec citation
Vieux 16/02/2006, 13h59   #15 (permalink)
XLDnaute Barbatruc
 
Avatar de porcinet82
 
Date d'inscription: mars 2005
Localisation: Issy les Moulineaux
Version Excel : Excel 2003 (PC)
Messages: 3 252
Envoyer un message via MSN à porcinet82
Par défaut Re:a l'attention de Pierrejean

re,

Pierrejean, je ne comprend pas tres bien à quoi sert le MsgBox (fin). Sinon pour le reste du code je pensais à quelque chose de ce genre, mais je preferai avoir un exemple afin d'adapter directement.

@+
__________________
« Connaître son ignorance est la meilleure part de la connaissance. »
porcinet82 est déconnecté   Réponse avec citation
ANNONCES
Réponse

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +2. Il est actuellement 15h24.


(C) 2006 Excel Downloads