Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2019Si cellule vide alors...on copie la cellule en regard de la colonne suivante
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Sub col_vide()
Dim t, i&, j&, k&
t = Range("a1:c10")
For i = 2 To UBound(t)
For k = 1 To UBound(t, 2)
If t(i, k) = "" Then Exit For
Next k
For j = k + 1 To UBound(t, 2)
If t(i, j) <> "" Then t(i, k) = t(i, j): t(i, j) = "": k = k + 1
Next j
Next i
Range("a1:c10") = t
End Sub
Dans ta version, tu décales toutes les cellules d'une ligne modifiant ainsi la structure des colonnes après le tableau à compacter.
Si on accepte les décalages des colonnes à droite du tableau à traiter, le code se simplifie :
VB:
Sub col_vide()
Application.ScreenUpdating = False: On Error Resume Next
Range("a2:c12").SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftToLeft
End Sub
je n'ai d'abord pas compris ton « modifiant ainsi la structure des colonnes
après le tableau à compacter » ; puis j'ai compris que « après », c'est :
« à droite » ; or le tableau de droite, en F1:H10, n'est qu'un exemple du
résultat qui est à obtenir ; normalement, il n'est pas là ; et si tu ouvres
le fichier Excel que j'ai joint dans mon post #4, tu verras que j'ai tout
simplement supprimé ce tableau. (j'ai supprimé aussi la zone de texte)
le plus important : j'ai ajouté un prénom en C12 ; et y'a rien à gauche :
ni en B12, ni en A12 ; ma sub marche aussi si y'a une ligne vide,
comme la ligne 11 ; note bien que même avec cette ligne vide,
ça fait le job jusqu'à la ligne 12, sans s'arrêter en ligne 10.
Oui oui. Ce n'était pas une critique. C'était juste un constat. Comme toi, je pense que dans 90% des cas, il n'y a rien à droite. Dans ce cas, je pense que mon petit de 4 lignes peut faire l'affaire.
Bonsoir le fil (et un particulier aux connaissances)
Issu de naguère
VB:
Sub Tri_Gauche_Droite()
Dim i As Long
Application.ScreenUpdating = False
t = Timer()
'tri les données lignes par lignes de la gauche vers la droite
With Range(Cells(2, 1), Cells(Rows.Count, 3).End(3))
For i = 1 To .Rows.Count
.Cells(i, 1).Resize(, 3).Sort Key1:=.Cells(i, 1), Order1:=2, Orientation:=xlLeftToRight
Next
End With
MsgBox Timer - t
End Sub
Bonjour le fil, le forum Je cherche à trier les données de trois colonnes adjacentes (dans cet exemple A,B,C), lignes par lignes mais de la gauche vers la droite. J'ai écrit cette macro (qui fonctionne) Mais j'aimerai pouvoir faire la même chose en utilisant les tableaux (Array) Surtout si le...
Non, je m'amuse à retrouver les fils où je peux tester la différence entre mes 4Go de jadis et mes 8Go de maintenant.
Et si sur la route, je peux aider mon prochain en croisant des vieux de la vieille, alors youpi. 😉
PS: Pendant le confinement, le couvre-feu perdure-t-il?
J'ai remplacé les barrettes d'origine (2*2) par 2*4
Et je suis deg, la MsgBox indique la même chose que ce que j'indiquais en 2018 (pour ce qui est de mon code)
Pour mon code, il suffit de remplacer Range("a1:c10") par : Range("k1:m9999"). Le 9999 doit être supérieur au numéro de la dernière ligne possible du tableau en colonnes K à M.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD