HELP // Retraitement EXCEL

Fermé
Inconnu-75486 - 24 oct. 2019 à 11:46
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 24 oct. 2019 à 21:23
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
A voir également:

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
24 oct. 2019 à 12:50
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
Inconnu-75486
24 oct. 2019 à 16:40
Merci pour ta réponse,

Je vais tester ta proposition.

Je te fais un retour bientôt.

Bonne journée Patrice !
0
Inconnu-75486
24 oct. 2019 à 16:46
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
24 oct. 2019 à 21:23
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