Etablir une liste des noms sans espace...

  • Initiateur de la discussion Initiateur de la discussion Adamev
  • Date de début Date de début

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 !

Adamev

XLDnaute Occasionnel
Bonjour le forum,
J'ai des noms (10 par ex.) écrits dans la plage A1:C10, chaque noms est écrit une seule fois. Ces noms sont donc éparpillés dans cette plage.
Je voudais établir cette liste dans la ligne F1:F10, c-à-d en éliminant les espaces entre les cellules contenant ces noms; en gardant la plage A1:C10 telle quelle.
Merci d'avance
 
Re : Etablir une liste des noms sans espace...

Bonsoir Adamev, le fil, le forum

Une solution basique par macro

Code:
Sub Macro1()
Dim i&
Range("A1:C10").Copy Range("F1")
For i = 1 To 10
Cells(i, "F").Resize(, 3).Sort Key1:=Range("F" & i), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight
Next i
[F1:F10].SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub

PS: code testé, donc fonctionnel
 
Re : Etablir une liste des noms sans espace...

Bonsoir,

Code:
 Set mondico = CreateObject("Scripting.Dictionary")
 For Each c In [A1:C10].SpecialCells(xlCellTypeConstants, 23)
   mondico(c.Value) = c.Value
 Next
 [F1].Resize(mondico.Count) = Application.Transpose(mondico.keys)

JB
 
Re : Etablir une liste des noms sans espace...

Bonjour Staple1600; le forum,

PS: code testé, donc fonctionnel

Merci pour le code.
Oui ça marche, mais pas tout à fait comme souhaité. La liste des noms (chez moi) s'étale sur la plage f1:g10 et non pas sur la colonne f1:f10.

Etant débutant en VBA, je suis incapable de comprendre comment rédiger un code.

Est-il possible d'atteindre le même résultat sans VBA?
 
Re : Etablir une liste des noms sans espace...

Bonjour BOISGONTIER, le fil, le forum,

Bonsoir,

Code:
 Set mondico = CreateObject("Scripting.Dictionary")
 For Each c In [A1:C10].SpecialCells(xlCellTypeConstants, 23)
   mondico(c.Value) = c.Value
 Next
 [F1].Resize(mondico.Count) = Application.Transpose(mondico.keys)

JB

Merci pour la réponse.
Le code fonctionne bien, je te remercie.

Une question: Est-il possible de résoudre ce problème sans VBA?
 
Re : Etablir une liste des noms sans espace...

Re


La liste des noms (chez moi) s'étale sur la plage f1:g10 et non pas sur la colonne f1:f10.
Pourtant tu écrivais dans ton premier message 🙄
Je voudais établir cette liste dans la ligne F1:F10,
Alors quelle est en définitive la bonne plage de cellules?

PS: le code de BOISGONTIER copie pourtant les valeurs dans la colonne F !
 
Re : Etablir une liste des noms sans espace...

Bonjour BOISGONTIER, le fil, le forum,



Merci pour la réponse.
Le code fonctionne bien, je te remercie.

Une question: Est-il possible de résoudre ce problème sans VBA?

Bonsoir à tous,

Après quelques heures (beaucoup en fait ! 😕) de tournage en rond et d'arrachage des cheveux, je te propose une solution, dont je ne suis pas tout à fait satisfait.

J'aimerais tout d'abord remercier Tibo et Boisgontier pour leur aide.

Je pense qu'ils vont d'ailleurs facilement trouver une solution au problème qui persiste dans mon fichier, en l'occurrence de supprimer la colonne intermédiaire que je n'ai pas réussi à contourner.

J'ai créé un tableau de A1 à C10, contenant 10 noms de façon aléatoire.
On peut évidemment en ajouter ou en supprimer.
En colonne F on retrouve une liste des 10 noms, comme tu le souhaitais.
J'ai utilisé pour ça la formule
Code:
=INDEX($M$1:$M$40;MIN(SI(NB.SI(F$1:F1;$M$1:$M$40)=0;SI($M$1:$M$40<>0;LIGNE($M$1:$M$40)))))&""
à copier vers le bas.

Formule qui fait référence à la colonne M où j'ai adapté une formule de Boisgontier
Code:
=DECALER($A$1;ENT((LIGNES($1:1)-1)/3);(LIGNES($1:1)-1)-ENT((LIGNES($1:1)-1)/3)*3)

Voilà. J'ai tenté vainement de mixer les deux, mais sans réussir.

Fichier joint.

A+
 

Pièces jointes

Re : Etablir une liste des noms sans espace...

Bonsoir Calvus,

Une tentative avec une formule matricielle :

Code:
=SI(LIGNES($1:1)>NBVAL($A$1:$C$10);"";INDEX($A$1:$C$10;PETITE.VALEUR(SI(
$A$1:$C$10<>"";($A$1:$C$10<>"")*LIGNE($A$1:$A$10));LIGNES($1:1));MOD(
PETITE.VALEUR(SI($A$1:$C$10<>"";($A$1:$C$10<>"")*LIGNE($A$1:$A$10)+($A$1:$C$10
<>"")*COLONNE($A$1:$C$1)/100);LIGNES($1:1));1)*100))
Formule matricielle à valider par CTRL + MAJ + ENTREE

à recopier vers le bas

@+

Edit : Bing ! Salut David, le temps de tester et de poster, pas vu 🙂

@+
 
Re : Etablir une liste des noms sans espace...

Bonsoir,

Bravo à tous les deux !

Comme quoi tous les chemins mènent à la solution.

Va falloir digérer maintenant, encore une fois.

Très intéressant David ta seconde solution qui permet de trier par colonne !

Merci
 
Dernière édition:
Re : Etablir une liste des noms sans espace...

Bonjour,


Ordre colonnes
Le champ source et les formules peuvent être déplacés


=SI(LIGNES($1:1)<=NBVAL(champ);
INDEX(champ;MOD(PETITE.VALEUR(SI(champ<>"";COLONNE(champ)*10^5+LIGNE(INDIRECT("1:"&LIGNES(champ))));LIGNES($1:1));10^5);
ENT(PETITE.VALEUR(SI(champ<>"";COLONNE(champ)*10^5+LIGNE(INDIRECT("1:"&LIGNES(champ))));LIGNES($1:1))/10^5)-COLONNE(champ)+1);"")

Valider avec maj+crtrl+entrée

Ordre lignes
Le champ source et les formules peuvent être déplacés

=SI(LIGNES($1:1)<=NBVAL(champ);
INDEX(champ;PETITE.VALEUR(SI(champ<>"";LIGNE(INDIRECT("1:"&LIGNES(champ))));LIGNES($1:1));
MOD(PETITE.VALEUR(SI(champ<>"";LIGNE(INDIRECT("1:"&LIGNES(champ)))*10^5+COLONNE(champ));LIGNES($1:1));10^5)-COLONNE(champ)+1);"")


http://boisgontierjacques.free.fr/fichiers/fonctionsperso/FonctionSansVideTrie.xls


JB
 

Pièces jointes

Dernière édition:
Re : Etablir une liste des noms sans espace...

Bonjour,
en s'inspirant des formules de JB et de Tibo :

Ordre lignes :
=SI(LIGNES($1:1)<=NBVAL(champ);INDIRECT(ADRESSE(PETITE.VALEUR(SI(champ<>"";LIGNE(champ));LIGNES($1:1));MOD(PETITE.VALEUR(SI(champ<>"";LIGNE(champ)*10^5+COLONNE(champ));LIGNES($1:1));10^5)));"")

Ordre colonnes :
=SI(LIGNES($1:1)<=NBVAL(champ);INDIRECT(ADRESSE(MOD(PETITE.VALEUR(SI(champ<>"";COLONNE(champ)*10^5+LIGNE(champ));LIGNES($1:1));10^5);PETITE.VALEUR(SI(champ<>"";COLONNE(champ));LIGNES($1:1))));"")

permet de raccourcir légèrement la formule en évitant l'utilisation des
LIGNE(INDIRECT("1:"&LIGNES(champ)))
A+
 
Dernière édition:
- 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

Discussions similaires

Réponses
7
Affichages
1 K
Retour