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 :

Extraire données d'un planning dans un tableau [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut Extraire données d'un planning dans un tableau
    Bonjour le forum,

    Demande peu particulière, je souhaite améliorer une solution que j'ai développé. Tout fonctionne correctement, mais je trouve que ça fait un peu bricolage


    Actuellement j'utilise des formules dans une boucle vba et cela est assez complexe à maintenir, j'aurais souhaité une solution en vba pur. Mais je sais pas trop comment prendre le problème.


    Le planning:

    Nom : Capture planning.PNG
Affichages : 773
Taille : 23,9 Ko

    Les formules utilisées dans une boucle.

    Nom : Capture formule pour résultat.PNG
Affichages : 696
Taille : 14,2 Ko


    Voila un extrait du résultat attendu.

    Nom : Capture bdd résultat.PNG
Affichages : 583
Taille : 22,1 Ko

    J'ai pensé à copier coller les valeurs dans la table résultat dans une boucle. Mais cela est beaucoup trop lent.

    En effet, il faudrait pas ralentir la solution actuellement en place

    Merci d'avance pour vos avis.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    essayer avec ça :
    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
    Sub Extrairedonnées()
     
    Dim i As Long
     
    Dim j As Integer
    With Sheets("feuil1") ' à adapter
    i = .Range("A" & Rows.Count).End(xlUp).Row
     
    j = 2
    For C = 4 To 13
    For i = 2 To i
                 If .Cells(i, C) <> "" Then
                    Sheets("feuil2").Cells(j, 1) = .Cells(i, 1)
                    Sheets("feuil2").Cells(j, 2) = .Cells(1, C)
                    Sheets("feuil2").Cells(j, 5) = .Cells(i, C)
                 j = j + 1
                 End If
      Next i
      Next C
    End With
    End Sub

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Bonjour,

    Merci pour votre retour, mais je viens de tester sur mon exemple.

    Cela n'affiche pas résultat un concluant. En effet j'ai eu le même problème, je ne vois pas comment boucler sans reprendre les entêtes à chaque fois.

    Nom : Capture retour 1.PNG
Affichages : 532
Taille : 19,5 Ko

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonsoir
    merci de vérifier je crois que c'est un problème d'adaptation à ton fichier
    au premier code j'ai ajouter q chose pour te permettre de scinder la chaîne de caractère en deux : journée et période et voila le code complet :
    NB : Je suis débutant et certain que il nécessite des amélioration
    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
    49
    Sub Extrairedonnées()
     
     'commencer par nettoyer la feuille destination
     
     Sheets("feuil2").Cells.ClearContents 'efface le contenu de la sheet2 pour y mettre le résultat
     Sheets("feuil2").Range("A1") = "code" 'nom de la colonne contenant la date
      Sheets("feuil2").Range("B1") = "journée/periode"
      Sheets("feuil2").Range("C1") = "journée"
      Sheets("feuil2").Range("D1") = "periode"
      Sheets("feuil2").Range("E1") = "identifiant"
     
     
     
    Dim z As Long
    Dim j As Integer
    j = 2
    With Sheets("feuil1") ' à adapter
    z = .Range("A" & Rows.Count).End(xlUp).Row
    For C = 4 To 13
    For z = 2 To z
     
                 If .Cells(z, C) <> "" Then
                    Sheets("feuil2").Cells(j, 1) = .Cells(z, 1)
                    Sheets("feuil2").Cells(j, 2) = .Cells(1, C)
                    Sheets("feuil2").Cells(j, 5) = .Cells(z, C)
                 j = j + 1
                 End If
      Next z
      Next C
     
      End With
     
    ' séparer la journée
     
    With Sheets("feuil2")
    Dim n As Long
    n = .Range("A" & Rows.Count).End(xlUp).Row
        For n = 2 To n
        Tableau = Split(.Cells(n, 2), " ")
        For i = 0 To UBound(Tableau)
            Debug.Print Tableau(i)
        Next i
        .Cells(n, 3) = Tableau(0) ' la journée
        .Cells(n, 4) = Tableau(1) ' la période
        Next n
    End With
     
    Sheets("feuil2").Select
    End Sub
    BONNE CONTINUATION
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Bonsoir,

    Effectivement, c'est la première ligne qui fait tout planter. Il suffit de la virer et hop ça tourne nickel.

    Je viens de tester c vraiment bien, je tiens à te remercier pour ton aide.

    Passé en résolu.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/10/2008, 21h37
  2. Réponses: 5
    Dernier message: 22/10/2008, 17h40
  3. Réponses: 3
    Dernier message: 01/09/2008, 13h46
  4. Stockage de données en jours glissants dans un tableau EXCEL
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/06/2007, 08h11
  5. extraire donné fichier txt afficher dans xml
    Par jasminrose dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 01/04/2007, 12h14

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