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

Bonjour à tous

Nougatine95
Pour ne pas supprimer les espaces dans les cellules de la colonnes B ?

Sinon, si on a le droit ne pas utiliser les formules, testes la macro ci-dessous
Tu sélectionnes tes données en colonne B, puis tu lances la macro.

Code:
Sub a()
Dim c As Range, tmp$, i%
For Each c In Selection
tmp = Replace(c.Text, Chr(32), vbNullString)
For i = 1 To Len(tmp)
c.Offset(, i) = Mid(tmp, i, 1)
Next i
Next c
End Sub

EDITION: Variante (ne nécessitant pas de sélection au préalable)
Code:
Sub b()
Dim c As Range, plg As Range, tmp$, i
Set plg = Range("B3", Range("B" & Rows.Count).End(xlUp))
For Each c In plg
tmp = Replace(c.Text, Chr(32), vbNullString)
For i = 1 To Len(tmp)
c.Offset(, i) = Mid(tmp, i, 1)
Next i
Next c
End Sub
 
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

Bonjour Staple1600,

"Pourquoi ne pas supprimer les espaces dans les cellules B,"

En effet ce serait plus simple...
Mais...
J'ai préféré simplifier plutôt que partir dans des explications...
ai fourni un fichier très simple, mais en fait les formules ne doivent pas toujours extraire ce qui est en colonne B;
ai choisi pour l'exemple des "mots" mais cela n'est pas la réalité de mon fichier.

En réel, dès qu'il y a un emplacement "vide" en colonne B, il faut choisir parmi une des lettres situées entre 2 "vides" selon certaines conditions.

Ma formule plus complexe extrait les bonnes lettres selon cette condition.


Je cherche maintenant quelle macro associer au bouton pour "resserrer" l'ensemble.

J'espère avoir été claire dans ces explications.

Merci Staple1600.
 

Nougatine95

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

Staple1600,

Merci!
J'ai testé c'est nickel.
EDITION: Variante (ne nécessitant pas de sélection au préalable)
Code :
Sub b()
Dim c As Range, plg As Range, tmp$, i
Set plg = Range("B3", Range("B" & Rows.Count).End(xlUp))
For Each c In plg
tmp = Replace(c.Text, Chr(32), vbNullString)
For i = 1 To Len(tmp)
c.Offset(, i) = Mid(tmp, i, 1)
Next i
Next c
End Sub

Je joins le fichier modifié avec réalité de la formule qui extrait telle ou telle lettre.
Une seule lettre sera affichée, selon une condition, l'autre sera supprimée et fera place à un "vide".

Macro: resserrera l'ensemble.
Et pourquoi pas sur une autre feuille? (de manière à contrôler les formules).

Merci pour votre aide.
 

Pièces jointes

  • CelluleVideDecalerGauche(2).xlsm
    24.6 KB · Affichages: 66

Nougatine95

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

Bonjour Le Forum,

Je reviens sur ce sujet...

Recherche… macro… désespérément!

Macro recherchée:
Décaler vers la gauche, les cellules d'une ligne dès que la cellule précédente est vide.

La macro proposée par Shape1600 est très bonne si extraction sans condition, ce que je n'avais pas mentionné au départ.
J'étais allée directement à l'étape qui me posait problème sans avoir indiqué de quelle manière j'en étais arrivée là.
Qu'il m'en excuse.
Sa 2nde macro me servira pour un autre sujet, je l'en remercie.

Chaque cellule contient donc une formule.
La formule demande d'extraire des lettres d'une chaîne de texte (contenant parfois des lettres entre []; j'ai extrait 1 lettre par cellule ou un vide.

Condition d'extraction des lettres entre crochets: Extraire la 1ère lettre si est différente de la lettre figurant en ligne 2 (même colonne); sinon extraction de la suivante.
Et ainsi de suite.

L'extraction des lettres avec cette condition ne me pose pas de problème avec formule (quoiqu'il y avait peut-être plus simple!)…
Je me retrouve ainsi avec le problème présenté en début de poste: une lettre ou un vide par cellule.

Maintenant je souhaiterais resserrer l'ensemble de façon à ce que les cases vides générées par la présence de [crochets] en amont, n'existent plus, je l'ai fait avec une nouvelle formule, mon souhait serait de le faire avec macro.
Mais est-ce possible…

Je joins le même fichier retravaillé pour + de clarté.

Merci pour votre aide.



désolée pour: La macro proposée par Shape1600...

Staple1600 évidemment !
 

Pièces jointes

  • CelluleVideDecalerGauche(3).xlsm
    24.8 KB · Affichages: 64
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

Bonjour à tous

Nougatine95
Si tu commençais par nous dire à quoi cela doit servir concrètement?

Ensuite peux-tu préciser, stp les points suivants
  • A quoi correspondent les lettres en E2:Z2
  • Pourquoi les mots contiennent ces [XX] ?
  • Peut-on envisage une solution VBA de A à Z ?
(donc on peut supprimer les formules ou plutôt ne pas les utiliser)​
 

Nougatine95

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

Bonjour Staple1600,
re-Le Forum,

Il s'agit d'extraire des chaînes d'acides aminés.
Les lettres en E2:Z2 sont: une chaîne type normale, pourrait-on dire. (en réel E2 à *x* colonnes)

Pour faciliter la mise en ligne du fichier, j'ai mis des mots.
Les lettres réelles n'ont rien à voir mais c'est sans importance pour l'élaboration.
Le principe d'extraction est absolument identique.

Les lettres sont variables d'une ligne à l'autre (la ligne 2 est fixe).
La position des [ ] est variable.
Le nombre de colonnes varient d'une ligne à l'autre.
Le nombre de lignes est largement >.

L'extraction définitive est résolue, mais je la trouve lourde.
Elle nécessite un travail sur 2 feuilles, compte tenu du nombre de colonnes (+ ou - 200) et de quelques centaines de lignes.

Oui, on peut supprimer les formules.

Merci.
 

Staple1600

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

Re


Justement, peux-tu préciser plus en détails ceci, stp ?
Le principe d'extraction est absolument identique.

Cela serait peut-être plus parlant avec des données réelles.
(donc tes chaines d'acide aminés)
Car par exemple ici
EXCELL[IE]NCE
(le fait d'avoir un mot réel m'a induit en erreur)
Car je cherchais par rapport à l'existence du mot EXCELLENCE
 
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

A nouveau,

Je n'ai pas ces données avec moi.

Mais j'ai testé sur fichier réel.
Mes extractions finales sont justes.

Un nouveau petit fichier joint pour lettres sans rapport avec mots, ainsi éviter de partir dans la recherche de mots vraisemblables.
 

Pièces jointes

  • CelluleVideDecalerGauche(4).xlsm
    23.7 KB · Affichages: 52

Staple1600

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

Re

Il me manque toujours ces explications
Le principe d'extraction

Par exemple, pour EXCELL[IE]NCE
quelle règle fit qu'il faut zapper le I et pas le E
(et qudi des autres lettres de l'alphabet?)

Bref peux-tu m'indique des règles simples qui reprennent les cas de figures possible ?
 

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 les 2 lettres entre-crochets: on prend une lettre ou l'autre selon condition suivante:

Pas à pas avec 2 exemples:

exemple1:
-colonne K renvoie un [ --> donc on met un "vide"
-pour cellule suivante soit la colonne L Il faut zapper la 1ère lettre entre [] si elle est identique à la lettre en L$2, donc on met un "vide"
-pour cellule suivante soit la colonne M on met la 2nde lettre (puisque 1ère lettre zappée)
-colonne N renvoie un ] --> donc on met un "vide"

exemple2:
-colonne B revoie un [ --> donc on met un "vide"
-pour cellule suivante soit la colonne C Il faut garder la 1ère lettre entre [] si elle est différente à la lettre en C$2
-pour cellule suivante soit la colonne D on met un "vide" (puisque 1ère lettre déjà posée)
-colonne E renvoie un ] --> donc on met un "vide"
 

Nougatine95

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

Les lettres n'ont aucune importance, elles varient.
Ce qui importe c'est le contenu des crochets: on en garde 1 lettre sur 2 selon critère ci-dessus.
 

Staple1600

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

Re

Ce que je ne comprends pas (comme déjà indiqué)
même si tu as fourni cet élément de réponse
Les lettres en E2:Z2 sont: une chaîne type normale, pourrait-on dire. (en réel E2 à *x* colonnes)

Pourquoi sont elles dans cet ordre ? Est-ce une string constante (ce qui pourrait nous aider en VBA)
 

Nougatine95

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

Les données sont constantes pour ce cas, pour cette page, mais de nombreuses pages seront à traiter.

Donc pas envisageables de les considérer définitivement comme fixes.

La trame sera la même:
-des lettres,
-des [],
-une ligne 2 toujours fixe, mais au contenu de lettres différents selon les pages
-un nombre variable de colonnes et de lignes
 

Discussions similaires

Statistiques des forums

Discussions
312 236
Messages
2 086 481
Membres
103 232
dernier inscrit
logan035