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

Macros et VBA Excel Discussion :

Retraitement base données Excel 2007 [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut Retraitement base données Excel 2007
    Bonjour,

    J'utilise un logiciel de gestion des paies "COALA" à partir duquel j'extrais dans Excel les écritures comptables afin de pouvoir construire un tableau synthétique par salarié.

    Le problème réside dans le format du fichier extrait qui se présente comme suit :

    Données brutes extraites

    Compte	Libellé			Montant
    641	libellé 641		100
    642	libellé 642		100
    643	libellé 643		200
    644	libellé 644		300
    	Total Nom salarié A	700
    641	libellé 641		300
    642	libellé 642		500
    643	libellé 643		100
    644	libellé 644		50
    	Total Nom salarié B	950
    Je recherche une solution qui me permettrais d'obtenir le résultat suivant :

    Données Retraitées

    Nom Salarié	Compte	Libellé		Montant
    Nom salarié A	641	libellé 641	100
    Nom salarié A	642	libellé 642	100
    Nom salarié A	643	libellé 643	200
    Nom salarié A	644	libellé 644	300
    Nom salarié B	641	libellé 641	300
    Nom salarié B	642	libellé 642	500
    Nom salarié B	643	libellé 643	100
    Nom salarié B	644	libellé 644	50
    Les données ainsi retraitées me permettront de générer, par exemple, un tableau croisé dynamique faisant apparaître le coût global par salarié.

    Merci d'avance pour vos solutions.

    FL

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Le fichier extrait de Coala est au format Excel ou bien texte simple ?

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Si c'est du texte, quel est le séparateur ? Un simple espace ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Bonjour,

    Le fichier est au format excel.

    Vous trouverez un exemple de fichier extrait.

    Merci d'avance,
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Ceci devrait donner le résultat attendu, mais inversé puisque je pars du bas vers le haut.
    Par contre, si nécessaire, tu peux trier la liste obtenue par la suite.

    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
    Sub Replacer()
        Dim I As Long, nbLignes As Long
        Dim LigneDest As Long
        Dim Nom As String
     
        nbLignes = Cells(Rows.Count, "B").End(xlUp).Row
        LigneDest = 5
     
        For I = nbLignes To 5 Step -1
            If Left(Range("B" & I), 5) = "Total" Then
                Nom = Right(Range("B" & I), Len(Range("B" & I)) - 18)
            ElseIf IsNumeric(Range("A" & I)) Then
                Range("E" & LigneDest) = Nom
                Range("F" & LigneDest) = Range("A" & I)
                Range("G" & LigneDest) = Range("B" & I)
                Range("H" & LigneDest) = Range("C" & I)
                LigneDest = LigneDest + 1
            End If
        Next
    End Sub

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Bonjour,

    Merci pour le retour.

    Je vais tester et te tiens au courant.

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    une autre approche :
    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
    Sub Demo()
             Dim Rd As Range, Rf As Range
             L& = [A4].CurrentRegion.Rows.Count + 3
             R& = 5
             Application.ScreenUpdating = False
             [G4].CurrentRegion.Clear
             [A4:C4].Copy [H4]
             Set Rd = [A5]
        Do Until Rd.Row > L
             Set Rf = Rd.End(xlDown)
              If Rf(2, 2) Like "Total *" Then
                  N& = Rf.Row - Rd.Row + 1
                  Cells(R, 7).Resize(N).Value = Mid(Rf(2, 2).Value, 7)
                  Rd.Resize(N, 3).Copy Cells(R, 8)
                  R = R + N
              End If
             Set Rd = Rf.End(xlDown)
        Loop
             Set Rd = Nothing:  Set Rf = Nothing
        With [G4].CurrentRegion.Columns
            .Item(1).AutoFit
            .Item(2).HorizontalAlignment = xlCenter
        End With
             Application.ScreenUpdating = True
    End Sub
    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    ______________________________________________________________________________________________________
    Je suis Paris, Charlie, …

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 4
    Par défaut
    Formidable !

    Cela fonctionne comme je l’espérais.

    Merci !





    Citation Envoyé par parmi Voir le message
    Ceci devrait donner le résultat attendu, mais inversé puisque je pars du bas vers le haut.
    Par contre, si nécessaire, tu peux trier la liste obtenue par la suite.

    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
    Sub Replacer()
        Dim I As Long, nbLignes As Long
        Dim LigneDest As Long
        Dim Nom As String
     
        nbLignes = Cells(Rows.Count, "B").End(xlUp).Row
        LigneDest = 5
     
        For I = nbLignes To 5 Step -1
            If Left(Range("B" & I), 5) = "Total" Then
                Nom = Right(Range("B" & I), Len(Range("B" & I)) - 18)
            ElseIf IsNumeric(Range("A" & I)) Then
                Range("E" & LigneDest) = Nom
                Range("F" & LigneDest) = Range("A" & I)
                Range("G" & LigneDest) = Range("B" & I)
                Range("H" & LigneDest) = Range("C" & I)
                LigneDest = LigneDest + 1
            End If
        Next
    End Sub

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

Discussions similaires

  1. Projet VB6 travaillant avec une base de données Excel(2007)
    Par JP.BLAISE dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/09/2015, 23h44
  2. Réponses: 1
    Dernier message: 19/07/2015, 12h58
  3. [WD-2010] Insérer valeur de base données excel à l'endroit du curseur
    Par Pqscql dans le forum VBA Word
    Réponses: 5
    Dernier message: 10/11/2013, 21h53
  4. base donnée excell
    Par nernono dans le forum Excel
    Réponses: 1
    Dernier message: 24/03/2013, 11h21
  5. Réponses: 2
    Dernier message: 08/12/2011, 02h14

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