OVH Cloud OVH Cloud

Decalage si

22 réponses
Avatar
Manu
Bonjour,

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 de votre soutien

Manu

2 réponses

1 2 3
Avatar
Manu
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





Avatar
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




1 2 3