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 :

Fusion de deux tableaux Excel en 1 - Conflit de dates [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut Fusion de deux tableaux Excel en 1 - Conflit de dates
    Bonsoir tout le monde,
    je reviens vous demander votre aide car la dernière fois, vous m'aviez été très très utile.

    Alors mon soucis, c'est que j'ai deux tableaux.

    Ils ont la même tête mis à part que dans l'un les dates sont 03-04-05-06 et on y trouve les données concernant les couts prévisionnels. On dira qu'il s'agit de tableau 1.

    Dans l'autre ce sont: 05-06-07 -08. ( Les dates sont définies par l'utilisateur) et on y trouve les données concernant les couts effectués. On dira qu'il s'agit de tableau 2.

    Mon but est de réunir ces 2 tableaux en un seul dans l'ordre chronologique des dates mais je ne vois pas comment y parvenir. Ce tableau sera donc tableau 3.

    Je cherche en effet à extraire de ce dernier tableau un graphe me permettant de voir les couts prévisionnels, voir les couts réalisés et quand l'utilisateur a choisi les mêmes dates, de pouvoir comparer ces 2 informations.

    J'ai commencé à réfléchir à un algorithme:

    Si première date du tableau 1 < à la 1ère date du tableau 2
    Alors coller tableau 1 avant tableau 2

    Si première date du tableau > à la dernière date du tableau 2
    Alors coller tableau 1 après tableau 2


    Cette première partie me parait pas trop compliqué mais je n'arrive pas à la réaliser ^^

    La deuxième partie serait:

    Si l'une des dates du tableau 1 = une des dates du tableau 2 alors coller tableau 1 à gauche de la cellule concernée du tableau 2


    Je vous laisse mon fichier qui sera peut être plus clair :
    En feuille ("Décalage"), on retrouve le tableau 1 et le tableau 2
    Dans la feuille BUT, on retrouve le tableau 3 que j'aimerai obtenir par macro, ainsi que le graphe final qui en découle.


    Et sur les feuilles Data, TCD couts prévus, TCD couts effectués, Calcul couts prévus, Calcul couts effectués, il s'agit de mes feuilles de base, de calcul, qui n'ont pas nécessairement besoin d'être retouchées car je les ai simplifié.

    PS: Mes données sont décalées afin de pouvoir créer un graphe qui combine "empilé" et "groupé"

    Merci d'avance de votre aide et désolé de ce pavé mais il me semblait que ce serait plus clair de cette façon.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Cette première partie me parait pas trop compliqué mais je n'arrive pas à la réaliser ^^
    Poste quand même ce que tu as commencé à faire.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut
    Voici le code que j'ai commencé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub fusion_tableaux()
    'Exemple réalisé sur feuille 'Décalage' du fichier 'Graphetest'
    Dim PremDate_tableau1 As Integer 'Première date du tableau 1
    Dim PremDate_tableau2 As Integer 'Première date du tableau 2
    Dim i As Integer
    Dim j As Integer
     
    Colfin = Cells("31,256").End(xlLeft) 'Pb à cet endroit qui permet de retrouver la dernière date du tableau 2
     
    PremDate_tableau1 = ActiveWorkbook.Sheets("Décalage").Cells(7, 2).Select
    PremDate_tableau2 = ActiveWorkbook.Sheets("Décalage").Cells(31, 2).Select

    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
    'Si la 1ère date du tableau1 < la 1ère date du tableau2, on place le tableau 1 AVANT le tableau 2
     
    If PremDate_tableau1 < PremDate_tableau2 Then
     
    'Sélection tableau 1 à copier:
     
    'Cherche la dernière cellule vide de la ligne 7 afin de déterminer colonne:
    Sheets("Décalage").Select
    RowFin = Cells("7,256").End(xlLeft)
    'On sélectionne la plage voulue:
    Sheets("Décalage").Range(Range("B1"), Range(RowFin & "7")).Select
    Selection.Copy
    Sheets("BUT").Range("D2").Select
    ActiveSheet.Paste
     
     
    'Sélection tableau 2 à copier:
     
    'On cherche la dernière cellule vide de la ligne 31 afin de déterminer colonne:
    Sheets("Décalage").Select
    RowFin = Range("31,256").End(xlLeft)
    'On sélectionne la plage voulue:
    Sheets("Décalage").Range(Range("B25"), Range(RowFin & "31")).Select
    Selection.Copy
    'On cherche la dernière cellule vide de la ligne 7, page "BUT":
    Sheets("BUT").Select
    RowFin = Cells("7,256").End(xlLeft)
    'On sélectionne la plage voulue:
    Sheets("BUT").Range(RowFin & "2").Select
    ActiveSheet.Paste
    End If

    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
    50
    51
    52
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Si la 1ère date_tableau1 > la dernière date_tableau2, on place le tableau 1 APRES le tableau 2
     
    If PremDate_tableau1 > DerDate_tableau2 Then
     
    'Sélection tableau 2 à copier:
     
    'On cherche la dernière cellule vide de la ligne 31 afin de déterminer colonne:
    RowFin = Range("31,256").End(xlLeft)
    'On sélectionne la plage voulue:
    Sheets("Décalage").Range(Range("B25"), Range(RowFin & "31")).Select
    Selection.Copy
    Sheets("BUT").Range("D2").Select
    ActiveSheet.Paste
     
    'Sélection tableau 1 à copier:
     
    'Cherche la dernière cellule vide de la ligne 7 afin de déterminer colonne:
    Sheets("Décalage").Select
    RowFin = Cells("7,256").End(xlLeft)
    'On sélectionne la plage voulue:
    Sheets("Décalage").Range(Range("B1"), Range(RowFin & "7")).Select
    Selection.Copy
    'On cherche la dernière cellule vide de la ligne 7, page "BUT":
    Sheets("BUT").Select
    RowFin = Cells("7,256").End(xlLeft)
    'On sélectionne la plage voulue:
    Sheets("BUT").Range(RowFin & "2").Select
    ActiveSheet.Paste
    End If
     
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     
    'Si l'une des dates du tableau 1 = une des dates du tableau 2, alors on place le tableau 1
    'à gauche de la cellule ayant la même date du tableau 2
    Sheets("Décalage").Select
    RowFin = Cells("7,256").End(xlLeft)
    i = 2
    j = 3
     
    For i = 2 To Val(RowFin)
    If Sheets("Décalage").Cells(7, i) = Sheets("Décalage").Cells(31, j) Then
    'Code à faire
    End If
    i = i + 2
    j = j + 2
    Next
     
    End Sub
    Là je viens de le relire , et je me mélange un peu les pinceaux.. Désolé de ce manque de lisibilité :/ .
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut
    Pour la première partie ce qui me manque c'est comment déterminer la sélection du tableau en fonction de la dernière case remplie de la ligne date et d'ainsi déterminer la colonne associée à cette cellule - la ligne étant connue!

    En ce qui concerne la deuxième partie correspondant à mixer les 2 tableaux, je ne vois pas du tout comment faire :/

    Sur jacxl.free.fr
    J'ai trouvé cette formule:

    Rows(2).Find("*", , , , , xlPrevious).Column donnera le numéro de colonne de la dernière cellule de la deuxième ligne.


    Je mets :

    ColFin= Colonne finale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ColFin = Rows(7).Find("*", , , , , xlPrevious).Column
    par exemple ?

    Problème avec cette solution, on s'arrête à la 1ère case vide prise en compte
    Deuxième soucis, les cases ou il ya la formule
    =SI(D5=0,"",D5)
    sont prises comme si elles n'étaient pas vides quand le résultat est égal à ""


    Afin de remédier à ça, j'ai décidé d'opter pour la solution suivante: Mettre dans des cases la formule:
    =SI(B7<>"", 1,0)
    Et donc afin de déterminer la dernière colonne, je fais un code me permettant de trouver le 1er 0 de la ligne afin d'obtenir la colonne associée. Il faut juste que je fasse attention à bien mettre ma formule au bon endroit.

    J'essaie tout ça et je vous tiens au courant mai si vous avez d'autres idées, je suis plus que preneur.
    Désolé du triple post, et merci encore de votre aide!

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    J'ai dû rater une partie du film. Regarde le classeur joint (j'ai réécrit une autre macro). J'ai mis le tableau en sur la feuille "Décalage"; Où trouves-tu les nombres de ton tableau 3 ?
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut
    Lesquels ?
    Les couts prévus et effectués et les dates viennent des tableaux 1 et 2 ,
    Le reste ce sont des formules permettant de réaliser des calculs à partir d'une information entrée par l'utilisateur et dépendant des couts.

    Merci pour votre macro qui fonctionne bien, et c'est presque ce que je souhaite obtenir mais:

    j'aurai aimé pouvoir garder le décalage d'une case à droite des couts effectués par rapport aux prévus

    afin d'avoir un graphe me permettant d'obtenir à la fois un graphe combiné et à la fois un graphe empilé.

    Est ce faisable ?

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

Discussions similaires

  1. [BO 5.1.8]fusion de deux tableaux (excel et bo)
    Par ninou58 dans le forum Deski
    Réponses: 4
    Dernier message: 24/06/2008, 08h21
  2. fusion de deux fixhiers excel de meme structure
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/07/2007, 10h36
  3. fusion de deux fichiers excel
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2007, 16h06
  4. fusion de deux fichiers EXCEL dans un 3ième
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2007, 18h59
  5. Fusion de deux feuilles Excel
    Par pascal913 dans le forum Access
    Réponses: 20
    Dernier message: 20/07/2006, 13h28

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