Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est vide

Nougatine95

XLDnaute Occasionnel
Bonjour Le Forum

Par macro, je recherche comment:
Décaler vers la gauche les cellules d'une ligne dès que la cellule précédente est vide.

Les cellules vides d'une ligne sont ne sont au même emplacement d'une ligne à l'autre.

Le fichier allégé joint, comprend à l'origine quelques centaines de lignes et de colonnes.
Les cellules comportent des formules.

Merci beaucoup pour votre aide.
 

Pièces jointes

  • CelluleVideDecalerGauche.xlsm
    15.8 KB · Affichages: 86

Staple1600

XLDnaute Barbatruc
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re


Voici une manière de faire sans macros (en copiant l'onglet au préalable)
1) Sélection de la page contenant les formules
2) Copier/Collage Valeurs seules
3) Selection (ligne par ligne)
4) F5/Cellules/Cellules vides
5) Supprimer -> Décaler cellules vers la gauche.

J'ai testé cela fonctionne

Pour plus de praticité, cette manip faite par VBA serait plus appropriée.

Je le laisse tester ce que cela donne avec l'enregistreur de macros (pour avoir le code de base)

Ensuite il faudra créer une boucle pour traiter chaque ligne.

EDITION: Le problème c'est qu'il faut "nettoyer" les cellules au préalable pour avoir des cellules vraiment vides
(Mais cela peut se faire rapidement en VBA)
Code:
Sub abc()
For Each c In Selection
If Len(c) = 0 Then
c.ClearContents
End If
Next c
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re

Voici le pendant VBA de mon précédent message
1) Sélection de la plage E3:Z6
2) puis lancer la macro Test
Code:
Sub Videdechezvide()
For Each c In Selection
If Len(c) = 0 Then
c.ClearContents
End If
Next c
End Sub
Code:
Sub Test()
Videdechezvide
For Each c In Selection
If c.Column = 5 Then
c.Resize(, 22).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
End If
Next c
End Sub
 

Nougatine95

XLDnaute Occasionnel
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re,

Pour ma part, j'ai testé, il y a bien décalage des cellules de la ligne, vers la gauche, y compris les cellules vides.
J'ai beau renouveler, même résultat.
Qu'ai-je omis...
 

Staple1600

XLDnaute Barbatruc
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re,

J'ai beau renouveler, même résultat.
Qu'ai-je omis...

Tu as bien supprimé les formules ?
(avec un Copier/Coller Valeurs seules comme je l'écrivais dans mon précédent message)
Tu as bien sélectionné les cellules avant de lancer la macro Test ?

Voici le résultat de la macro Test sur mon PC.
Regarde la pièce jointe 913644
 

Pièces jointes

  • macrotest.jpg
    macrotest.jpg
    26.4 KB · Affichages: 62

Nougatine95

XLDnaute Occasionnel
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re,

Pas de souci avec
Copier/Coller Valeurs seules
ni avec zone de sélection.

C'est côté VBA que je patauge (sables mouvants), donc c'est là que l'opération m'est délicate et très incertaine.
Heureusement que moi pas chirurgien!

Reprenons, je copie le code Test, je le pose en tant que code du bouton créé sur la page?
sans rien changé?

Désolée...
 

Staple1600

XLDnaute Barbatruc
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re


Ne pas oublier de copier aussi la macro Videdechezvide
(sinon pourquoi l'aurai-je poster dans mon message...
:rolleyes:)

Relis attentivement toutes mes explications précédentes et testes à nouveau

Cela doit fonctionner chez toi (puisque la copie d'écran montre que cela fonctionne chez moi) ;)

PS: La macro VidedechezVide est appelée par la macro Test.
Tu ne l'avais pas remarqué?
 

Nougatine95

XLDnaute Occasionnel
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

J'avais remarqué tous les détails.

Enfin après moultes reprises et remous de réflexions... j'émerge!

Le bouton que j'avais créé ne doit pas être le bon,

J'ai mis en tête:

Private Sub CommandButton1_Click()
Videdechezvide
For Each c In Selection
If c.Column = 5 Then
c.Resize(, 22).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
End If
Next c
End Sub

et là c'est OK.
Merci Staple1600.

Est-ce gravissime ce "Private" ou ce choix de bouton?
 

Nougatine95

XLDnaute Occasionnel
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

En creusant un peu plus... pourquoi tel bouton?

Tu auras compris que j'avais choisi le bouton Controles ActiveX

Essai en prenant le bouton Controles de formulaire, cela fonctionne avec:

Sub Test()
Videdechezvide
For Each c In Selection
If c.Column = 5 Then
c.Resize(, 22).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
End If
Next c
End Sub

Je ne connais pas la différence entre ces 2 boutons.
 

Staple1600

XLDnaute Barbatruc
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Re

Tu as vu mon dernier conseil dans mon dernier message.

Tu diras bonjour à tes acides aminés quand tu les croiseras ;)

PS: Il y aura sans doute quelques retouches à faire quand tu testeras sur ton fichier réel avec plein de lignes
- éviter d'utiliser Selection mais cela tu sais désormais déjà faire-> cf macro b
- figer le rafraîchissement écran
 
Dernière édition:

Nougatine95

XLDnaute Occasionnel
Re : Décaler vers gauche les cellules d'une ligne dès que la cellule précédente est v

Merci pour ces conseils.

Je me documenterai sur ce choix de Bouton.

L'essentiel est fait.
Pour retouches, je n'y manquerai pas.

Encore 1000 mercis à XLDnaute MEGA Barbatruc


Une XLDnaute Occasionnel
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 511
Membres
103 239
dernier inscrit
wari