Comment puis je demander à Excel que dés qu'il trouve dans la colonne A une
cellule comportant le mot "rapport", qu'il me deplace cette cellule d'une
case sur sa droite.
Merci, pour cette explication jacouille, ca deviens plus claire
Manu
"Jacquouille" a écrit dans le message de news: 4d7f60c5$0$14244$
Bonjour Manu Pourquoi commencer par le bas?
Supposons que tu analyses une colonne pour y trouver des doublons et que tu veuilles les supprimer. Toutes les cel de A1:A10 contiennent la même valeur. Au moyen d'une boucle, tu commences: For each c in range ("A1:A10") If c="idem" then Else Rows(c).Delete du coup, tu supprimes la ligne 1. Donc, c'est la ligne 2 qui devient 1, entrainant toutes les autres avec elle pour faire place au fond du pannier à la ligne1 ( car on ne supprime rien, on efface et on revoie à la 65536)ligne) Tout fier d'avoir bien travaillé, ton PC passe donc très logiquement à la ligne2. mais, ô cata, la 2 était devenue1 qui a déjà été analysée, donc la ligne1 (ex2) contiendra toujours "idem". C'est donc pour "contrecarrer" cette démarche on ne peut plus logique que nos "grosses têtes" commencent par le bas. dans ce cas-ci, Isabelle commence à la dernière ligne occupée. (Ce que nous appelions au début DelL, mais qui est encore plus concis comme Isabelle l'écrit) De cette manière, A10="idem"----> on supprime--> on s'en fout car c'est A11 qui devient A10. Boulot fait, donc on passe à A9, car il y a "le petit plus: step-1). A9 se fait analyser,.......
Voici donc pourquoi il faut répondre "au-dessus" pour les messages, mais il faut commencer un boucle de destruction "par le bas".
ouf... -) pS pour ce qui est du temps mis, analyser une ligne, qu'elle soit la unième ou la dixième, c'est kif-kif.
Jacquouille
" Le vin est au repas ce que le parfum est à la femme." "Manu" a écrit dans le message de groupe de discussion : 4d7f5022$0$5424$
Pour quelle raison Isabelle ? pour qu'il soit plus rapide ? de cette facon, le code ne fonctionne que quand il trouve quelque chose en partant du bas, et ca lui evite de perdre + de temps si on partais de haut en bas ?
Manu
"isabelle" a écrit dans le message de news: ilnitp$t1t$
bonjour Manu,
lorsqu'il y a insertion ou suppression de lignes dans une boucle, il vaut mieux commencer par le bas et remonter
Sub Macro2() Dim i As Integer For i = Range("A65536").End(xlUp).Row To 1 Step -1 If Range("A" & i) Like "*Rapport*" Then Range("B" & i) = Range("A" & i) Range("A" & i) = "" Rows(i + 1).Insert shift:=xlDown End If Next End Sub
isabelle
Merci, pour cette explication jacouille, ca deviens plus claire
Manu
"Jacquouille" <j.thiernesse@skynet.be> a écrit dans le message de news:
4d7f60c5$0$14244$ba620e4c@news.skynet.be...
Bonjour Manu
Pourquoi commencer par le bas?
Supposons que tu analyses une colonne pour y trouver des doublons et que
tu veuilles les supprimer.
Toutes les cel de A1:A10 contiennent la même valeur.
Au moyen d'une boucle, tu commences:
For each c in range ("A1:A10")
If c="idem" then Else Rows(c).Delete
du coup, tu supprimes la ligne 1.
Donc, c'est la ligne 2 qui devient 1, entrainant toutes les autres avec
elle pour faire place au fond du pannier à la ligne1 ( car on ne supprime
rien, on efface et on revoie à la 65536)ligne)
Tout fier d'avoir bien travaillé, ton PC passe donc très logiquement à la
ligne2.
mais, ô cata, la 2 était devenue1 qui a déjà été analysée, donc la ligne1
(ex2) contiendra toujours "idem".
C'est donc pour "contrecarrer" cette démarche on ne peut plus logique que
nos "grosses têtes" commencent par le bas.
dans ce cas-ci, Isabelle commence à la dernière ligne occupée. (Ce que
nous appelions au début DelL, mais qui est encore plus concis comme
Isabelle l'écrit)
De cette manière, A10="idem"----> on supprime--> on s'en fout car c'est
A11 qui devient A10.
Boulot fait, donc on passe à A9, car il y a "le petit plus: step-1). A9 se
fait analyser,.......
Voici donc pourquoi il faut répondre "au-dessus" pour les messages, mais
il faut commencer un boucle de destruction "par le bas".
ouf... -)
pS pour ce qui est du temps mis, analyser une ligne, qu'elle soit la
unième ou la dixième, c'est kif-kif.
Jacquouille
" Le vin est au repas ce que le parfum est à la femme."
"Manu" a écrit dans le message de groupe de discussion :
4d7f5022$0$5424$ba4acef3@reader.news.orange.fr...
Pour quelle raison Isabelle ? pour qu'il soit plus rapide ? de cette
facon,
le code ne fonctionne que quand il trouve quelque chose en partant du bas,
et ca lui evite de perdre + de temps si on partais de haut en bas ?
Manu
"isabelle" <i@v.org> a écrit dans le message de news:
ilnitp$t1t$1@speranza.aioe.org...
bonjour Manu,
lorsqu'il y a insertion ou suppression de lignes dans une boucle, il vaut
mieux commencer par le bas et remonter
Sub Macro2()
Dim i As Integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Range("A" & i) Like "*Rapport*" Then
Range("B" & i) = Range("A" & i)
Range("A" & i) = ""
Rows(i + 1).Insert shift:=xlDown
End If
Next
End Sub
Merci, pour cette explication jacouille, ca deviens plus claire
Manu
"Jacquouille" a écrit dans le message de news: 4d7f60c5$0$14244$
Bonjour Manu Pourquoi commencer par le bas?
Supposons que tu analyses une colonne pour y trouver des doublons et que tu veuilles les supprimer. Toutes les cel de A1:A10 contiennent la même valeur. Au moyen d'une boucle, tu commences: For each c in range ("A1:A10") If c="idem" then Else Rows(c).Delete du coup, tu supprimes la ligne 1. Donc, c'est la ligne 2 qui devient 1, entrainant toutes les autres avec elle pour faire place au fond du pannier à la ligne1 ( car on ne supprime rien, on efface et on revoie à la 65536)ligne) Tout fier d'avoir bien travaillé, ton PC passe donc très logiquement à la ligne2. mais, ô cata, la 2 était devenue1 qui a déjà été analysée, donc la ligne1 (ex2) contiendra toujours "idem". C'est donc pour "contrecarrer" cette démarche on ne peut plus logique que nos "grosses têtes" commencent par le bas. dans ce cas-ci, Isabelle commence à la dernière ligne occupée. (Ce que nous appelions au début DelL, mais qui est encore plus concis comme Isabelle l'écrit) De cette manière, A10="idem"----> on supprime--> on s'en fout car c'est A11 qui devient A10. Boulot fait, donc on passe à A9, car il y a "le petit plus: step-1). A9 se fait analyser,.......
Voici donc pourquoi il faut répondre "au-dessus" pour les messages, mais il faut commencer un boucle de destruction "par le bas".
ouf... -) pS pour ce qui est du temps mis, analyser une ligne, qu'elle soit la unième ou la dixième, c'est kif-kif.
Jacquouille
" Le vin est au repas ce que le parfum est à la femme." "Manu" a écrit dans le message de groupe de discussion : 4d7f5022$0$5424$
Pour quelle raison Isabelle ? pour qu'il soit plus rapide ? de cette facon, le code ne fonctionne que quand il trouve quelque chose en partant du bas, et ca lui evite de perdre + de temps si on partais de haut en bas ?
Manu
"isabelle" a écrit dans le message de news: ilnitp$t1t$
bonjour Manu,
lorsqu'il y a insertion ou suppression de lignes dans une boucle, il vaut mieux commencer par le bas et remonter
Sub Macro2() Dim i As Integer For i = Range("A65536").End(xlUp).Row To 1 Step -1 If Range("A" & i) Like "*Rapport*" Then Range("B" & i) = Range("A" & i) Range("A" & i) = "" Rows(i + 1).Insert shift:=xlDown End If Next End Sub
isabelle
Manu
Merci Daniel de ton soutien.
Manu
"DanielCo" a écrit dans le message de news: ilnk4b$vp6$
Tu ne doois pas utiliser ActiveCell, la macro ne sélectionne aucune cellule.
Sub test() Dim c As Range Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart) If Not c Is Nothing Then Do c.Cut c.Offset(, 1) 'si tu veux une formule c.Offset(, 4).Formula = "=" & c.Offset(, 2).Address & "+" & c.Offset(, 1).Address 'ou seulement le résultat : c.Offset(, 4) = c.Offset(, 2) + c.Offset(, 1) c.Offset(1).EntireRow.Insert Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart) Loop Until c Is Nothing End If End Sub Daniel
Oulala, non ca ne marche pas du tout, il m'a fait un de ces chantier
Merci Daniel de ton soutien.
Manu
"DanielCo" <dcolardelleZZZ@free.fr> a écrit dans le message de news:
ilnk4b$vp6$1@speranza.aioe.org...
Tu ne doois pas utiliser ActiveCell, la macro ne sélectionne aucune
cellule.
Sub test()
Dim c As Range
Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart)
If Not c Is Nothing Then
Do
c.Cut c.Offset(, 1)
'si tu veux une formule
c.Offset(, 4).Formula = "=" & c.Offset(, 2).Address & "+" &
c.Offset(, 1).Address
'ou seulement le résultat :
c.Offset(, 4) = c.Offset(, 2) + c.Offset(, 1)
c.Offset(1).EntireRow.Insert
Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart)
Loop Until c Is Nothing
End If
End Sub
Daniel
Oulala, non ca ne marche pas du tout, il m'a fait un de ces chantier
"DanielCo" a écrit dans le message de news: ilnk4b$vp6$
Tu ne doois pas utiliser ActiveCell, la macro ne sélectionne aucune cellule.
Sub test() Dim c As Range Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart) If Not c Is Nothing Then Do c.Cut c.Offset(, 1) 'si tu veux une formule c.Offset(, 4).Formula = "=" & c.Offset(, 2).Address & "+" & c.Offset(, 1).Address 'ou seulement le résultat : c.Offset(, 4) = c.Offset(, 2) + c.Offset(, 1) c.Offset(1).EntireRow.Insert Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart) Loop Until c Is Nothing End If End Sub Daniel
Oulala, non ca ne marche pas du tout, il m'a fait un de ces chantier