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

  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 ?

  7. #7
    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
    Voici la macro modifiée pour mettre le tableau sur la feuiulle BUT et décaler le coûts effectués.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub Daniel()
        Dim C As Range, Dates() As Long, Ctr As Integer, Col As Integer
        Dim Col1 As Integer, BUT As Worksheet
        Set BUT = Sheets(" BUT")
        Ctr = -1
        ReDim Dates(0)
        With Sheets("Décalage")
            .[IV:IV].ClearContents
            For Each C In .Range(.[B7], .Cells(7, .Columns.Count).End(xlToLeft))
                If C.Value <> "" And Not IsNumeric(Application.Match(C.Value, Dates, 0)) Then
                    Ctr = Ctr + 1
                    ReDim Preserve Dates(Ctr)
                    Dates(Ctr) = C.Value
                End If
            Next C
            For Each C In .Range(.[B31], .Cells(31, .Columns.Count).End(xlToLeft))
                If C.Value <> "" And Not IsNumeric(Application.Match(C.Value, Dates, 0)) Then
                    Ctr = Ctr + 1
                    ReDim Preserve Dates(Ctr)
                    Dates(Ctr) = C.Value
                End If
            Next C
            .[IV1].Resize(UBound(Dates) + 1) = Application.Transpose(Dates)
            .[IV1].Resize(UBound(Dates) + 1).Sort .[IV1], xlAscending, Header:=xlNo
            Col = 1
            For Each C In .[IV1].Resize(UBound(Dates) + 1)
                If IsNumeric(Application.Match(C.Value, .Rows(7), 0)) Then
                    'existe dans tableau 1
                    Col1 = Application.Match(C.Value, .Rows(7), 0)
                    Col = Col + 3
                    For i = 3 To 8
                        If .Cells(i, Col1) <> "" Then
                            If i = 5 Then
                                BUT.Cells(i, Col + 1) = .Cells(i, Col1)
                            Else
                                BUT.Cells(i, Col) = .Cells(i, Col1)
                            End If
                        End If
                    Next i
                End If
                'existe dans tableau 2
                If IsNumeric(Application.Match(C.Value, .Rows(31), 0)) Then
                    Col1 = Application.Match(C.Value, .Rows(31), 0)
                    If IsNumeric(Application.Match(C.Value, BUT.Rows(7), 0)) Then
                        'existe dans tableau 3
                        Col = Application.Match(C.Value, BUT.Rows(7), 0)
                        For i = 27 To 32
                            If .Cells(i, Col1) <> "" Then
                                If i = 29 Then
                                    BUT.Cells(i, Col + 1) = .Cells(i, Col1)
                                Else
                                    BUT.Cells(i, Col) = .Cells(i, Col1)
                                End If
                            End If
                        Next i
                    Else
                        Col = Col + 3
                        For i = 27 To 32
                            If .Cells(i, Col1) <> "" Then
                                If i = 29 Then
                                    BUT.Cells(i - 24, Col + 1) = .Cells(i, Col1)
                                Else
                                    BUT.Cells(i - 24, Col) = .Cells(i, Col1)
                                End If
                            End If
                        Next i
                    End If
                End If
            Next C
            .[IV:IV].ClearContents
        End With
    End Sub
    Fichiers attachés Fichiers attachés

  8. #8
    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
    Eh bien un grand merci à toi.
    Ce forum m'étonne de jour en jour de par la réactivité de ses membres .

    Je dois faire 2-3 manips encore avant que mon fichier ne soit terminé mais en logique d'ici ce soir, ce topic sera résolu.

    De plus, je risque de t'envoyer 1 message privé afin d'avoir des informations concernant le UBound et d'autres parties de ton code !

    Mais merci énormément !

  9. #9
    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
    Finalement j'ai un petit soucis avec ton dernier code,
    Lorsque je sélectionne en prévu: 3-4-5-6
    Et en réalisé: 5-6-7-8
    J'obtiens les bonnes dates dans ligne date, les bons couts pour les couts prévus mais pour les couts réalisés j'ai un problème.
    Seuls les couts de la date 7 et 8 sont bien placés
    Ceux correspondant aux dates 5-6 sont bien décalés mais à la ligne 29 et non pas à la 5 :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'existe dans tableau 3
                        Col = Application.Match(C.Value, BUT.Rows(7), 0)
                        For i = 27 To 32
                            If .Cells(i, Col1) <> "" Then
                                If i = 29 Then
                                    BUT.Cells(i, Col + 1) = .Cells(i, Col1)
                                Else
                                    BUT.Cells(i, Col) = .Cells(i, Col1)
                                End If
    Après une lecture plus approfondie, il manquait juste -24 après BUT.Cells !

  10. #10
    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
    Bien vu. ça venait du premier code où Tableau 3 était en bas de la feuille Décalage.

  11. #11
    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
    Je reviens à la charge car j'ai un soucis qui est apparu sur ce programme,

    En effet, comme on peut le voir sur le classeur ci-joint, lorsque je mets à jour le tableau en effaçant les données sur la feuille BUT et en changeant les valeurs dans la feuille "Décalage", on constate que dans la colonne V mes valeurs sont faussées car certaines dates apparaissent au lieu des couts ou d'espaces vides.

    Je n'arrive pas à voir à quoi cela est du :/

    Merci d'avance pour l'aide précieuse que vous m'apportez
    Fichiers attachés Fichiers attachés

  12. #12
    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
    Je viens de réexécuter la macro sans avoir fait de changement et il n'y a rien en colonne V. Donne un exemple de changement que je puisse tester.

  13. #13
    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
    Je suis parti du fichier ci-joint,
    Dans la feuille décalage, j'ai supprimé les dates et couts associés de 201413 et 201414 du "Tableau 2". J'ai lancé la macro "Daniel", aucun soucis.

    Ensuite j'ai fait de même en supprimant les dates et couts associés de 201409, 201410, 201411 du tableau 1. Lorsque j'active la macro, on voit que dans la colonne V de la feuille "BUT" , les dates (201405-201406-201408-201409) s'affichent alors qu'elles ne devraient pas s'afficher ici.

    Après j'ai repris le fichier initial et lorsque j'enlève simplement les dates et couts associés "201409-201410-201411" du tableau 1, l'erreur réapparait après activation de la macro.

    Cependant lorsque je supprime seulement 201410 et 201411 du tableau 1, je n'ai aucun soucis non plus.

    J'espère que mes exemples seront assez concrets pour t'aider à m'aider .

    SI il faut que je fasse d'autres tests, je peux

    Mais ceux la me semblaient assez parlants ..
    Fichiers attachés Fichiers attachés

  14. #14
    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
    Ensuite j'ai fait de même en supprimant les dates et couts associés de 201409, 201410, 201411 du tableau 1. Lorsque j'active la macro, on voit que dans la colonne V de la feuille "BUT" , les dates (201405-201406-201408-201409) s'affichent alors qu'elles ne devraient pas s'afficher ici.
    Pourquoi ? tu as écrit :

    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
    Le plus simple, mets sur une feuille les deux tableaux et le résultat désiré.

  15. #15
    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
    Ensuite j'ai fait de même en supprimant les dates et couts associés de 201409, 201410, 201411 du tableau 1. Lorsque j'active la macro, on voit que dans la colonne V de la feuille "BUT" , les dates (201405-201406-201408-201409) s'affichent alors qu'elles ne devraient pas s'afficher ici.
    Les dates (201405-201406-201408-201409) s'affichent dans la colonne V de la feuille BUT, ce qui modifie la valeur des couts associés.

    En ce qui concerne la macro , il s'agit de "Daniel" , celle que tu m'as créé et qui fonctionne mis à part le bug cité ..

    Pour la solution que tu m'as proposé, je vais essayer de la mettre en place mais je suis pas sur que le bug de la colonne V disparaisse pour autant..

    La feuille "BUT" me convient parfaitement mis à part les dates apparaissant dans V3 -V4 - V6 et V8 de la feuille "BUT"

  16. #16
    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
    Donne-moi les 2 tableaux et le résultat tel que tu le souhaites.

  17. #17
    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 ci-joint le fichier avec le bug dans la colonne V de la feuille "BUT"

    Tout me convient mis à part les cellules surlignées en rouge, qui ne devraient pas apparaitre ou qui devraient en tout cas être égales à 0 dans ce cas.
    Fichiers attachés Fichiers attachés

  18. #18
    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
    Essaie comme ç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
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Sub Daniel()
    Sheets(" BUT").Select
    Range("D3:AM8").Select
        Selection.ClearContents
    Selection.ClearContents
     
        Dim C As Range, Dates() As Long, Ctr As Integer, Col As Integer
        Dim Col1 As Integer, BUT As Worksheet, Tabl As Variant, X As Variant
        Set BUT = Sheets(" BUT")
        Ctr = -1
        ReDim Dates(0)
        With Sheets("Décalage")
            .[IV:IV].ClearContents
            For Each C In .Range(.[B7], .Cells(7, .Columns.Count).End(xlToLeft))
                If C.Value <> "" And Not IsNumeric(Application.Match(C.Value, Dates, 0)) Then
                    Ctr = Ctr + 1
                    ReDim Preserve Dates(Ctr)
                    Dates(Ctr) = C.Value
                End If
            Next C
            For Each C In .Range(.[B31], .Cells(31, .Columns.Count).End(xlToLeft))
                If C.Value <> "" And Not IsNumeric(Application.Match(C.Value, Dates, 0)) Then
                    Ctr = Ctr + 1
                    ReDim Preserve Dates(Ctr)
                    Dates(Ctr) = C.Value
                End If
            Next C
            .[IV1].Resize(UBound(Dates) + 1) = Application.Transpose(Dates)
            .[IV1].Resize(UBound(Dates) + 1).Sort .[IV1], xlAscending, Header:=xlNo
            Tabl = Application.Transpose(.[IV1].Resize(UBound(Dates) + 1))
            .[IV1].Resize(UBound(Dates) + 1).Clear
            Col = 1
            For Each X In Tabl
                If IsNumeric(Application.Match(X, .Rows(7), 0)) Then
                    'existe dans tableau 1
                    Col1 = Application.Match(X, .Rows(7), 0)
                    Col = Col + 3
                    For i = 3 To 8
                        If .Cells(i, Col1) <> "" Then
                            If i = 5 Then
                                BUT.Cells(i, Col + 1) = .Cells(i, Col1)
                            Else
                                BUT.Cells(i, Col) = .Cells(i, Col1)
                            End If
                        End If
                    Next i
                End If
                'existe dans tableau 2
                If IsNumeric(Application.Match(X, .Rows(31), 0)) Then
                    Col1 = Application.Match(X, .Rows(31), 0)
                    If IsNumeric(Application.Match(X, BUT.Rows(7), 0)) Then
                        'existe dans tableau 3
                        Col = Application.Match(X, BUT.Rows(7), 0)
                        For i = 27 To 32
                            If .Cells(i, Col1) <> "" Then
                                If i = 29 Then
                                    BUT.Cells(i - 24, Col + 1) = .Cells(i, Col1)
                                Else
                                    BUT.Cells(i - 24, Col) = .Cells(i, Col1)
                                End If
                            End If
                        Next i
                    Else
                        Col = Col + 3
                        For i = 27 To 32
                            If .Cells(i, Col1) <> "" Then
                                If i = 29 Then
                                    BUT.Cells(i - 24, Col + 1) = .Cells(i, Col1)
                                Else
                                    BUT.Cells(i - 24, Col) = .Cells(i, Col1)
                                End If
                            End If
                        Next i
                    End If
                End If
            Next X
        End With
    End Sub

  19. #19
    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
    C'est génial, MERCI.
    Mais puis je savoir ce que tu as modifié s'il te plait?

  20. #20
    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
    J'écrivais la liste des dates, pour la trier, dans la colonne IV de la feuille Decalage ce qui provoquait une anomalie. J'ai recopié cette liste dans la variable Tabl et j'ai effacé la colonne IV avant de continuer le traitement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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