Macro pour mise en forme

Bonjour cher forum,

Je dois extraire des données et les formater en Excel afin de les importer dans une application selon un template spécifique. Malheureusement, je ne peux les recevoir dans une fichier Excel. Or, je dois les convertir, car leur format ne respecte pas le template!

Pour l'instant, je procède en 3 étapes :

  • Changer le format d'une feuil vierge en texte (par macro)
  • Copier-coller les données dans la feuil vierge en A2
  • Exécute la macro de mise en forme

L'onglet rouge de mon fichier montre les données si je faisais un bête copier-coller dans une feuille.

L'onglet jaune montre le résultat obtenu avec la macro que j'ai tenté de développer.

Et l'onglet vert, montre le résultat souhaité.

Cela dit, j'aurais besoin d'un coup de pouce pour bonifier et améliorer la macro.

J'aimerais que chaque caserne (Colonne B) soit associé à sa division (colonne A), voir Master. Et que chaque numéro de caserne et de groupe soit nommé : exemple Division 7, Caserne 50, Groupe 4, etc.

J'aimerais aussi, pour éviter d'autre manipulation, que la macro s'exécute sur les données copiées, et non pas sur des plages spécifiques.

D'où j'extrais les données, il arrive parfois que certaines d'entre-elles n'aient pas toujours le même format, celles-là je n'aurais pas le choix de les modifier manuellement avant d'appliquer la macro Étape 2.

Merci pour votre précieuse aide.

A+

11mj-import.zip (43.76 Ko)

Bonjour,

En exécutant ta macro, je n'obtiens pas les même résultats que toi et je m'interroge sur la nécessité de répartir des dates sur trois colonnes qui donne des résultats plutôt surprenant !

Je te retourne ton classeur pour que tu constates par toi même (voir la feuille "Extratction_brute") :

8mj-import-v2.zip (61.86 Ko)

J'aimerais que chaque caserne (Colonne B) soit associé à sa division (colonne A), voir Master. Et que chaque numéro de caserne et de groupe soit nommé : exemple Division 7, Caserne 50, Groupe 4, etc.

Pour faire coïncider casernes et divisions, je ne voit pas où on pourrait trouver une correspondance, je parle bien sûr des résultats que moi j'ai obtenus avec ta macro et d'ailleurs, je ne vois pas comment tu as pus obtenir les numéros de casernes à partir d'une date fractionnée ?

Bonjour Theze,

merci pour le retour. Pardonnez moi d'avance pour cette longue explication. J'essaie de faire court!

En fait, l'onglet extraction_brute serait le résultat si je faisais un bête copier coller des données. Notez que les données me viennent d'un mail dans un fichier (non excel) dont l'extension est propre à Lotus Notes. Et pour une raison que j'ignore (mais je soupçonne le trait d'union), les données des colonnes F:H se convertissent en date, alors qu'en fait ce ne sont pas des dates, mais plutôt des caserne-groupe, genre : 45-3, 23-1, etc. Le premier chiffre représente le # d'une caserne, le second le # de groupe. C'est pourquoi la macro converti cette colonne en deux, une pour la caserne, l'autre pour le groupe.

Malheureusement, les divisions ne sont pas dans le mail. Dans l'onglet Master, il y a une liste qui indique dans quelle division se trouve chaque caserne.

Pour arriver au résultat-atteint, j'ai tout d'abord converti une feuille vierge en format texte (exécution de la macro Étape1_MF) pour éviter que la colonne des caserne-groupe sorte en date ; ensuite, je fais une coller-copier des données du mail en A2, et pour terminer j'exécute la seconde macro Étape2_MF pour obtenir le template souhaité.

Si vous suivez ces étapes en vous servant d'un copier-coller des données de l'onglet extraction_brute, vous verrez que le résultat donne bien celui de l'onglet Résultat-atteint (du moins, c'est ce que cela donne chez moi).

Ce qu'il manque à la macro, c'est de pouvoir associer chaque caserne à sa division sous la forme Division x, et que les # de caserne et de groupe se retrouve sous la forme Caserne x (colonne B) et Groupe x (colonne C), voir les premières lignes de l'onget Résultat_souhaité.

Merci beaucoup de l'intérêt que vous portez à mon post.

A+

J'ai fais une petite fonction de conversion et pour ce qui est de faire correspondre caserne et groupe c'est très facile avec ta table de correspondance mais comme Excel transforme les valeurs en date et en plus à sa sauce, il est difficile de savoir si c'est le mois qui correspond, l'année ou le jour

J'ai fais un petit montage avec les données brutes comme je les ai dans le classeur, après conversion avec la fonction et celles que tu montre dans ta feuille, on peut voir que pour certaines c'est bon, il y a correspondance (il suffit juste de dispatcher les deux valeurs séparées par le tiret) mais pour d'autres non :

conversion

Voici une Sub pour la correspondance par rapport à ta feuille "Résultat-atteint" en prenant pour référence la colonne B de cette feuille et pour la plage des correspondances la plage "K2:S14". Adaptes à tes besoins :

Sub Attribution()

    Dim PlgCorres As Range
    Dim PlgGrade As Range
    Dim Cel As Range
    Dim Trouve As Range

    Set PlgCorres = Worksheets("Master").Range("K2:S14")

    With Worksheets("Résultat-atteint"): Set PlgGrade = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    For Each Cel In PlgGrade

        Set Trouve = PlgCorres.Find(Cel.Value, , xlValues, xlWhole)

        If Not Trouve Is Nothing Then

            Cel.Offset(, -1).Value = PlgCorres(1, Trouve.Column - PlgCorres(1, 1).Column + 1).Value

        End If

    Next Cel

End Sub

Bonjour Theze,

Merci pour le code. Le tout semble très bien fonctionné.

Dans l'onglet master, au # de division, j'ai ajouté le mot Division devant le #, et le code renvoi au résultat souhaité, c'est-à-dire sous la forme de Divsion x, et non pas seulement le # de la division.

Merci

A+

Bon et bien si ça te convient, je suis content d'avoir pu t'aidé

@Theze,

Bravo pour ce nouveau look!

Hello Isabelle

Merci, mais tu m'as devancé de peu si on peu dire donc bravo à toi aussi

Rechercher des sujets similaires à "macro mise forme"