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
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.
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).
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é.
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.
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
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"
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