HELP // Retraitement EXCEL

Inconnu-75486 -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai un léger soucis pour retraiter une information provenant d'un logiciel. Il s'agit d'un grand-livre de comptes.

J'ai créé une un feuillet permettant de reprendre les informations de mon importation que je souhaite exploiter. Cependant, pour que mon feuillet contenant les formules puisse fonctionner, j'ai besoin de retraiter préalablement mon importation (Grand-livre de tiers).

J'aimerais utiliser une macro "Enregistrer une macro" pour pouvoir automatiser le procéder et gagner du temps mais je bloque à une étape, le retraitement des tiers.

L'importation se présente ainsi pour la colonne TIERS, elle est combinée avec les dates des mouvements :

Exemple :

Colonne A

TIERS "TEST A"
DATE
DATE
DATE
DATE
(Ligne vide)
TIERS "TEST B"
DATE
DATE
DATE
....

J'aimerais une technique lol pour pouvoir avoir ce genre de résultat (je parviens à le faire manuellement mais aucun intérêt à perdre autant de temps dessus :/) :

Colonne A Colonne B
TIERS "TEST A" DATE
TIERS "TEST A" DATE
TIERS "TEST A" DATE
TIERS "TEST A" DATE
TIERS "TEST B" DATE
TIERS "TEST B" DATE
TIERS "TEST B" DATE

Configuration: Windows / Chrome 78.0.3904.70

1 réponse

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Par exemple :
    Option Explicit
    Sub Retraitement()
    Dim f As Worksheet
    Dim c As Range
    Dim v As Variant
    Dim t As String
    Dim d As Long
    Dim n As Long
      Set f = ThisWorkbook.Worksheets("Importation")   ' à adapter
      With f
        Set c = .Range("B1")
        d = .Cells(.Rows.Count, "A").End(xlUp).Row
        For n = 1 To d
          v = .Cells(n, "A").Value
          If TypeName(v) = "String" Then
            t = v
          ElseIf TypeName(v) = "Date" Then
            c.Value = t
            c.Offset(0, 1).Value = v
            Set c = c.Offset(1)
          End If
        Next n
        .Columns(1).Delete
      End With
    End Sub

    1
    1. Inconnu-75486
       
      Merci pour ta réponse,

      Je vais tester ta proposition.

      Je te fais un retour bientôt.

      Bonne journée Patrice !
      0
    2. Inconnu-75486
       
      Re-salut Patrice,


      Je viens de tester, j'ai l'impression que ça fonctionne lol. Je vais essayer d'exporter le document et de tester la formule.

      Ça t’embêterait de m'expliquer un peu comment tu as fait afin que je suis puisse comprendre le fonctionne et reproduire ce genre de formule.

      Merci encore !

      Bonne fin de journée,
      0
    3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      En gros,
      d, c'est la dernière ligne de la colonne A qui contient une valeur.
      c, c'est la cellule de destination du résultat (B1 pour commencer)
      J'analyse la valeur (v) de chaque cellule de la colonne A de 1 à d
      Si c'est une chaine je la mémorise (dans t)
      Si c'est une date :
      - j'écris t (le texte) en c (destination) et
      - j'écris la date (v) dans la cellule à droite de c [c.offset(0,1)]
      - je définis la cellule c en dessous du c actuel comme nouvelle destination (destination suivante)
      Quand toutes les lignes sont analysées, je supprime la première colonne (A)
      0