VBA : Mise en forme base de données brute

Résolu/Fermé
nila44 Messages postés 10 Date d'inscription jeudi 21 septembre 2017 Statut Membre Dernière intervention 14 mars 2022 - 30 sept. 2020 à 13:07
nila44 Messages postés 10 Date d'inscription jeudi 21 septembre 2017 Statut Membre Dernière intervention 14 mars 2022 - 30 sept. 2020 à 17:44
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

yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
30 sept. 2020 à 16:53
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.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
30 sept. 2020 à 17:20
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
0
nila44 Messages postés 10 Date d'inscription jeudi 21 septembre 2017 Statut Membre Dernière intervention 14 mars 2022 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
30 sept. 2020 à 17:44
Bonjour,

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