VBA : Mise en forme base de données brute [Résolu]

Signaler
Messages postés
8
Date d'inscription
jeudi 21 septembre 2017
Statut
Membre
Dernière intervention
3 novembre 2020
-
Messages postés
8
Date d'inscription
jeudi 21 septembre 2017
Statut
Membre
Dernière intervention
3 novembre 2020
-
Bonjour à tous,

Chaque semaine, j'extraie des données brutes que je souhaite mettre en forme dans un tableau.
Avez-vous des morceaux de code pour m'aider à débuter mon programme ?

Vous trouverez ci-dessous le lien vers le fichier base de donnée extrait :
https://www.cjoint.com/c/JIElefAmsxH

Je souhaite donc :
- Reprendre la donnée en colonne A et la dupliquer pour chaque ligne correspondante (difficulté car je n'ai pas toujours le même nombre de lignes)
- Reprendre la donnée en colonne B et dupliquer pour chaque ligne
- Reprendre la donnée en colonne K associée dans le cas ou mon activité est différente de "connexion"
- Décomposer les réponses de la colonne N en 4 colonnes lorsque celle-ci est remplie + une colonne observations

Voici le lien vers le fichier attendu, fait manuellement pour l'exemple :
https://www.cjoint.com/c/JIEleR7DvNH

Merci d'avance pour votre aide !

Nila44

1 réponse

Messages postés
13943
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2021
785
bonjour, j'ai regardé, et tout n'est pas immédiatement clair.
tu aurais pu nous faciliter le travail en précisant aussi les colonnes dans la feuille de destination.
je vais te proposer un code pour commencer, pour la partie que j'ai compris.
Messages postés
13943
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2021
785
suggestion:
Option Explicit

Sub transfo()
Dim fsource As Worksheet, fdest As Worksheet, rsource As Range
Dim immat As String, cond As String, action As String
Dim derlig As Long, lsource As Long, ldest As Long

Set fsource = ThisWorkbook.Sheets("avant")
Set fdest = ThisWorkbook.Sheets("apres")
lsource = fsource.UsedRange.Row
derlig = lsource + fsource.UsedRange.Rows.Count
ldest = 2
Do While lsource <= derlig
    If fsource.Cells(lsource, "a") <> "" Then
        immat = fsource.Cells(lsource, "a")
        cond = ""
    End If
    If fsource.Cells(lsource, "b") <> "" Then
        cond = fsource.Cells(lsource, "b")
    End If
    action = fsource.Cells(lsource, "k")
    Select Case action
        Case "", "CONNEXION", "Activité"
        Case Else
            fdest.Cells(ldest, "a") = immat
            fdest.Cells(ldest, "b") = cond
            fdest.Cells(ldest, "c") = action
            ldest = ldest + 1
    End Select
    lsource = lsource + 1
Loop
End Sub
Messages postés
8
Date d'inscription
jeudi 21 septembre 2017
Statut
Membre
Dernière intervention
3 novembre 2020
>
Messages postés
13943
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 janvier 2021

Bonjour,

Merci beaucoup pour votre réponse, je vais essayer d'avancer sur cet exemple !