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

XL pour MAC nettoyage et tri de données

agnesd

XLDnaute Occasionnel
bonjour,

Comme la dernière fois où j'ai posté sur le forum (2022 ?), j'ai 12.000 lignes de données à nettoyer qui figurent toutes à la suite dans la même colonne... et aucune "régularité", je veux dire par là que parfois j'ai toutes les données, parfois non, et que je veux les formater dans un tableau.

Pour l'instant, je le fais manuellement avec copier coller, mais cela n'avance pas vite...

J'utilise la version d'Excel pour Mac.

Si jamais quelqu'un a une idée ?

Un grand merci et bon week-end à toutes et tous.
 

Pièces jointes

  • donnees.xlsx
    11.1 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @agnesd ,

Un essai via une procédure VBA dans le classeur joint. J'ai pris pour hypothèse que les 4 premiers champs étaient toujours présents (Nom, Catégorie, Pays, Media). Les deux champs suivants sont présents ou non (Mail, Tel).
Cliquer sur le bouton Hop!

Le code est dans le module de la feuille "Feuil1" :
VB:
Sub Ventiler()
Dim der&, t, r, i&, j&, n&
   der = Cells(Rows.Count, "a").End(xlUp).Row + 6
   t = Range("a3:a" & der).Value
   ReDim r(1 To UBound(t) / 3, 1 To 6)
   i = 1
   Do
      Do While i <= UBound(t)
         If InStr(t(i, 1), ",") > 0 Then Exit Do
         i = i + 1
      Loop
      If i > UBound(t) Then Exit Do
      n = n + 1
      For j = 1 To 4
         r(n, j) = t(i, 1)
         i = i + 1
      Next j
      If InStr(t(i, 1), "@") > 0 Then r(n, 5) = t(i, 1): i = i + 1
      If InStr(t(i, 1), "+") > 0 Then r(n, 6) = t(i, 1)
   Loop
   Range("b2:g" & Rows.Count).Clear
   If n > 0 Then
      With Range("b2").Resize(n, 6)
         .Value = r
         .Borders.LineStyle = xlContinuous
         .WrapText = True
         .VerticalAlignment = xlVAlignCenter
      End With
   End If
End Sub
 

Pièces jointes

  • agnesd- donnees- v1.xlsm
    19.9 KB · Affichages: 0
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai comparé les deux macros, j'obtient sur mon vieux PC avec XL2007 un rapport 4 sur les temps d'éxécution.

Et je ne comprends pas cet écart car les approches sont relativement similaires. Mapomme, une idée ?
 

Pièces jointes

  • donnees mesure temps.xlsm
    117.9 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @agnesd,

Une version (avec les mêmes hypothèses) par formules.

Recopiez la plage B3 à H3 vers le bas jusqu'à la ligne correspondant à la dernière ligne de données en colonne A. Pour l'exemple jusqu'à la ligne 34.
 

Pièces jointes

  • agnesd- donnees- v11.xlsx
    12 KB · Affichages: 1

agnesd

XLDnaute Occasionnel
Bonjour et surtout un GRAND merci à vous, je vais regarder cela de près.

J'avais suivi les cours de "perfectionnement" de la mairie de Paris mais même le cours au niveau le plus élevé est loin de ce que vous savez faire...

Bonne journée, je reviens vers vous après !
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @agnesd ,

A la suite de la remarque de @sylvanu, j'ai modifié le formatage du résultat afin d'accélérer le traitement.
VB:
Sub Ventiler()
Dim der&, t, r, i&, j&, n&, debut
   debut = Timer
   Application.ScreenUpdating = False
   der = Cells(Rows.Count, "a").End(xlUp).Row + 6
   t = Range("a3:a" & der).Value
   ReDim r(1 To UBound(t) / 3, 1 To 6)
   i = 1
   Do
      Do While i <= UBound(t)
         If InStr(t(i, 1), ",") > 0 Then Exit Do
         i = i + 1
      Loop
      If i > UBound(t) Then Exit Do
      n = n + 1
      For j = 1 To 4
         r(n, j) = t(i, 1)
         i = i + 1
      Next j
      If InStr(t(i, 1), "@") > 0 Then r(n, 5) = t(i, 1): i = i + 1
      If InStr(t(i, 1), "+") > 0 Then r(n, 6) = t(i, 1)
   Loop
   Range("b2:g" & Rows.Count).Clear
   If n > 0 Then
      With Range("b2").Resize(n, 6)
         .Value = r
         .Borders.LineStyle = xlContinuous
         .EntireColumn.AutoFit
      End With
   End If
   Application.Goto [a1], True
   MsgBox "Durée : " & Format(Timer - debut, "0.00\ sec.")
End Sub
 

Pièces jointes

  • agnesd- donnees- v1a.xlsm
    20.6 KB · Affichages: 0

agnesd

XLDnaute Occasionnel
Bonjour à nouveau, un grand grand merci encore.

Pour la macro je n'arrive pas à la faire marcher, je ne sais pas si c'est lié au fait que j'utilise excel pour mac ?

Par contre la solution proposée par Mapomme marche très bien, juste 4 lignes de mon fichier à corriger, je crois que ce sont les parenthèses dans la colonne pays de ma liste globale qui posent parfois problème : "KOREA (South)" mais sinon c'est super. J'ai juste tiré pour numéroter les lignes contenant la cellule avec la virgule (c'est à dire celles avec le nom de la personne) puis tiré la formule et cela ne prend qu'un instant. Merci, sinon j'en avais pour 3 jours. Et je précise que ce n'est pas pour spammer les gens ensuite ;-)
 

agnesd

XLDnaute Occasionnel
En fait c'est plus la virgule pardon, dans par exemple "Korea, Republic of (South Korea)" mais tout ceci demeure très facile à corriger à la main, d'autant que cela crée en fait juste des doublons à supprimer ensuite en enlevant ce qui n'est pas un pays... Bonne après-midi et encore merci !
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @sylvanu ,

J'ai comparé les deux macros, j'obtient sur mon vieux PC avec XL2007 un rapport 4 sur les temps d'éxécution.

Et je ne comprends pas cet écart car les approches sont relativement similaires. Mapomme, une idée ?

Alors après examen à la loupe :

  • j'avais oublié de figer l'écran
  • et surtout ce sont les deux formatage de la zone résultat ( .WrapText = True et .VerticalAlignment = xlVAlignCenter) qui pénalisent le plus la durée d'exécution
J'ai mis deux fichiers avec 10 000 lignes de données et avec l'affichage des durées. Les durées d'exécution sont du même ordre après suppression des formatages pénalisant pour ma version.

Ta remarque a été bénéfique. Je sais maintenant que WrapText et VerticalAlignment prennent un peu de temps. Tout est relatif, ce n'est pas monstrueux non plus, mais c'est bien de le savoir.
 

Pièces jointes

  • sylvanu- donnees- v1.xlsm
    122.9 KB · Affichages: 1
  • mapomme- donnees- v1.xlsm
    121.3 KB · Affichages: 1
Bonjour le fil, le forum

@agnesd , vos données sont elles fictives ?
si ce n'est pas le cas, merci de l'indiquer pour que je modifie le fil
si c'est le cas, je vous rappelle l'article 1.1 de la charte XLD

1.1 - Conformité RGPD
Tout message ou fichier déposé sur ce site ne doit pas comporter de données à caractère personnel contrevenant au RGPD (Réglement Général sur la Protection des Données).
Il convient pour cela d’anonymiser toutes les données permettant d’identifier directement ou indirectement une personne physique ou morale.
Si vos données sont fictives mais réalistes et peuvent prêter à confusion, vous devez impérativement préciser leur caractère fictif dans votre demande.
XLD ne saurait être tenu responsable au cas où un visiteur du site posterait des données non conformes à la législation en vigueur.
Si vous détectez une non conformité, merci d'alerter le webmaster de ce site en utilisant, dans le post concerné, le bouton "signaler" dédié ou en envoyant un courriel à l'adresse webmaster@excel-downloads.com, nous supprimerons les données dans les plus brefs délais.

Cordialement,
Bernard_XLD
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Mapomme, et Merci.
Je m'étais attaché à l'analyse de la partie "opérationnelle" de la macro, sans m'occuper de la mise en forme, qui n'offre pas d'importance sur l'analyse.
.... et c"est ça qui prends du temps.
C'est vrai que c'est bon à savoir, et maintenant j'ai compris.
Je me suis amusé à faire quelques mesures et c'est vrai que c'est lent.
Par contre sur une feuille vierge sans données, c'est très rapide. Sur mon PC XL2007, 20klignes :

Donc la solution serait peut être ( quand c'est possible ), de faire la mise en forme sur une feuille vierge, puis ensuite d'y coller les données. Bon à savoir.
 

Discussions similaires

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