Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Séparer le contenu de plusieurs colonnes en 2

  • Initiateur de la discussion Initiateur de la discussion F1.999
  • 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 !

F

F1.999

Guest
Bonjour,

voici mon problème, j'ai un fichier avec de nombreuses colonnes (+ de 5000) contenant chacune 2 caractères. Ce que j'aimerais faire, c'est disposer chacun des 2 caractères dans une colonne individuelle et ce, pour l'ensemble des colonnes. Cela revient à avoir un seul caractère par colonne. J'ai joint une partie du fichier au cas où je n'aurais pas été très clair.
Merci d'avance
 

Pièces jointes

Re : Séparer le contenu de plusieurs colonnes en 2

Bonsoir et Bienvenu sur XLD,
en G1 :
Code:
=STXT(DECALER($A1;;ENT((COLONNES($G:G)-1)/2));MOD(COLONNES($G:G)-1;2)+1;1)
@ tirer vers le bas et vers la droite
Amicalement
 
Re : Séparer le contenu de plusieurs colonnes en 2

Bonsoir F1.999

Il suffit d'utiliser les fonctions GAUCHE() et DROITE() d'Excel
Les 2 première cellules : A20 =GAUCHE(A1;1) / B20 =DROITE(A1;1)
Ensuite de décaler : C20 =GAUCHE(B1;1) / D20 =DROITE(B1;1)
C20 et D20 à copier et recoller vers la droite su autant de colonne que tu as besoin

Edit : Oups salut Rachid, alors là je me fais tout petit, mé tout tout petit 😉😀

A+
 
Dernière modification par un modérateur:
Re : Séparer le contenu de plusieurs colonnes en 2

Bonjour, cette macro devrait convenir :
VB:
Private Sub CommandButton1_Click()
Dim c As Range, Der As Long
Application.ScreenUpdating = False
Set c = Range("A1").End(xlToRight)
Der = c.End(xlDown).Row
Do
  c.Offset(, 1).Resize(, 2).EntireColumn.Insert
  Range(c.Offset(, 1), c.Offset(Der - 1, 1)).FormulaR1C1 = "=LEFT(RC[-1],1)"
  Range(c.Offset(, 2), c.Offset(Der - 1, 2)).FormulaR1C1 = "=Right(RC[-2],1)"
  Range(c.Offset(, 1), c.Offset(Der - 1, 2)).Value = Range(c.Offset(, 1), c.Offset(Der - 1, 2)).Value
  If c.Column = 1 Then Exit Do
  Set c = c.Offset(, -1)
  c.Offset(, 1).EntireColumn.Delete
Loop
c.EntireColumn.Delete
Application.ScreenUpdating = True
End Sub

cf. fichier joint

Edit : Bonjour Rachid, Bruno.
 

Pièces jointes

Re : Séparer le contenu de plusieurs colonnes en 2

Merci Rachid_0661 et BrunoM45 pour vos réponses, même si c'est la réponse de Softmama qui correspond le mieux à mon problème. En effet, j'ai plus de 5000 colonnes, je n'ai donc pas envie de retaper la formule à chaque fois. Un grand merci à toi Softmama. J'ai rajouter "--" dans les cellules vides de mon fichier car autrement la macro s’arrêtait dès qu'elle trouvait une cellule vide sur la première ligne. Maintenant ça marche nickel.

Encore un grand merci à vous et à bientôt sur ce forum
 
Re : Séparer le contenu de plusieurs colonnes en 2

Bonsoir @ tous,
même si c'est la réponse de Softmama qui correspond le mieux à mon problème. En effet, j'ai plus de 5000 colonnes, je n'ai donc pas envie de retaper la formule à chaque fois
c'est vrai que la macro est plus rapide dans le cas de 5000 colonnes, je remercie notre ami Softmama, mais tu n'as pas besoin de retaper la formule a chaque fois, je pense que j'ai dis,
@ tirer vers le bas et vers la droite

J'ai rajouter "--" dans les cellules vides de mon fichier car autrement la macro s’arrêtait dès qu'elle trouvait une cellule vide sur la première ligne.
Si tu as mis cette possiblite d'avoir des cellules vides, je suis sur que notre cher ami va l'apprendre en compte et te donnera une macro adaptee.
Amicalement
 
Re : Séparer le contenu de plusieurs colonnes en 2

Bonsoir tout le monde,

Tu dois pouvoir adapter ainsi, pour gérer les colonnes vides :
VB:
Private Sub CommandButton1_Click()
Dim c As Range, Der As Long
Application.ScreenUpdating = False
Set c = Cells(1, ActiveSheet.UsedRange.Columns.Count)
Der = ActiveSheet.UsedRange.Rows.Count
Do
  If Application.CountA(c.EntireColumn) > 0 Then
    c.Offset(, 1).Resize(, 2).EntireColumn.Insert
    Range(c.Offset(, 1), c.Offset(Der - 1, 1)).FormulaR1C1 = "=LEFT(RC[-1],1)"
    Range(c.Offset(, 2), c.Offset(Der - 1, 2)).FormulaR1C1 = "=Right(RC[-2],1)"
    Range(c.Offset(, 1), c.Offset(Der - 1, 2)).Value = Range(c.Offset(, 1), c.Offset(Der - 1, 2)).Value
  End If
  If c.Column = 1 Then Exit Do
  Set c = c.Offset(, -1)
  c.Offset(, 1).EntireColumn.Delete
Loop
c.EntireColumn.Delete
Application.ScreenUpdating = True
End Sub
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
345
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…