Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

10 réponses

1 2 3
Avatar
Manu
Merci, vraiment pas facile, alors avec ton code, ce que j'ai demandé à
Isabelle ressemblerait à cà ?

Sub test()
Dim c As Range
Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart)
If Not c Is Nothing Then
Do
ActiveCell.Offset(0, 4).Range("A1").Select
ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
ActiveCell.Offset(1, 0).Range("A1").Select
Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart)
Loop Until c Is Nothing
End If
End Sub

Manu

"DanielCo" a écrit dans le message de news:
ilni2n$qtc$
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)
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


Merci Daniel, ca fonctionne egalement nickel, mais plus dur à comprendre
pour moi qui suis novice en VBA, car pour arriver à mes fins, je fais un
melange de ce que vous m'apprenez avec des lignes que je m'enregistre par
l'enregistreur, et c'est vraiment coton.
Par exemple j'essaie maintenant d'inserer une ligne en dessous des
cellules qui comportent "Rapport" dans la colonne B et là, j'avoue que
c'est costaud, je vais tacher de comprendre ce que tu as fais, dis moi si
je me trompe...




Avatar
Manu
Oulala, non ca ne marche pas du tout, il m'a fait un de ces chantier


"Manu" a écrit dans le message de news:
4d7f4e08$0$5413$

Merci, vraiment pas facile, alors avec ton code, ce que j'ai demandé à
Isabelle ressemblerait à cà ?

Sub test()
Dim c As Range
Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart)
If Not c Is Nothing Then
Do
ActiveCell.Offset(0, 4).Range("A1").Select
ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
ActiveCell.Offset(1, 0).Range("A1").Select
Set c = [A:A].Find("Rapport", MatchCase:=True, lookat:=xlPart)
Loop Until c Is Nothing
End If
End Sub

Manu

"DanielCo" a écrit dans le message de news:
ilni2n$qtc$
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)
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


Merci Daniel, ca fonctionne egalement nickel, mais plus dur à comprendre
pour moi qui suis novice en VBA, car pour arriver à mes fins, je fais un
melange de ce que vous m'apprenez avec des lignes que je m'enregistre
par l'enregistreur, et c'est vraiment coton.
Par exemple j'essaie maintenant d'inserer une ligne en dessous des
cellules qui comportent "Rapport" dans la colonne B et là, j'avoue que
c'est costaud, je vais tacher de comprendre ce que tu as fais, dis moi
si je me trompe...








Avatar
isabelle
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
isabelle
voilà,

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) = ""
Range("F" & i) = Range("C" & i) + Range("D" & i)
Rows(i + 1).Insert shift:=xlDown
End If
Next
End Sub

isabelle

Le 2011-03-15 07:36, isabelle a écrit :
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
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
Waouuuu ! etonnant qu'en si peu de ligne il puisse faire autant de chose,
Vraiment Merci Isabelle

Manu

"isabelle" a écrit dans le message de news:
ilnj2b$t1t$
voilà,

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) = ""
Range("F" & i) = Range("C" & i) + Range("D" & i)
Rows(i + 1).Insert shift:=xlDown
End If
Next
End Sub

isabelle

Le 2011-03-15 07:36, isabelle a écrit :
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
isabelle
oui, car si on commence par le haut et que l'on insère une ligne cela
fait cette ligne de plus à vérifier,

isabelle


Le 2011-03-15 07:40, Manu a écrit :
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
OK, Vraiment Merci Isabelle ainsi qu'à Daniel.

Manu

"isabelle" a écrit dans le message de news:
ilnjov$ufp$
oui, car si on commence par le haut et que l'on insère une ligne cela fait
cette ligne de plus à vérifier,

isabelle


Le 2011-03-15 07:40, Manu a écrit :
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
DanielCo
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
Avatar
Jacquouille
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


1 2 3