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

Decaler physiquement des cellules

18 réponses
Avatar
JBF
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule) les
cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez m'expliquer
d'une façon simple et adaptée à mon niveau je vous en serais reconnaissant.

Merci d'avance.

JB

10 réponses

1 2
Avatar
LSteph
Bonjour,

Ce n'est pas que dans ton imagination,pour agir il faut une macro pas
une formule.
Ensuite la compréhension de ta question laisse perplexe sur l'objectif
(supposons déjà les actions manuellement afin d'établir ensuite ce qui
se pourrait par macro)
Si on regarde bien J1 et qu'il n'y a rien dedans on peut donc insérer
une cellule en c1 ce qui en décalant d'une cellule à droite c1:I1
décalera J1 en K1 du coup faut-il tester à nouveau J1 ou bien K1
car c'est peut être toujours égal à "" .
Que veux tu faire exactement car on pourrait ainsi décaler sans fin?
Quel doit être le facteur déclenchant et la condition si l'on veut
automatiser?

Cordialement.


--
lSteph


Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule) les
cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez m'expliquer
d'une façon simple et adaptée à mon niveau je vous en serais reconnaissant.

Merci d'avance.

JB




Avatar
M41
Bonjour
En dehors du copier coller manuel, vba me semble l' outil nécessaire
Problèmes à préciser :
C1:J1 ou aussi Ci:Ji
cellules avec ou sans formules
faut il décaller aussi les présentations ?

Pour de simples valeurs :
ou une macro d'actions enregistrée
ou qqch du style

Sub PermutationCirculaireValeurs ()
Dim X as variant, R as range, i as integer
Set R=Range("C1:J1")
X=R
For i = Ubound(X,2) To 2 Step -1
X(1,i)= X(1,i-1)
Next i
X(1,1)=""
R=X
End Sub

On peut généraliser le listing en donnant à R la valeur de cellules
sélectionnées
Généralement les méthodes utilisant ".Value" sont plus lentes

Je n'ai pas testé ; il y a peut être plus simple...

Cordialement

M41



"JBF" a écrit dans le message de news:
%
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule)
les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une
macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez
m'expliquer d'une façon simple et adaptée à mon niveau je vous en serais
reconnaissant.

Merci d'avance.

JB



Avatar
Tatanka
Bonjour JB,

Cette macro décale les données C1:D1 de la feuille active
d'une colonne vers la droite sur la même feuille.
À partir de la feuille contenant tes données :
1) Tape Alt+F11
2) Clique le menu Insertion / Module et colle cette
macro dans la feuille vierge qui devrait apparaître :
Sub Décale_A_Droite()
[c1:i1] Cut [d1]
End Sub
3) Retourne sur ta feuille
4) Clique le menu Outils / Macro / Macros... :
Sélectionne « Décale_A_Droite » et clique sur « Exécuter »

Serge


"JBF" a écrit dans le message de news: %
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule) les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez m'expliquer d'une façon simple et adaptée à mon niveau je vous en
serais reconnaissant.

Merci d'avance.

JB



Avatar
Tatanka
Petite erreur et pas assez clair mon affaire !

Cette macro décale les données C1:D1 de la feuille active
d'une colonne vers la droite sur la même feuille.
À partir de la feuille contenant tes données :
1) Tape Alt+F11
2) Fais un clic droit sur le nom d'une feuille de ton classeur (à gauche de l'écran),
sélectionne « Insertion » et clique sur « Module »
3) Colle alors cette macro sur la feuille vierge qui devrait apparaître :
*Un point après [c1:i1] et un espace aprés Cut*
Sub Décale_A_Droite()
[c1:i1].Cut [d1]
End Sub
4) Retourne sur ta feuille
5) Clique le menu Outils / Macro / Macros... :
Sélectionne « Décale_A_Droite » et clique sur « Exécuter »
Tu dois faire exécuter cette macro à partir de la feuille où se
trouvent tes données.

Serge


"Tatanka" a écrit dans le message de news: e5%
Bonjour JB,

Cette macro décale les données C1:D1 de la feuille active
d'une colonne vers la droite sur la même feuille.
À partir de la feuille contenant tes données :
1) Tape Alt+F11
2) Clique le menu Insertion / Module et colle cette
macro dans la feuille vierge qui devrait apparaître :
Sub Décale_A_Droite()
[c1:i1] Cut [d1]
End Sub
3) Retourne sur ta feuille
4) Clique le menu Outils / Macro / Macros... :
Sélectionne « Décale_A_Droite » et clique sur « Exécuter »

Serge


"JBF" a écrit dans le message de news: %
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule) les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez m'expliquer d'une façon simple et adaptée à mon niveau je vous
en serais reconnaissant.

Merci d'avance.

JB







Avatar
M41
RE

Copier cette macro dans l'éditeur (Alt+F11)
puis Insertion Module...
puis copier coller listing

Pour l'utiliser
Sélectionner un vecteur de cellules ou une table (car c'est la solution
générale+++)
Ouvrir : Outils, Macros, Macros
Choisir et lancer la macro : PermutationCirculaireValeur


Sub PermutationCirculaireValeurs()
Dim X As Variant, Y As Variant, R As Range, T As String
Dim h As Integer, i As Integer, j As Integer, k As Integer, n As Integer
'Set R = Range("C1:J1")
Set R = Application.Selection
X = R
n = UBound(X, 1): k = UBound(X, 2): i = k
For h = 1 To n
For i = k To 2 Step -1
If X(h, i) = "" Or X(1, i) = Y Then
Do
For j = i To 1 Step -1
If X(h, j) <> "" Or X(h, j) <> Y Then Exit Do
Next j
Exit For
Loop Until True
X(h, i) = X(h, j)
X(h, j) = Y
End If
Next i
Next h
R = X
End Sub








"JBF" a écrit dans le message de news:
%
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule)
les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une
macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez
m'expliquer d'une façon simple et adaptée à mon niveau je vous en serais
reconnaissant.

Merci d'avance.

JB



Avatar
Tatanka
Mais pourquoi une macro pour faire ça ?

Sélectionne C1:I1, place le curseur sur un bord
de ta sélection. Quand tu verras quatre petites flèches,
maintiens le bouton gauche enfoncé et drague vers la droite.
Est-ce bien le résultat que tu attends ?

Serge


"JBF" a écrit dans le message de news: %
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule) les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez m'expliquer d'une façon simple et adaptée à mon niveau je vous en
serais reconnaissant.

Merci d'avance.

JB



Avatar
M41
Suite

En fait ce n'est vraiement une permutation circulaire que lorsque l'on
enlève le blanc de droite pour le replacer à gauche.
La macro proposée (cas général à priorité lignes) enlève en fait tous les
blancs en réécrivant à droite.
En développant Y on pourrait aussi supprimer d'autres contenus...
Y pourrait être un Array contenant la liste de tous les contenus à supprimer
La sélection accepte aussi une table de plusieurs lignes....

Cordialement

M41



"M41" a écrit dans le message de news:
4821a651$0$892$
RE

Copier cette macro dans l'éditeur (Alt+F11)
puis Insertion Module...
puis copier coller listing

Pour l'utiliser
Sélectionner un vecteur de cellules ou une table (car c'est la solution
générale+++)
Ouvrir : Outils, Macros, Macros
Choisir et lancer la macro : PermutationCirculaireValeur


Sub PermutationCirculaireValeurs()
Dim X As Variant, Y As Variant, R As Range, T As String
Dim h As Integer, i As Integer, j As Integer, k As Integer, n As Integer
'Set R = Range("C1:J1")
Set R = Application.Selection
X = R
n = UBound(X, 1): k = UBound(X, 2): i = k
For h = 1 To n
For i = k To 2 Step -1
If X(h, i) = "" Or X(1, i) = Y Then
Do
For j = i To 1 Step -1
If X(h, j) <> "" Or X(h, j) <> Y Then Exit Do
Next j
Exit For
Loop Until True
X(h, i) = X(h, j)
X(h, j) = Y
End If
Next i
Next h
R = X
End Sub








"JBF" a écrit dans le message de news:
%
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule)
les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une
macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez
m'expliquer d'une façon simple et adaptée à mon niveau je vous en serais
reconnaissant.

Merci d'avance.

JB







Avatar
JBF
Merci à vous trois,

Pour répondre à LSteph, J1 est ma dernière colonne et si celle-ci est vide
par rapport à mise en page cela signifie qu'il y a une erreur et que
l'ensemble de la ligne est décalée d'une cellule vers la gauche. D'où ma
volonté de décaler cette ligne d'une cellule sur la droite pour que mon
tableau ressemble à qq. chose.

Pour répondre au dernier message de SERGE qui s'étonne de ma volonté d'avoir
une macro. La réponse est simple. J'ai une vingtaine de tableau avec ce Pb
là. (ça vient d'un fichier texte qui ne permettait pas 100% de mise en page
conforme!). Chaque tableau comporte entre 10.000 et 20.000 lignes donc je ne
peux pas faire ça manuellement et biensur toutes les lignes ne sont pas
concernées.

Enfin dernière chose. vous êtes plusieurs à m'avoir gentiment proposé
plusieurs macros différentes. Ce qui m'étonne c'est que celle proposé par
SERGE est bcp plus simple que les autres. Il y a une explication.

de tte façon je vais déjà essayer ce qui m'a été proposé et je vous tiens au
courant.

merci beaucoup.

JB


"JBF" a écrit dans le message de news:
%
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule)
les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une
macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez
m'expliquer d'une façon simple et adaptée à mon niveau je vous en serais
reconnaissant.

Merci d'avance.

JB



Avatar
JBF
Il y aurait un bug apparemment sur cet argument : n = UBound(X, 1)

Tu vois de quoi il peut s'agir?

merci


"M41" a écrit dans le message de news:
4821a847$0$904$
Suite

En fait ce n'est vraiement une permutation circulaire que lorsque l'on
enlève le blanc de droite pour le replacer à gauche.
La macro proposée (cas général à priorité lignes) enlève en fait tous les
blancs en réécrivant à droite.
En développant Y on pourrait aussi supprimer d'autres contenus...
Y pourrait être un Array contenant la liste de tous les contenus à
supprimer
La sélection accepte aussi une table de plusieurs lignes....

Cordialement

M41



"M41" a écrit dans le message de news:
4821a651$0$892$
RE

Copier cette macro dans l'éditeur (Alt+F11)
puis Insertion Module...
puis copier coller listing

Pour l'utiliser
Sélectionner un vecteur de cellules ou une table (car c'est la solution
générale+++)
Ouvrir : Outils, Macros, Macros
Choisir et lancer la macro : PermutationCirculaireValeur


Sub PermutationCirculaireValeurs()
Dim X As Variant, Y As Variant, R As Range, T As String
Dim h As Integer, i As Integer, j As Integer, k As Integer, n As Integer
'Set R = Range("C1:J1")
Set R = Application.Selection
X = R
n = UBound(X, 1): k = UBound(X, 2): i = k
For h = 1 To n
For i = k To 2 Step -1
If X(h, i) = "" Or X(1, i) = Y Then
Do
For j = i To 1 Step -1
If X(h, j) <> "" Or X(h, j) <> Y Then Exit Do
Next j
Exit For
Loop Until True
X(h, i) = X(h, j)
X(h, j) = Y
End If
Next i
Next h
R = X
End Sub








"JBF" a écrit dans le message de news:
%
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule)
les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une
macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez
m'expliquer d'une façon simple et adaptée à mon niveau je vous en serais
reconnaissant.

Merci d'avance.

JB











Avatar
LSteph
Re,
..alors peut-être ceci:

Sub zaza()
Dim i As Long, r As Long
Application.ScreenUpdating = False
r = [j65536].End(xlUp).Row
For i = r To 1 Step -1
If Cells(i, 10).Value = "" Then
Cells(i, 3).Insert shift:=xlToRight
End If
Next
End Sub

'lSteph


Merci à vous trois,

Pour répondre à LSteph, J1 est ma dernière colonne et si celle-ci est vide
par rapport à mise en page cela signifie qu'il y a une erreur et que
l'ensemble de la ligne est décalée d'une cellule vers la gauche. D'où ma
volonté de décaler cette ligne d'une cellule sur la droite pour que mon
tableau ressemble à qq. chose.

Pour répondre au dernier message de SERGE qui s'étonne de ma volonté d'avoir
une macro. La réponse est simple. J'ai une vingtaine de tableau avec ce Pb
là. (ça vient d'un fichier texte qui ne permettait pas 100% de mise en page
conforme!). Chaque tableau comporte entre 10.000 et 20.000 lignes donc je ne
peux pas faire ça manuellement et biensur toutes les lignes ne sont pas
concernées.

Enfin dernière chose. vous êtes plusieurs à m'avoir gentiment proposé
plusieurs macros différentes. Ce qui m'étonne c'est que celle proposé par
SERGE est bcp plus simple que les autres. Il y a une explication.

de tte façon je vais déjà essayer ce qui m'a été proposé et je vous tiens au
courant.

merci beaucoup.

JB


"JBF" a écrit dans le message de news:
%
Bonjour,

Existe t-il une formule pour décaler physiquement des cellules?

Je voudrais dire que si J1="" alors décaler physiquement (d'une cellule)
les cellules C1 à I1 vers la droite.

J'imagine que vous allez me répondre que la seule alternative est une
macro.
Le hic c'est que je n'y connais rien en VBA donc si vous pouviez
m'expliquer d'une façon simple et adaptée à mon niveau je vous en serais
reconnaissant.

Merci d'avance.

JB







1 2