IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

EXCEL Répéter des enregistrements en fonction d'une fréquence [XL-2007]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut EXCEL Répéter des enregistrements en fonction d'une fréquence
    Bonjour à tous,

    je suis nouveau sur ce forum et je rencontre un problème sur Excel. En effet, j'ai téléchargé une base de données sur le site de l'INSEE qui donnent des informations sur les établissements par commune et si deux observations sont identiques elles sont regroupées avec une colonne fréquence. J'aurais besoin de répéter les lignes en fonction de cette fréquence. Par exemple :
    REGION /DEP /APE /Freq
    11 12 1103Z 2
    12 14 2451Z 4
    13 28 1392Z 1
    et je souhaiterais obtenir
    REGION DEP APE
    11 12 1103Z
    11 12 1103Z
    11 12 1103Z
    12 14 2451Z
    12 14 2451Z
    12 14 2451Z
    12 14 2451Z
    12 14 2451Z
    13 28 1392Z

    Je vous remercie par avance de vos réponses.

    Ronan

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Si j'ai bien compris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub toto()
    Dim i As Long, j As Long, k As Long
    k = 2
    With Sheets("Feuil1") 'change le nom de tes feuilles
    For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
    nombre = .Range("D" & i)
    For j = 1 To nombre
    Sheets("Feuil2").Cells(k, 1) = .Cells(i, 1)
    Sheets("Feuil2").Cells(k, 2) = .Cells(i, 2)
    Sheets("Feuil2").Cells(k, 3) = .Cells(i, 3)
    k = k + 1
    Next j
    Next i
    End With
    End Sub
    Cependant il y a 3 fois la première ligne alors qu'il n'y a que 2 en frequence..
    De même pour la deuxieme.. 5 vs 4

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie pour votre réponse rapide.
    C'est une erreur de ma part quand j'ai recopié mes lignes pour faire mon exemple. Effectivement quand la fréquence est de 2, l'enregistrement doit apparaitre 2 fois.

    Je vais tester la macro et je vous tiens au courant.

    Merci

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je ne comprends pas trop le fonctionnement de la macro. j'ai également oublié de spécifier que j'avais plus de 23 000 lignes que doivent être répété. Est ce que votre macro est adaptable à ma situation?

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Elle s'adapte toute seule. Il faut juste changer le nom de tes feuilles...

    Feuil1 = Le nom de la feuille ou est le tableau
    Feuil2 le nom de la feuille ou va etre ecrit le nouveau tableau

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci

    Par contre mon fichier dispose de 17 colonnes au total, si j'ai bien compris je dois répéter la ligne de code Sheets("Feuil2").Cells(k, 1) = .Cells(i, 1) autant de fois tout en faisant évoluer le nombre?

  7. #7
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Tout à fait.. Cells(ligne,colonne)

    Par contre si ta frequence n'est pas en colonne D il faut changer ça aussi

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    ça marche parfaitement. Je vous remercie pour la rapidité de votre réponse et sa précision.

    Merci

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut Voir exemple en VBA
    Comme ceci si ça peut aider, en supposant que les data's sont dans la sheet "Document". Le tableau n'est pas nécessaire, mais peut aider si des traitements sont requis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Sub Extract_data()
     
    Dim InpRng As Range
    Dim Subname As String
    Dim FlatData() As Variant
    Dim Rown As Long, RowTab As Long, TabInd As Long, Coln As Long
     
        'Init
    Subname = "Extract_data"
    On Error GoTo Err_Extract
     
        ' Set the Input range, exit if no data (assuming tittle row)
    Set InpRng = Worksheets("Document").Range("A1").CurrentRegion
    Debug.Print InpRng.Address
     
    If InpRng.Rows.Count < 2 Then
        MsgBox "No data to proceed in sheet " & InpRng.Worksheet.Name, vbExclamation, "ERROR: " & Subname
    End If
        ' Redim the array according to the Input data's
    ReDim FlatData(1 To 5, 1 To Worksheets("Document").Range("F1").Value)   'Sum of all the /Freq fields
     
        ' Parse the input range, store the result in an array then repeat the values
    TabInd = 0
     
    For Rown = 2 To InpRng.Rows.Count   'Assuming the records are continuous and the column 4 is with integer
     
     
        For RowTab = 1 To InpRng(Rown, 4)
     
            TabInd = TabInd + 1
     
            For Coln = 1 To 4
                FlatData(Coln, TabInd) = InpRng(Rown, Coln) 'Not really needed, if a specific calculation is needed
                Worksheets("Result").Cells(TabInd, Coln) = InpRng(Rown, Coln).Value
            Next Coln
     
        Next RowTab
     
    Next Rown
     
    Err_Extract:
        If Err.Number <> 0 Then
            MsgBox Err.Number & vbTab & Err.Description, vbCritical, "ERROR: " & Subname
            Err.Clear
            Exit Sub
        End If
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  10. #10
    Candidat au Club
    Homme Profil pro
    Ingénieur d'étude
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci Vinc_bilb pour votre réponse le problème a été résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/01/2015, 16h34
  2. Masquer des slides en fonction d'une valeur dans excel
    Par hidozo dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 25/11/2013, 23h01
  3. Réponses: 2
    Dernier message: 13/06/2013, 09h14
  4. [XL-2003] Répéter des données en fonction d'une valeur
    Par Korsa dans le forum Excel
    Réponses: 3
    Dernier message: 31/03/2011, 10h32
  5. Réponses: 2
    Dernier message: 27/07/2006, 07h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo