VBA : Mise en forme base de données brute

Résolu
nila44 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
nila44 Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   - 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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour,

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