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

Arranger un tableau

11 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'ai un tableau de valeurs dont lequel il contient des cellules vides.

Comment arranger ce tableau en =E9liminant les cellules vides.

Un exemple en PJ.

http://www.cjoint.com/c/FBjvI5LFjWI

Merci d'avance.

10 réponses

1 2
Avatar
MichD
Bonjour,

Utilise cette petite macro une fois!


Sub test()
Dim C As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
With Feuil1
For Each C In Range("A:C").Columns
C.SpecialCells(xlCellTypeBlanks).Delete
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Avatar
Apitos
Bonjour MichD,

Je voulais délimiter la plage sur laquelle se fera la recherche des cellu les vides, parce que faire la chose sur tout le long des colonnes A à C p eut affecter d'autres données sur la feuille.

Alors le nouveau code fait un chamboulement dans mon tableau.

Tu peux faire un essai sur la pièce jointe.

http://www.cjoint.com/c/FBjwCD5TmvQ
Avatar
isabelle
bonjour Apitos,

je n'ai fais qu'une petite ajustement sur macro que Denis a fait
la plage à parcourir Range("A3:C" & Derlg)

Sub test()
Dim C As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Derlg = Range("A:C").SpecialCells(xlCellTypeLastCell).Row
With Feuil2
For Each C In Range("A3:C" & Derlg).Columns
C.SpecialCells(xlCellTypeBlanks).Delete
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

isabelle

Le 2016-02-09 17:32, Apitos a écrit :
Bonjour MichD,

Je voulais délimiter la plage sur laquelle se fera la recherche des cellules
vides, parce que faire la chose sur tout le long des colonnes A à C peut
affecter d'autres données sur la feuille.

Alors le nouveau code fait un chamboulement dans mon tableau.

Tu peux faire un essai sur la pièce jointe.

http://www.cjoint.com/c/FBjwCD5TmvQ

Avatar
isabelle
pour éviter de tourner sur des lignes vide, tu pourrais remplacer

Derlg = Range("A:C").SpecialCells(xlCellTypeLastCell).Row

par

Derlg = Cells.Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

isabelle

Le 2016-02-09 19:25, isabelle a écrit :
bonjour Apitos,

je n'ai fais qu'une petite ajustement sur macro que Denis a fait
la plage à parcourir Range("A3:C" & Derlg)

Sub test()
Dim C As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Derlg = Range("A:C").SpecialCells(xlCellTypeLastCell).Row
With Feuil2
For Each C In Range("A3:C" & Derlg).Columns
C.SpecialCells(xlCellTypeBlanks).Delete
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

isabelle

Le 2016-02-09 17:32, Apitos a écrit :
Bonjour MichD,

Je voulais délimiter la plage sur laquelle se fera la recherche des cellules
vides, parce que faire la chose sur tout le long des colonnes A à C peut
affecter d'autres données sur la feuille.

Alors le nouveau code fait un chamboulement dans mon tableau.

Tu peux faire un essai sur la pièce jointe.

http://www.cjoint.com/c/FBjwCD5TmvQ

Avatar
MichD
Une feuille contient plus de 16,000 colonnes. Ce n'est pas suffisant
pour disposer tes données sans avoir recours à la superposition dans les
mêmes colonnes?

Sub test1()
Dim Rg As Range, T(), B As Long
Dim G As Range, C As Range, A As Long

With Feuil1
Set Rg = .Range("A3:C30")
End With

Application.ScreenUpdating = False
Application.EnableEvents = False
With Feuil1
Set Rg = .Range("A3:C30")
ReDim T(1 To Rg.Rows.Count)
For Each G In Rg.Columns
For Each C In G.Cells
If C <> "" Then
A = A + 1
ReDim Preserve T(1 To A)
T(A) = C.Value
End If
Next
B = B + 1
With Rg.Columns(B)
.Value = ""
.Cells(1, 1).Resize(UBound(T)).Value =
Application.Transpose(T)
End With
Erase T: A = 0
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Avatar
MichD
Bonjour Isabelle,

Comme il a un tableau en dessous de la ligne 30, on ne peut pas utiliser
la suppression des cellules vides sans affecter la disposition des
lignes du tableau sous cette plage de cellules. Je pense qu'on doit
simplement repositionner les valeurs des colonnes sans supprimer les
cellules vides.


MichD
Avatar
isabelle
tester et approuver c'est parfait Denis.
et désolé Apitos, je n'avais pas vue qu'il y avait un autre tableau sous le
premier en range ("A:C")
isabelle


Le 2016-02-09 19:56, MichD a écrit :

Une feuille contient plus de 16,000 colonnes. Ce n'est pas suffisant pour
disposer tes données sans avoir recours à la superposition dans les mêmes colonnes?

Sub test1()
Dim Rg As Range, T(), B As Long
Dim G As Range, C As Range, A As Long

With Feuil1
Set Rg = .Range("A3:C30")
End With

Application.ScreenUpdating = False
Application.EnableEvents = False
With Feuil1
Set Rg = .Range("A3:C30")
ReDim T(1 To Rg.Rows.Count)
For Each G In Rg.Columns
For Each C In G.Cells
If C <> "" Then
A = A + 1
ReDim Preserve T(1 To A)
T(A) = C.Value
End If
Next
B = B + 1
With Rg.Columns(B)
.Value = ""
.Cells(1, 1).Resize(UBound(T)).Value = Application.Transpose(T)
End With
Erase T: A = 0
Next
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

Avatar
Apitos
Bonjour Isabelle, MichD;

La dernière n'est pas forcement connue d'avance (A3:C30)

C'est pour cela que j'ai essayé d'utiliser ce code :

'------------------
DerLig = Range("A:C").Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:= xlPrevious).Row
'---------------------

Parce que à chaque fois une valeur est ajoutée.
Avatar
isabelle
qu'est qui arrive avec le 2ème tableau lorsque tu ajoute des données au 1er
tableau ?
isabelle

Le 2016-02-10 16:35, Apitos a écrit :

Bonjour Isabelle, MichD;

La dernière n'est pas forcement connue d'avance (A3:C30)

C'est pour cela que j'ai essayé d'utiliser ce code :

'------------------
DerLig = Range("A:C").Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'---------------------

Parce que à chaque fois une valeur est ajoutée.

Avatar
MichD
Il n'y a pas de miracle possible...mais tu peux faire cela :

Modifie cette ligne de code comme ceci. Dans cet exemple,
50 est la ligne juste au-dessus de ton second tableau du dessous.
À toi d'adapter...

DerLig = Range("A1:C50").Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
1 2