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

Dispatcher une case en plusieurs

  • Initiateur de la discussion Initiateur de la discussion Vantâ
  • 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 !

V

Vantâ

Guest
Bonjour !

J'ai un petit problème par rapport à mon tableur Excel 2007.
En effet, il m'a été demandé de dispatcher une liste énorme de mails, contenus dans une seule case et séparés par des point-virgules (liste venant sûrement d'Outlook), en plusieurs cases, chacune contenant un mail.
J'ai donc commencé avec du copier-coller, mais je me rend compte que j'en aurai pour une éternité...

Pourriez-vous donc m'aider?

D'avance, un grand merci !
 
Re : Dispatcher une case en plusieurs

Bjr Vanta,

Tu peux utiliser Menu Données - Convertir (délimité par ";").
Les mails vont se retrouver par colonne.

Après, il n'y a plus qu'à transposer.

A++
Sophie
 
Dernière édition:
Re : Dispatcher une case en plusieurs

Bonjour Vantâ

Voici une procédure qui pourrait être utile :
Code:
[B][COLOR="DarkSlateGray"]Sub toto()
Dim i&, j&, n&, tmp, oDat, sDat()
   With Sheets("Feuil1")
      oDat = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Value
   End With
   For i = 1 To UBound(oDat, 1)
      tmp = Split(";" & oDat(i, 1), ";")
      For j = 1 To UBound(tmp)
         n = n + 1
         ReDim Preserve sDat(1 To 1, 1 To n)
         sDat(1, n) = tmp(j)
      Next j
   Next i
   With Sheets("Feuil2")
      .Range(.Cells(1, 1), .Cells(UBound(sDat, 2), 1)) = WorksheetFunction.Transpose(sDat)
   End With
End Sub[/COLOR][/B]
Vos données étant dans la colonne A de la feuille Feuil1 (à partir de A1), la procédure renvoie le résultat dans la colonne A de la feuille Feuil2.​
 

Pièces jointes

Re : Dispatcher une case en plusieurs

Re...
Merci beaucoup.
Par contre, il y aurait il possibilité de les mettre en ligne, plutôt qu'en colonne?
Le code devient :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim i&, j&, n&, tmp, oDat, sDat()
   With Sheets("Feuil1")
      oDat = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Value
   End With
   For i = 1 To UBound(oDat, 1)
      tmp = Split(";" & oDat(i, 1), ";")
      For j = 1 To UBound(tmp)
         n = n + 1
         ReDim Preserve sDat(1 To 1, 1 To n)
         sDat(1, n) = tmp(j)
      Next j
   Next i
   With Sheets("Feuil2")
      .Range(.Cells(1, 1), .Cells(1, UBound(sDat, 2))) = sDat
   End With
End Sub[/B][/COLOR]
Voyez le fichier joint.​
ROGER2327
#3866


Lundi 23 Gidouille 137 (Saint Ombilic, gymnosophiste, SQ)
19 Messidor An CCXVIII
2010-W27-3T09:11:19Z
 

Pièces jointes

Re : Dispatcher une case en plusieurs

2 petits problèmes pour la dernière macro:
- Je viens de me rendre compte qu'il y a un espace entre le point-virgule et le nom qui suit, et la macro n'a pas l'air de fonctionner si je n'enlève pas les espaces.
- Quand j'enlève les espaces et que je l'exécute, il les met quand même en colonne :-/
 
Re : Dispatcher une case en plusieurs

Re...
Je viens de rouvrir le classeur joint ci-dessus sans constater ce que vous décrivez. Bizarre...

Quant au problème des espaces superflues, il se règle en modifiant le code comme suit (modification en rouge) :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim i&, j&, n&, tmp, oDat, sDat()
   With Sheets("Feuil1")
      oDat = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Value
   End With
   For i = 1 To UBound(oDat, 1)
      tmp = Split(";" & oDat(i, 1), ";")
      For j = 1 To UBound(tmp)
         n = n + 1
         ReDim Preserve sDat(1 To 1, 1 To n)
         sDat(1, n) = [COLOR="Red"]Trim([/COLOR]tmp(j)[COLOR="Red"])[/COLOR]
      Next j
   Next i
   With Sheets("Feuil2")
      .Range(.Cells(1, 1), .Cells(1, UBound(sDat, 2))) = sDat
   End With
End Sub[/B][/COLOR]
Voyez le classeur joint.​
ROGER2327
#3867


Lundi 23 Gidouille 137 (Saint Ombilic, gymnosophiste, SQ)
19 Messidor An CCXVIII
2010-W27-3T09:40:27Z
 

Pièces jointes

Re : Dispatcher une case en plusieurs

Suite...
À la suite d'un message de Sofhy demandant quelques commentaires, voici le code succinctement commenté :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim i&, j&, n&, tmp, oDat, sDat() [COLOR="DarkRed"]'Ecrire i& est équivalent à écrire i As Long.[/COLOR]

   [COLOR="DarkRed"]'Mettre les données de la colonne A Feuil1 dans le tableau de données oDat :[/COLOR]
   With Sheets("Feuil1")
      oDat = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown)).Value
   End With
   
   [COLOR="DarkRed"]'Parcourir successivement les données du tableau oDat :[/COLOR]
   For i = 1 To UBound(oDat, 1)
      [COLOR="DarkRed"]'Séparer les données de la ligne i du tableau oDat séparées par ";" _
      et les placer dans un tableau uniligne tmp :[/COLOR]
      tmp = Split(";" & oDat(i, 1), ";")
      [COLOR="DarkRed"]'Parcourir successivement les données du tableau tmp :[/COLOR]
      For j = 1 To UBound(tmp)
         [COLOR="DarkRed"]'...et les compter :[/COLOR]
         n = n + 1
         [COLOR="DarkRed"]'...puis les placer dans le tableau uniligne sDat :[/COLOR]
         ReDim Preserve sDat(1 To 1, 1 To n)
         sDat(1, n) = Trim(tmp(j)) [COLOR="DarkRed"]'Trim sert à supprimer les espaces inutiles.[/COLOR]
      Next j
   Next i
   
   [COLOR="DarkRed"]'Mettre les données extraites dans la ligne 1 de Feuil2 :[/COLOR]
   With Sheets("Feuil2")
      .Range(.Cells(1, 1), .Cells(1, UBound(sDat, 2))) = sDat
   End With
End Sub[/B][/COLOR]
ROGER2327
#3871


Lundi 23 Gidouille 137 (Saint Ombilic, gymnosophiste, SQ)
19 Messidor An CCXVIII
2010-W27-3T10:42:08Z
 
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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

E
Réponses
1
Affichages
1 K
Elegancya
E
A
Réponses
3
Affichages
2 K
A
S
  • Question Question
Réponses
8
Affichages
1 K
sam14700
S
U
Réponses
0
Affichages
1 K
uolmo
U
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…