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

deplacement d'une ligne sur la ligne supérieure puis suppression de la ligne devenue vide

8 réponses
Avatar
Nick
Bonjour

Sur un tableau excel, je souhaite déplacer une ligne sur deux sur la ligne
directement au dessus à la première case vide (en fait, celle située à la
septième colonne), puis supprimer la ligne qui a été déplacée.
Dans mon exemple, ca ne marche que pour la première ligne. Je souhaiterais
pouvoir le fin quelque soit le nombre de ligne du tableau.

Merci par avance pour votre aide !


Sub Delai2()
'
' Delai1 Macro
' Macro enregistrée le 15/03/2011 par xx
'

'

Dim i
For i = 1 To 200
Range("a" & i).Select
ActiveCell.Offset(1, 0).Range("A" & i).Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("G" & i).Select
ActiveSheet.Paste

Range("a" & i).Select
ActiveCell.Offset(1, 0).Range("A" & i).Select
Selection.Cut
ActiveCell.Offset(, 0).Rows("1:1").EntireRow.Select
Selection.Delete Shift:=xlUp
Next
End Sub

8 réponses

Avatar
isabelle
bonjour Nick,

lorsqu'il y a insertion ou suppression de lignes il faut commencer par
le bas et remonter,

For i = 200 To 1 Step -1


et adapter le reste de cette macro pour ce changement

isabelle
------------------------------------------------------------------

Le 2011-03-18 10:04, Nick a écrit :
Bonjour

Sur un tableau excel, je souhaite déplacer une ligne sur deux sur la ligne
directement au dessus à la première case vide (en fait, celle située à la
septième colonne), puis supprimer la ligne qui a été déplacée.
Dans mon exemple, ca ne marche que pour la première ligne. Je souhaiterais
pouvoir le fin quelque soit le nombre de ligne du tableau.

Merci par avance pour votre aide !


Sub Delai2()
'
' Delai1 Macro
' Macro enregistrée le 15/03/2011 par xx
'

'

Dim i
For i = 1 To 200
Range("a"& i).Select
ActiveCell.Offset(1, 0).Range("A"& i).Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("G"& i).Select
ActiveSheet.Paste

Range("a"& i).Select
ActiveCell.Offset(1, 0).Range("A"& i).Select
Selection.Cut
ActiveCell.Offset(, 0).Rows("1:1").EntireRow.Select
Selection.Delete Shift:=xlUp
Next
End Sub



Avatar
MANU
Bonsoir,

Tu peux m'en dire + sur cette ligne, For i = 200 To 1 Step -1
J'essaie c'apprendre, est ce que ce veut dire tu pars de la ligne 200 et tu
remonte pas à pas de 1 jusqu'à tu trouve i ...

Merci

Manu

"isabelle" a écrit dans le message de news:
ilvpso$pv9$
bonjour Nick,

lorsqu'il y a insertion ou suppression de lignes il faut commencer par le
bas et remonter,

For i = 200 To 1 Step -1


et adapter le reste de cette macro pour ce changement

isabelle
------------------------------------------------------------------

Le 2011-03-18 10:04, Nick a écrit :
Bonjour

Sur un tableau excel, je souhaite déplacer une ligne sur deux sur la
ligne
directement au dessus à la première case vide (en fait, celle située à la
septième colonne), puis supprimer la ligne qui a été déplacée.
Dans mon exemple, ca ne marche que pour la première ligne. Je
souhaiterais
pouvoir le fin quelque soit le nombre de ligne du tableau.

Merci par avance pour votre aide !


Sub Delai2()
'
' Delai1 Macro
' Macro enregistrée le 15/03/2011 par xx
'

'

Dim i
For i = 1 To 200
Range("a"& i).Select
ActiveCell.Offset(1, 0).Range("A"& i).Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("G"& i).Select
ActiveSheet.Paste

Range("a"& i).Select
ActiveCell.Offset(1, 0).Range("A"& i).Select
Selection.Cut
ActiveCell.Offset(, 0).Rows("1:1").EntireRow.Select
Selection.Delete Shift:=xlUp
Next
End Sub



Avatar
isabelle
voui, c'est en plein ça et plus, je te joint la parole du sage
Jacquouille à ce suget

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
Avatar
Manu
Bonjour,

Merci Isabelle ainsi qu'au sage "Jacquouille "

Manu

"isabelle" a écrit dans le message de news:
im181h$6s7$
voui, c'est en plein ça et plus, je te joint la parole du sage Jacquouille
à ce suget

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


Avatar
Nick
Merci pour le conseil...J'arrive àpeu pres a ce que je voulais...
Il me reste à parametrer i pour qu'il s'adapte à la longueur de mes
tableaux...ca peut varier de 100 a 10000



"Manu" a écrit dans le message de news:
4d8475e2$0$32441$
Bonjour,

Merci Isabelle ainsi qu'au sage "Jacquouille "

Manu

"isabelle" a écrit dans le message de news:
im181h$6s7$
voui, c'est en plein ça et plus, je te joint la parole du sage
Jacquouille à ce suget

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






Avatar
isabelle
bonjour Nick,

pour la colonne A ça pourrais être

For i = Range("A65536").End(xlUp).Row To 1 Step -1

isabelle
------------------------------------------------------------------

Le 2011-03-22 09:16, Nick a écrit :
Merci pour le conseil...J'arrive àpeu pres a ce que je voulais...
Il me reste à parametrer i pour qu'il s'adapte à la longueur de mes
tableaux...ca peut varier de 100 a 10000



"Manu" a écrit dans le message de news:
4d8475e2$0$32441$

Bonjour,

Merci Isabelle ainsi qu'au sage "Jacquouille "

Manu

"isabelle" a écrit dans le message de news:
im181h$6s7$

voui, c'est en plein ça et plus, je te joint la parole du sage
Jacquouille à ce suget

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











Avatar
Nick
Je suis enquiquinant, mais il faudrait que ce soit forcement une ligne paire
! la premiere meme si elle est vide sous la premiere ligne impaire pleine
!!



"isabelle" a écrit dans le message de news:
ima8m2$pdh$
bonjour Nick,

pour la colonne A ça pourrais être

For i = Range("A65536").End(xlUp).Row To 1 Step -1

isabelle
------------------------------------------------------------------

Le 2011-03-22 09:16, Nick a écrit :
Merci pour le conseil...J'arrive àpeu pres a ce que je voulais...
Il me reste à parametrer i pour qu'il s'adapte à la longueur de mes
tableaux...ca peut varier de 100 a 10000



"Manu" a écrit dans le message de news:
4d8475e2$0$32441$

Bonjour,

Merci Isabelle ainsi qu'au sage "Jacquouille "

Manu

"isabelle" a écrit dans le message de news:
im181h$6s7$

voui, c'est en plein ça et plus, je te joint la parole du sage
Jacquouille à ce suget

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











Avatar
isabelle
bonjour Nick,

heu.. pas du tous sur d'avoir compris,

ligne = Range("A65536").End(xlUp).Row
If ligne Mod 2 = 0 Then lignePair = ligne Else lignePair = ligne + 1
For i = lignePair To 1 Step -1


isabelle
------------------------------------------------------------------

Le 2011-03-22 14:48, Nick a écrit :
Je suis enquiquinant, mais il faudrait que ce soit forcement une ligne paire
! la premiere meme si elle est vide sous la premiere ligne impaire pleine
!!



"isabelle" a écrit dans le message de news:
ima8m2$pdh$

bonjour Nick,

pour la colonne A ça pourrais être

For i = Range("A65536").End(xlUp).Row To 1 Step -1

isabelle
------------------------------------------------------------------

Le 2011-03-22 09:16, Nick a écrit :

Merci pour le conseil...J'arrive àpeu pres a ce que je voulais...
Il me reste à parametrer i pour qu'il s'adapte à la longueur de mes
tableaux...ca peut varier de 100 a 10000



"Manu" a écrit dans le message de news:
4d8475e2$0$32441$


Bonjour,

Merci Isabelle ainsi qu'au sage "Jacquouille "

Manu

"isabelle" a écrit dans le message de news:
im181h$6s7$


voui, c'est en plein ça et plus, je te joint la parole du sage
Jacquouille à ce suget

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