VBA : Mise en forme base de données brute

Résolu
nila44 Messages postés 10 Statut Membre -  
nila44 Messages postés 10 Statut Membre -
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

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

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