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

8 réponses

1 2
Avatar
Tatanka
Est-ce à dire que tu as un certain nombre de lignes
contenant des données de C1 à I1, d'autres de D1 à J1
et d'autres qui ne contiennent rien.
Tu voudrais alors décaler vers la droite toutes les lignes qui
contiennent des données de C1 à I1 ?
Ai-je bien compris ?

Serge


"JBF" a écrit dans le message de news:
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
M41
Re
Pour moi çà marche mais
il y a effectivement un erreur à

If X(h, i) = "" Or X(h, i) = Y Then

Il faut un h à la place du 1
Par ailleurs i = k ne sert à rien (c'est le résidu d'un test)

Attention dans
n = UBound(X, 1): k = UBound(X, 2)
il y a un : au milieu à ne pas oublier

Quand à X dans X=R, c'est une sorte d'Array à 2 dimensions....
n est le nombre de ligne et k de colonnes
Si on sélectionne qu'une seule cellule, X n'est plus un Array.
Il faut sélectionner
TOUTE LA SUITE DES CELLULES CONSECUTIVES
HORIZONTALES OU UN TABLEAU à tasser à droite !
Effectivement la sélection d'une cellule unique entraine une
erreure à n =... .J'ai mis une détection d'erreur.

Listing corrigé ci-dessous

Cordialement

M41


Sub MiseGaucheValeurs()
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
On Error GoTo E_MiseGaucheValeurs
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(h, 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
Exit Sub
E_MiseGaucheValeurs:
End Sub






"JBF" a écrit dans le message de news:

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
M41
RE, RE

Si effectivement les tableaux comportent 10 à 20000 lignes la sélection peut
être périlleuse bien que celà soit programmable mais la question initiale
portait sur un C1:J1...

M41


"JBF" a écrit dans le message de news:

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
M41
...
J'oubliais aussi que l'on devient aussi limité par les dimensions maximum
d'un tableau ! M41


"JBF" a écrit dans le message de news:

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
JBF
Oui Serge c'est à peu près ça mais je viens de m'apercevoir sur un tableau
que mes explications précédentes ne suffisaient pas à la compréhension.

Je refais un point précis et je vous tiens au courant.

En tt cas merci pour votre aide.

M41 : ça marche mais c'est à cause de la disposition d'un autre tableau que
ça ne marche pas.

A tte à l'heure.

JB


"Tatanka" a écrit dans le message de news:
%
Est-ce à dire que tu as un certain nombre de lignes
contenant des données de C1 à I1, d'autres de D1 à J1
et d'autres qui ne contiennent rien.
Tu voudrais alors décaler vers la droite toutes les lignes qui
contiennent des données de C1 à I1 ?
Ai-je bien compris ?

Serge


"JBF" a écrit dans le message de news:

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
M41
Autre version

plus limité par le nombre de lignes ou la taille des tableaux (>65000
lignes)

en changeant la valeur de C en true ou false , on change le mode de
fonctionnement
si True : tout est tassé à droite
si False : le tassement ne se fait que pour la dernière colonne

Bon ce sera tout pour aujourd'hui.
Cordialement

M41
_______________________________________

Private Const C As Boolean = False ' True
'
Sub MiseDroiteValeurs2()
Dim X As Variant, Y As Variant, R As Range, R2 As Range, C2 As Boolean
Dim h As Integer, i As Integer, j As Integer, k As Integer, n As Long
On Error GoTo E_MiseDroiteValeurs2
Set R = Application.Selection
n = R.Rows.Count: h = 1
Do
Set R2 = R.Rows(h): X = R2
k = UBound(X, 2)
C2 = (X(1, 1) = "") Or (X(1, 1) = Y)
For i = k To 2 Step -1
If C Then
If X(1, i) = "" Or X(1, i) = Y Then
Do
For j = i To 1 Step -1
If X(1, j) <> "" Or X(1, j) <> Y Then Exit Do
Next j
Exit For
Loop Until True
X(1, i) = X(1, j)
X(1, j) = Y
End If
ElseIf C2 Then
X(1, i) = X(1, i - 1)
End If
Next i
R2 = X
C2 = False
h = h + 1
Loop Until h > n
Exit Sub
E_MiseDroiteValeurs2:
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
M41
Y'a encore une erreur

Dim h As Integer
Non !
h as long

.../...


"M41" a écrit dans le message de news:
4821d09d$0$902$
Autre version

plus limité par le nombre de lignes ou la taille des tableaux (>65000
lignes)

en changeant la valeur de C en true ou false , on change le mode de
fonctionnement
si True : tout est tassé à droite
si False : le tassement ne se fait que pour la dernière colonne

Bon ce sera tout pour aujourd'hui.
Cordialement

M41
_______________________________________

Private Const C As Boolean = False ' True
'
Sub MiseDroiteValeurs2()
Dim X As Variant, Y As Variant, R As Range, R2 As Range, C2 As Boolean
Dim h As Integer, i As Integer, j As Integer, k As Integer, n As Long
On Error GoTo E_MiseDroiteValeurs2
Set R = Application.Selection
n = R.Rows.Count: h = 1
Do
Set R2 = R.Rows(h): X = R2
k = UBound(X, 2)
C2 = (X(1, 1) = "") Or (X(1, 1) = Y)
For i = k To 2 Step -1
If C Then
If X(1, i) = "" Or X(1, i) = Y Then
Do
For j = i To 1 Step -1
If X(1, j) <> "" Or X(1, j) <> Y Then Exit Do
Next j
Exit For
Loop Until True
X(1, i) = X(1, j)
X(1, j) = Y
End If
ElseIf C2 Then
X(1, i) = X(1, i - 1)
End If
Next i
R2 = X
C2 = False
h = h + 1
Loop Until h > n
Exit Sub
E_MiseDroiteValeurs2:
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
Frédéric Sigonneau
Si ton idée est de faire une moulinette qui examine tes tableaux ligne par ligne
et décale au cas par cas selon que la cellule Jx de la ligne est vide ou non, tu
peux essayer ces deux bouts de code (je te propose deux procédures, mais une
seule peut suffire si c'est toujours la colonne J qui est à scanner) :

'========================== Sub Moulinette() 'la moulinette
Dim i As Long
For i = 1 To 50
DecaleSi Range("J" & i)
Next i
End Sub

'la procédure qui fait le boulot
Sub DecaleSi(Cell As Range)
If Cell.Value = "" Then
Cell(, -6).Resize(1, 7).Cut Cell(, -5).Resize(1, 7)
End If
End Sub
'==========================
FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

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