Transposition et collage données

Sonia2020

XLDnaute Nouveau
Bonjour Le Forum

Je me présente Sonia, c'est la première fois que je viens sur ce forum. Je me suis inscrite afin de trouver une aide précieuse pour m'aider à avancer sur mon sujet de stage.
J'ai essayé de me débrouiller seule mais je suis tombée sur un problème auquel la maîtrise du VBA est nécessaire. Je ne sais pas du tout comment il faut faire.

J'aimerai vous expliquer mon problème et comment je souhaite que cela fonctionne afin que vous y voyez plus clair.

J'aimerai que le code VBA me fasse le nombre de boucle nécessaire en fonction du nombre de date différente dans la l'onglet Extraction en Colonne I.

1ère boucle de démarrage :
1ère étape : La macro va trier les données en fonction des dates de la plus ancienne saisie à la plus récente de l'onglet "Extraction" en colonne I.

2ème étape : Une fois triées, elle va faire une recherche V des données de la colonne C de l'onglet Données Analyse Charge par rapport aux données de l'onglet Paramètre en K, et copier coller les valeurs de la colonne L (onglet Paramètre) vers Colonne D (onglet Données Analyse Charge).

3ème étape : Sur (onglet Extraction), en colonne I prendre la première date saisie et la coller en B15 (onglet Data).

4ème étape : Une fois le collage en B15 Faite, il va prendre la valeur de la date en B16 (onglet Data) copier et coller en colonne A (démarrage en A2, onglet Transfert & Retard),

Puis en B (démarrage en B2, onglet Transfert & Retard) la charge à transférer qui se trouve en G (onglet Données Analyse Charge), la cellule à prendre se retrouve en fonction de la croix sur la colonne V du même onglet. S'il identifie une croix, alors il va sur la même ligne en G, copie et colle la valeur sur la colonne B (démarrage en B2, onglet Transfert & Retard)

Puis en C (démarrage en C2, onglet Transfert & Retard), le retard qui est égal au cumul de la charge en colonne F (onglet Données Analyse Charge),seulement les valeurs dont les dates (colonne J, onglet Données Analyse Charge) sont entre la date la plus ancienne (B18, onglet Data) et la date de saisie en (B18, onglet Data).

2ème boucle et jusqu`à la fin :
Quand il démarrera la boucle 2, la seule chose qui différenciera de la 1ère boucle c'est qu'au moment de la recherche V, il collera les données de la colonne M (onglet Paramètre) vers Colonne D (onglet Données Analyse Charge) au lieu des données en de la colonne L.

Autre chose : Il ne prendra pas la date de saisie suivante en colonne I (onglet Extraction) si elle est identique. Exemple, si à ma première boucle j'ai démarré avec la date du 12.01.2021, si la date suivante est au 12.01.2021, alors je passe à la suivante). Si j'ai 3 lignes avec une première date au 12.01.2021, puis celle du dessous avec une date en 12.01.2021, puis la suivante au 13.01.2021) il passera directement sur la date du 13.01.2021.

Je ne sais pas si mes explications sont claires, mais espère que quelqu'un du forum pourra comprendre et m'aider sur cette problématique.

Je vous remercie par avance pour votre aide précieuse !!

Sonia2020
 
Dernière édition:

Rouge

XLDnaute Impliqué
Est-ce un bug de votre côté ? c'est fort possible, mais j'ai suivi le raisonnement et je ne vois pas ou ça coince, pourtant, j'ai reproduit le plus fidèlement possible vos instructions, c'est pour cela que je vous dit de faire du pas à pas sur le code, d'aller voir ce qui se passe sur les feuilles concernées au fur et à mesure de l'avancement de la lecture du code. Vous seule connaissant bien l'application savait ce qui doit se passer à tel où tel moment, et voir quelle est l'étape qui passe au travers.
 

Sonia2020

XLDnaute Nouveau
Re

J'ai fait pas à pas, seules les données de collage Date saisie colonne I (onglet Extraction) vers cellule B15 (onglet Data) se font. Et sur l'onglet Transfert & Retard, les dates de saisies sont bien collées au fur et à mesure.

Sur la Macro :
VB:
For i = 2 To DerLig_f5 'De la ligne 2 à la dernière ligne de la feuille "Extraction"
        'feuille "Paramètre", on applique la formule en colonne M et on fige les valeurs pour pouvoir les exploiter par la suite
        f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],'Données Analyse Charge'!C[-10]:C[-4],7,FALSE),0)"
        f7.Range("M2:M" & DerLig_f7).Value = f7.Range("M2:M" & DerLig_f7).Value
        '2ème étape : Une fois triées, elle va faire une recherche V des données de la colonne C de l'onglet Données Analyse Charge par rapport aux données _
            de l'onglet Paramètre en K, et copier coller les valeurs de la colonne L (onglet Paramètre) vers Colonne D (onglet Données Analyse Charge).

Il ne se passe rien. Je ne vois pas de copie colle des données de la colonne L (onglet data) sur colonne D (onglet Données Analyse Charge), ma formule de recherche V est toujours présente. Elle ne devrait pas y rester. Normalement, la recherche V en vba devrait être faite mais que les données écrasent celles de la colonne D.


Code:
Set x = f1.Range(f1.Cells(x.Row, "C"), f1.Cells(DerLig_f1, "C")).Find(DateNew, LookIn:=xlValues, lookat:=xlWhole)
                            f3.Cells(DerLig_f3, "C") = f1.Cells(x.Row, "D") 'la valeur à coller sur ma colonne C (Onglet Transfert & Retard) sera Le résultat trouvée en colonne L (onglet Paramètre) en fonction de la valeur cherchée en C (onglet Données Analyse Charge).

Il n'y aucune valeur qui se copie colle sur cette colonne C (onglet Transfert & Retard)

Code:
 For i = 2 To DerLig_f5 'De la ligne 2 à la dernière ligne de la feuille "Extraction"
        'feuille "Paramètre", on applique la formule en colonne M et on fige les valeurs pour pouvoir les exploiter par la suite
        f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],'Données Analyse Charge'!C[-10]:C[-4],7,FALSE),0)"
        f7.Range("M2:M" & DerLig_f7).Value = f7.Range("M2:M" & DerLig_f7).Value

Quand elle va attaquer le deuxième passage, il ne se passe rien. Peut-être faut il écraser les données en colonne M (onglet Paramètre) mais répartir ses données à l'aide d'une fonction recherche V via macro.

Code:
 '2ème passage
                '1ère étape : copier les valeurs de la colonne I (Onglet Données Analyse Charge) sur la colonne M (Onglet Paramètre) via une recherche V (la valeur à _
                    rechercher se fait en fonction de la colonne K onglet Paramètre), il faudra faire un copier coller d'un onglet à l'autre via une fonction recherche V
            f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC11,'Données Analyse Charge'!C3:C9,7,FALSE),0)" 'Copie dans M de "Paramètre" avec une rechercheV
            f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC3,Paramètre!C11:C13,2,FALSE)" 'on récupère les valeurs de la colonne M de "Paramètre" dans "D" de "Données Analyse Charge"
            SndPassageOk = True

Il n'y a rien qui se passe aussi.

En résumé :
En faite, les copier coller de valeurs de la colonne I (onglet Données Analyse Charge) vers Colonne M (Paramètre) ne fonctionne pas. Je ne sais pas rien ne se passe.

Puis comme cité ci-dessus, les valeurs ne se collent pas en colonne B et C de l'onglet (Transfert & Charge).

Et quand je teste le code, il ne va pas sur les feuilles concernées.
Est-ce parce qu'il considère les onglets non actif lors du lancement de la macro ? Je ne vois pas la macro m'amener onglet à onglet lors de l'exécution.

Je ne sais pas si mes explications vous permettent de mieux comprendre, mais c'est ce que j'ai relevé.

Un grand merci à toi pour ton aide ^^

Sonia.
 
Dernière édition:

Rouge

XLDnaute Impliqué
Alors je suppose: colonne L (onglet Paramètre) à la place de L (onglet data)
"Il ne se passe rien. Je ne vois pas de copie colle des données de la colonne L (onglet data) sur colonne D (onglet Données Analyse Charge), ma formule de recherche V est toujours présente. Elle ne devrait pas y rester. Normalement, la recherche V en vba devrait être faite mais que les données écrasent celles de la colonne D."

les données en colonne D sont écrasées ici, juste avant la 3éme étape

f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value 'on remplace les formules par leurs valeurs.

Je regarde la suite plus tard
 

Sonia2020

XLDnaute Nouveau
Alors je suppose: colonne L (onglet Paramètre) à la place de L (onglet data)
"Il ne se passe rien. Je ne vois pas de copie colle des données de la colonne L (onglet data) sur colonne D (onglet Données Analyse Charge), ma formule de recherche V est toujours présente. Elle ne devrait pas y rester. Normalement, la recherche V en vba devrait être faite mais que les données écrasent celles de la colonne D."

les données en colonne D sont écrasées ici, juste avant la 3éme étape

f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value 'on remplace les formules par leurs valeurs.

Je regarde la suite plus tard

colonne L (onglet Paramètre) à la place de L (onglet data)
Oui oui, c'est onglet paramètre pas data.
faute de frappe

Oui il n'y a pas de problème merci

les données en colonne D sont écrasées ici, juste avant la 3éme étape
f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value 'on remplace les formules par leurs valeurs.

Pourquoi les données de la colonne D écrasent elle même les données de la colonne D ?
c'est pas plutôt les données de la colonne L (onglet paramètre) qui doivent écraser les données de la colonne D en fonction des valeurs en colonne C pour le premier passage ? et colonne M pour les passages suivants ?


Sonia
 
Dernière édition:

Rouge

XLDnaute Impliqué
Pourquoi les données de la colonne D écrasent elle même les données de la colonne D ?
c'est pas plutôt les données de la colonne L (onglet paramètre) qui doivent écraser les données de la colonne D en fonction des valeurs en colonne C pour le premier passage ? et colonne M pour les passages suivants ?


Auparavant il y a la formule RechercheV qui récupère les données de L dans D, puis pour figer les valeurs, on fait une copie des valeurs de D qui écrase les formules par les valeurs obtenues
f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value
Ligne ci-dessus se lit ainsi:
Les valeurs de D = Les valeurs de D obtenues par formules
 

Sonia2020

XLDnaute Nouveau
Re bonjour Rouge

J'ai refait pas à pas encore une fois

Je viens de voir que sur cette ligne :
1603721063915.png

Il met x.Row = 71, alors que la croix se trouve en ligne 70.
Avec la date saisie au 19.10.2020, le point d'arrêt en colonne V (onglet Données Analyse Charge) se trouve en ligne 70 car c'est date de saisie +1 jour, soit au 20.10.2020.

Je pense que c'est pour cela que cela ne marche pas.
J'espère que cela peut vous aider à comprendre davantage.
Sonia
 

Sonia2020

XLDnaute Nouveau
Pourquoi les données de la colonne D écrasent elle même les données de la colonne D ?
c'est pas plutôt les données de la colonne L (onglet paramètre) qui doivent écraser les données de la colonne D en fonction des valeurs en colonne C pour le premier passage ? et colonne M pour les passages suivants ?


Auparavant il y a la formule RechercheV qui récupère les données de L dans D, puis pour figer les valeurs, on fait une copie des valeurs de D qui écrase les formules par les valeurs obtenues
f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value
Ligne ci-dessus se lit ainsi:
Les valeurs de D = Les valeurs de D obtenues par formules

Il y a un " ' " dans sur la ligne qui rend cette formule ligne de code en mode commentaire. Est-ce ceci qui fait que cela ne fonctionne pas ?

Sonia.
 

Rouge

XLDnaute Impliqué
On cherche la date du 19/10/2020, elle se trouve bien en ligne 71, c'est bien ce que renvoi x.row, mais la valeur "x" est la ligne au-dessus.
Il y a peut-être un problème d'incompréhension de ma part. Moi j'ai compris qu'il fallait chercher en priorité la date de saisie (le 19/10/2020) alors que ce serait la date de saisie +1 soit le 20/10/2020
Dans ce cas, il suffit de modifier les lignes en ajoutant 1 la suite de DateSaise
Set x = f1.Range("C1:C" & DerLig_f1).Find(DateSaisie +1, LookIn:=xlValues, lookat:=xlWhole) 'on recherche la date saisie. A répéter sur toutes les lignes concernées.

En faisant tourner la macro, il y a du progrès, mais ce n'est pas encore tout à fait ça.

Le code avec les dernières modif
VB:
Sub Traitement()
    'Déclaration des variables
    Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet, f5 As Worksheet, f6 As Worksheet, f7 As Worksheet
    Dim DerLig_f1 As Long, DerLig_f2 As Long, DerLig_f3 As Long, DerLig_f4 As Long, DerLig_f5 As Long, DerLig_f6 As Long, DerLig_f7 As Long
    Dim i As Long
    Dim DateSaisie As Double, DateNew As Double
    Dim x As Range, d As Range
    Dim FirstPassageOk As Boolean, SndPassageOk As Boolean
    Set f1 = Sheets("Données Analyse Charge")
    Set f2 = Sheets("Data")
    Set f3 = Sheets("Transfert & Retard")
    Set f4 = Sheets("Bilan")
    Set f5 = Sheets("Extraction")
    Set f6 = Sheets("Liste délai court")
    Set f7 = Sheets("Paramètre")
    
    Application.ScreenUpdating = False 'Evite les scintillements de l'écran et accélère l'exécution du programme
    DerLig_f7 = f7.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Paramètre"
    
    '**************************************************************************************************************************************************
    f3.Range("A2:C" & f3.Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents 'efface les précédents résultats de la feuille ""Transfert & Retard"
    f5.Select 'on se positionne sur la feuille "Extraction"
    
    '**************************************************************************************************************************************************
    '1ère étape :  trier les données en fonction des dates de la plus ancienne saisie à la plus récente de l'onglet "Extraction" en colonne I.
    DerLig_f5 = f5.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Extraction"
    f5.Range("A2:M" & DerLig_f5).Sort [I1], 1 'filtrage par date
    
    DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Données Analyse Charge"
    FirstPassageOk = False 'Le premier passage n'a pas encore eu lieu
    SndPassageOk = False 'Le deuxième passage n'a pas encore eu lieu
    
    '**************************************************************************************************************************************************
    For i = 2 To DerLig_f5 'De la ligne 2 à la dernière ligne de la feuille "Extraction"
        'feuille "Paramètre", on applique la formule en colonne M et on fige les valeurs pour pouvoir les exploiter par la suite
        f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],'Données Analyse Charge'!C[-10]:C[-4],7,FALSE),0)"
        f7.Range("M2:M" & DerLig_f7).Value = f7.Range("M2:M" & DerLig_f7).Value
        '2ème étape : Une fois triées, elle va faire une recherche V des données de la colonne C de l'onglet Données Analyse Charge par rapport aux données _
            de l'onglet Paramètre en K, et copier coller les valeurs de la colonne L (onglet Paramètre) vers Colonne D (onglet Données Analyse Charge).
       If FirstPassageOk = False Then 'si c'est le premier passage
            'on traite la première ligne de "Extraction"
            f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC[-1],Paramètre!C[7]:C[9],2,FALSE)" 'on récupère les valeurs de la colonne L de "Paramètre" avec une rechercheV
        ElseIf SndPassageOk = False Then 'Si ce n'est plus le premier passage, on traite les lignes suivantes de "Extraction"
            '2ème passage
                '1ère étape : copier les valeurs de la colonne I (Onglet Données Analyse Charge) sur la colonne M (Onglet Paramètre) via une recherche V (la valeur à _
                    rechercher se fait en fonction de la colonne K onglet Paramètre), il faudra faire un copier coller d'un onglet à l'autre via une fonction recherche V
            f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC11,'Données Analyse Charge'!C3:C9,7,FALSE),0)" 'Copie dans M de "Paramètre" avec une rechercheV
            f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC3,Paramètre!C11:C13,2,FALSE)" 'on récupère les valeurs de la colonne M de "Paramètre" dans "D" de "Données Analyse Charge"
            SndPassageOk = True
        End If
        f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value 'on remplace les formules par leurs valeurs
        
        '3ème étape : Sur (onglet Extraction), en colonne I prendre la première date saisie et la coller en B15 (onglet Data).
        If f5.Cells(i, "I") <> f5.Cells(i - 1, "I") Then 'si les dates sont différentes
            f2.Range("B15").Value = f5.Cells(i, "I").Value ' on copie la date traitée de "Extraction" vers B15 de "Data"
            
            '4ème étape : Une fois le collage en B15 Faite, il va prendre la valeur de la date en B16 (onglet Data) copier et coller en colonne A (démarrage en A2, onglet Transfert & Retard),
            DerLig_f3 = f3.Range("A" & Rows.Count).End(xlUp).Row + 1 'dernière ligne de la feuille "Transfert & Retard"
            f3.Cells(DerLig_f3, "A") = f2.Range("B16").Value 'Copie de la date saisie en B16 de "Data"
            DateSaisie = f3.Cells(DerLig_f3, "A") 'Attribution de la date à la variable "DateSaisie"
            
            'Puis en B (démarrage en B2, onglet Transfert & Retard) la charge à transférer qui se trouve en G (onglet Données Analyse Charge), la cellule _
                à prendre se retrouve en fonction de la croix sur la colonne V du même onglet. S'il identifie une croix, alors il va sur la même ligne en G, _
                copie et colle la valeur sur la colonne B (démarrage en B2, onglet Transfert & Retard)
            If FirstPassageOk = False Then 'si c'est le premier passage
                Set x = f1.Range("C1:C" & DerLig_f1).Find(DateSaisie + 1, LookIn:=xlValues, lookat:=xlWhole) 'on recherche la date saisie
                If Not x Is Nothing Then 'Si la date est trouvée
                    If f1.Cells(x.Row, "V") = "x" Then 'on regarde s'il y a un "x" dans la colonne "V"
                        f3.Cells(DerLig_f3, "B") = f1.Cells(x.Row, "G") 'on copie en "B" la valeur trouvée en "G"
                        'En colonne C (démarrage en C2), sera le retard de la charge planifiée. La valeur est obtenue en fonction des conditions de la colonne F et W _
                            (onglet Données Analyse Charge). Regarder la colonne V, s'il y a une croix alors aller sur la colonne F de cette même ligne.
                        If f1.Cells(x.Row, "F") > 0 Then 'Si la valeur est supérieure à 0. Alors la valeur à mettre en colonne C (onglet Transfert & Retard) sera 0.
                            f3.Cells(DerLig_f3, "C") = 0
                        ElseIf f1.Cells(x.Row, "F") <= 0 Then 'Si inférieure ou égale à 0, alors il faut faire une recherche V de la valeur se trouvant en colonne C (onglet Données Analyse Charge), _
                            mais faire cette recherche V sur la valeur en ligne+1 en partant de la ligne où il y a la croix.
                            DateNew = f2.Range("B6") 'Nouvelle date à rechercher, équivaut à B6 de la feuille "Data"
                            Set x = f1.Range(f1.Cells(x.Row, "C"), f1.Cells(DerLig_f1, "C")).Find(DateNew, LookIn:=xlValues, lookat:=xlWhole)
                            f3.Cells(DerLig_f3, "C") = f1.Cells(x.Row, "D") 'la valeur à coller sur ma colonne C (Onglet Transfert & Retard) sera Le résultat trouvée en colonne L (onglet Paramètre) en fonction de la valeur cherchée en C (onglet Données Analyse Charge).
                        End If
                    End If
                End If
            ElseIf FirstPassageOk = True Then 'si ce sont les passages suivants
                Set x = f1.Range("C1:C" & DerLig_f1).Find(DateSaisie + 1, LookIn:=xlValues, lookat:=xlWhole) 'on recherche la date saisie
                If Not x Is Nothing Then 'Si la date est trouvée
                    If f1.Cells(x.Row, "V") = "x" Then 'on regarde s'il y a un "x" dans la colonne "V"
                        f3.Cells(DerLig_f3, "B") = f1.Cells(x.Row, "G") + f3.Cells(DerLig_f3 - 1, "B") 'on copie en "B" la valeur trouvée en "G" + l'ancienne valeur de charge
                        If f1.Cells(x.Row, "F") > 0 Then 'Si la valeur est supérieure à 0. Alors la valeur à mettre en colonne C (onglet Transfert & Retard) sera 0.
                            f3.Cells(DerLig_f3, "C") = 0
                        ElseIf f1.Cells(x.Row, "F") <= 0 Then 'Si inférieure ou égale à 0, alors il faut faire une recherche V de la valeur se trouvant en colonne C (onglet Données Analyse Charge), _
                            mais faire cette recherche V sur la valeur en ligne+1 en partant de la ligne où il y a la croix.
                            DateNew = f2.Range("B6") 'Nouvelle date à rechercher, équivaut à B6 de la feuille "Data"
                            Set d = f1.Range(f1.Cells(x.Row, "C"), f1.Cells(DerLig_f1, "C")).Find(DateNew, LookIn:=xlValues, lookat:=xlWhole)
                            If Not d Is Nothing Then
                                f3.Cells(DerLig_f3, "C") = f1.Cells(d.Row, "D") + f3.Cells(DerLig_f3 - 1, "C") 'la valeur à coller sur ma colonne C (Onglet Transfert & Retard) + l'ancienne valeur de charge
                            End If
                        End If
                    End If
                End If
            End If
        End If
        FirstPassageOk = True 'le premier passage à eu lieu, donc lors des prochains passages on exécutera les lignes suivantes
    Next i

    f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],'Données Analyse Charge'!C[-10]:C[-4],7,FALSE),0)" 'réécriture des formules en colonne M de "Paramètre"
    f3.Select ' affichage de la feuille "Transfert & Retard"
    
    '**************************************************************************************************************************************
    'Libération de la mémoire
    Set d = Nothing
    Set x = Nothing
    Set f1 = Nothing
    Set f2 = Nothing
    Set f3 = Nothing
    Set f4 = Nothing
    Set f5 = Nothing
    Set f6 = Nothing
    Set f7 = Nothing
End Sub
 

Sonia2020

XLDnaute Nouveau
On cherche la date du 19/10/2020, elle se trouve bien en ligne 71, c'est bien ce que renvoi x.row, mais la valeur "x" est la ligne au-dessus.
Il y a peut-être un problème d'incompréhension de ma part. Moi j'ai compris qu'il fallait chercher en priorité la date de saisie (le 19/10/2020) alors que ce serait la date de saisie +1 soit le 20/10/2020
Dans ce cas, il suffit de modifier les lignes en ajoutant 1 la suite de DateSaise
Set x = f1.Range("C1:C" & DerLig_f1).Find(DateSaisie +1, LookIn:=xlValues, lookat:=xlWhole) 'on recherche la date saisie. A répéter sur toutes les lignes concernées.

En faisant tourner la macro, il y a du progrès, mais ce n'est pas encore tout à fait ça.

Le code avec les dernières modif
VB:
Sub Traitement()
    'Déclaration des variables
    Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet, f5 As Worksheet, f6 As Worksheet, f7 As Worksheet
    Dim DerLig_f1 As Long, DerLig_f2 As Long, DerLig_f3 As Long, DerLig_f4 As Long, DerLig_f5 As Long, DerLig_f6 As Long, DerLig_f7 As Long
    Dim i As Long
    Dim DateSaisie As Double, DateNew As Double
    Dim x As Range, d As Range
    Dim FirstPassageOk As Boolean, SndPassageOk As Boolean
    Set f1 = Sheets("Données Analyse Charge")
    Set f2 = Sheets("Data")
    Set f3 = Sheets("Transfert & Retard")
    Set f4 = Sheets("Bilan")
    Set f5 = Sheets("Extraction")
    Set f6 = Sheets("Liste délai court")
    Set f7 = Sheets("Paramètre")
  
    Application.ScreenUpdating = False 'Evite les scintillements de l'écran et accélère l'exécution du programme
    DerLig_f7 = f7.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Paramètre"
  
    '**************************************************************************************************************************************************
    f3.Range("A2:C" & f3.Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents 'efface les précédents résultats de la feuille ""Transfert & Retard"
    f5.Select 'on se positionne sur la feuille "Extraction"
  
    '**************************************************************************************************************************************************
    '1ère étape :  trier les données en fonction des dates de la plus ancienne saisie à la plus récente de l'onglet "Extraction" en colonne I.
    DerLig_f5 = f5.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Extraction"
    f5.Range("A2:M" & DerLig_f5).Sort [I1], 1 'filtrage par date
  
    DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Données Analyse Charge"
    FirstPassageOk = False 'Le premier passage n'a pas encore eu lieu
    SndPassageOk = False 'Le deuxième passage n'a pas encore eu lieu
  
    '**************************************************************************************************************************************************
    For i = 2 To DerLig_f5 'De la ligne 2 à la dernière ligne de la feuille "Extraction"
        'feuille "Paramètre", on applique la formule en colonne M et on fige les valeurs pour pouvoir les exploiter par la suite
        f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],'Données Analyse Charge'!C[-10]:C[-4],7,FALSE),0)"
        f7.Range("M2:M" & DerLig_f7).Value = f7.Range("M2:M" & DerLig_f7).Value
        '2ème étape : Une fois triées, elle va faire une recherche V des données de la colonne C de l'onglet Données Analyse Charge par rapport aux données _
            de l'onglet Paramètre en K, et copier coller les valeurs de la colonne L (onglet Paramètre) vers Colonne D (onglet Données Analyse Charge).
       If FirstPassageOk = False Then 'si c'est le premier passage
            'on traite la première ligne de "Extraction"
            f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC[-1],Paramètre!C[7]:C[9],2,FALSE)" 'on récupère les valeurs de la colonne L de "Paramètre" avec une rechercheV
        ElseIf SndPassageOk = False Then 'Si ce n'est plus le premier passage, on traite les lignes suivantes de "Extraction"
            '2ème passage
                '1ère étape : copier les valeurs de la colonne I (Onglet Données Analyse Charge) sur la colonne M (Onglet Paramètre) via une recherche V (la valeur à _
                    rechercher se fait en fonction de la colonne K onglet Paramètre), il faudra faire un copier coller d'un onglet à l'autre via une fonction recherche V
            f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC11,'Données Analyse Charge'!C3:C9,7,FALSE),0)" 'Copie dans M de "Paramètre" avec une rechercheV
            f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC3,Paramètre!C11:C13,2,FALSE)" 'on récupère les valeurs de la colonne M de "Paramètre" dans "D" de "Données Analyse Charge"
            SndPassageOk = True
        End If
        f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value 'on remplace les formules par leurs valeurs
      
        '3ème étape : Sur (onglet Extraction), en colonne I prendre la première date saisie et la coller en B15 (onglet Data).
        If f5.Cells(i, "I") <> f5.Cells(i - 1, "I") Then 'si les dates sont différentes
            f2.Range("B15").Value = f5.Cells(i, "I").Value ' on copie la date traitée de "Extraction" vers B15 de "Data"
          
            '4ème étape : Une fois le collage en B15 Faite, il va prendre la valeur de la date en B16 (onglet Data) copier et coller en colonne A (démarrage en A2, onglet Transfert & Retard),
            DerLig_f3 = f3.Range("A" & Rows.Count).End(xlUp).Row + 1 'dernière ligne de la feuille "Transfert & Retard"
            f3.Cells(DerLig_f3, "A") = f2.Range("B16").Value 'Copie de la date saisie en B16 de "Data"
            DateSaisie = f3.Cells(DerLig_f3, "A") 'Attribution de la date à la variable "DateSaisie"
          
            'Puis en B (démarrage en B2, onglet Transfert & Retard) la charge à transférer qui se trouve en G (onglet Données Analyse Charge), la cellule _
                à prendre se retrouve en fonction de la croix sur la colonne V du même onglet. S'il identifie une croix, alors il va sur la même ligne en G, _
                copie et colle la valeur sur la colonne B (démarrage en B2, onglet Transfert & Retard)
            If FirstPassageOk = False Then 'si c'est le premier passage
                Set x = f1.Range("C1:C" & DerLig_f1).Find(DateSaisie + 1, LookIn:=xlValues, lookat:=xlWhole) 'on recherche la date saisie
                If Not x Is Nothing Then 'Si la date est trouvée
                    If f1.Cells(x.Row, "V") = "x" Then 'on regarde s'il y a un "x" dans la colonne "V"
                        f3.Cells(DerLig_f3, "B") = f1.Cells(x.Row, "G") 'on copie en "B" la valeur trouvée en "G"
                        'En colonne C (démarrage en C2), sera le retard de la charge planifiée. La valeur est obtenue en fonction des conditions de la colonne F et W _
                            (onglet Données Analyse Charge). Regarder la colonne V, s'il y a une croix alors aller sur la colonne F de cette même ligne.
                        If f1.Cells(x.Row, "F") > 0 Then 'Si la valeur est supérieure à 0. Alors la valeur à mettre en colonne C (onglet Transfert & Retard) sera 0.
                            f3.Cells(DerLig_f3, "C") = 0
                        ElseIf f1.Cells(x.Row, "F") <= 0 Then 'Si inférieure ou égale à 0, alors il faut faire une recherche V de la valeur se trouvant en colonne C (onglet Données Analyse Charge), _
                            mais faire cette recherche V sur la valeur en ligne+1 en partant de la ligne où il y a la croix.
                            DateNew = f2.Range("B6") 'Nouvelle date à rechercher, équivaut à B6 de la feuille "Data"
                            Set x = f1.Range(f1.Cells(x.Row, "C"), f1.Cells(DerLig_f1, "C")).Find(DateNew, LookIn:=xlValues, lookat:=xlWhole)
                            f3.Cells(DerLig_f3, "C") = f1.Cells(x.Row, "D") 'la valeur à coller sur ma colonne C (Onglet Transfert & Retard) sera Le résultat trouvée en colonne L (onglet Paramètre) en fonction de la valeur cherchée en C (onglet Données Analyse Charge).
                        End If
                    End If
                End If
            ElseIf FirstPassageOk = True Then 'si ce sont les passages suivants
                Set x = f1.Range("C1:C" & DerLig_f1).Find(DateSaisie + 1, LookIn:=xlValues, lookat:=xlWhole) 'on recherche la date saisie
                If Not x Is Nothing Then 'Si la date est trouvée
                    If f1.Cells(x.Row, "V") = "x" Then 'on regarde s'il y a un "x" dans la colonne "V"
                        f3.Cells(DerLig_f3, "B") = f1.Cells(x.Row, "G") + f3.Cells(DerLig_f3 - 1, "B") 'on copie en "B" la valeur trouvée en "G" + l'ancienne valeur de charge
                        If f1.Cells(x.Row, "F") > 0 Then 'Si la valeur est supérieure à 0. Alors la valeur à mettre en colonne C (onglet Transfert & Retard) sera 0.
                            f3.Cells(DerLig_f3, "C") = 0
                        ElseIf f1.Cells(x.Row, "F") <= 0 Then 'Si inférieure ou égale à 0, alors il faut faire une recherche V de la valeur se trouvant en colonne C (onglet Données Analyse Charge), _
                            mais faire cette recherche V sur la valeur en ligne+1 en partant de la ligne où il y a la croix.
                            DateNew = f2.Range("B6") 'Nouvelle date à rechercher, équivaut à B6 de la feuille "Data"
                            Set d = f1.Range(f1.Cells(x.Row, "C"), f1.Cells(DerLig_f1, "C")).Find(DateNew, LookIn:=xlValues, lookat:=xlWhole)
                            If Not d Is Nothing Then
                                f3.Cells(DerLig_f3, "C") = f1.Cells(d.Row, "D") + f3.Cells(DerLig_f3 - 1, "C") 'la valeur à coller sur ma colonne C (Onglet Transfert & Retard) + l'ancienne valeur de charge
                            End If
                        End If
                    End If
                End If
            End If
        End If
        FirstPassageOk = True 'le premier passage à eu lieu, donc lors des prochains passages on exécutera les lignes suivantes
    Next i

    f7.Range("M2:M" & DerLig_f7).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-2],'Données Analyse Charge'!C[-10]:C[-4],7,FALSE),0)" 'réécriture des formules en colonne M de "Paramètre"
    f3.Select ' affichage de la feuille "Transfert & Retard"
  
    '**************************************************************************************************************************************
    'Libération de la mémoire
    Set d = Nothing
    Set x = Nothing
    Set f1 = Nothing
    Set f2 = Nothing
    Set f3 = Nothing
    Set f4 = Nothing
    Set f5 = Nothing
    Set f6 = Nothing
    Set f7 = Nothing
End Sub

Avec les modifications il y a bien du nouveau.

J'ai ce résultat là.
Il me prend bien les retards, mais me manque les données

1603724367252.png


Le résultat attendu est celui-ci dessous.
Date saisieHeures transfertsHeures retards
20201019​
0​
0​
20201020​
0​
0​
20201021​
94​
0​
20201022​
181​
20​
20201023​
216​
40​
20201024​
270​
60​

Il faut que j'essaye de comprendre pourquoi ?
Mais j'ai surement une idée quand j'arrive à la fin de la boucle, je me rend compte que la capacité (colonne D onglet Données Analyse Charge) est toujours de 20 alors que je suis censé avoir des capa à 0. Je pense que c'est cela qui fait que je n'ai pas le résultat escompté.

Puis, la charge de transfert est toujours à 0, je ne suis pas censé avoir que des 0 sur ces données de tests.

On arrive à bout touchant.

Merci Merci mille fois pour ton aide !!
Sonia
 

Rouge

XLDnaute Impliqué
Bonjour,

"j'ai surement une idée quand j'arrive à la fin de la boucle, je me rend compte que la capacité (colonne D onglet Données Analyse Charge) est toujours de 20 alors que je suis censé avoir des capa à 0. Je pense que c'est cela qui fait que je n'ai pas le résultat escompté."
"Puis, la charge de transfert est toujours à 0, je ne suis pas censé avoir que des 0 sur ces données de tests"


Avant de faire quoi que ce soit, j'attends de savoir si vous avez une explication sur ces valeurs de la colonne D

Cdlt
 

Sonia2020

XLDnaute Nouveau
Bonjour Rouge,

Tout d'abord un grand grand grand grand merci pour ton aide !!!
En triturant ta macro et en essayant de comprendre.

J'ai du ajouter une colonne en zone (Données Analyse Charge) et ajouter des cellules de calculs en B23 et B24 sur l'onglet Data afin de faire varier les données de l'onglet Données Analyse Charge.

Avec cela j'ai réduit la difficulté de recherche.

Avec cette macro si dessous, cela résoud tous mes soucis mais cela c'est grâce à vous !!!!

Merci Merci Merci.

J'ai utilisé cette macro avec des modifications de certaines lignes.

VB:
Option Explicit
Option Compare Text

Sub Traitement()
    'Déclaration des variables
    Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet, f5 As Worksheet, f6 As Worksheet, f7 As Worksheet
    Dim DerLig_f1 As Long, DerLig_f2 As Long, DerLig_f3 As Long, DerLig_f4 As Long, DerLig_f5 As Long, DerLig_f6 As Long, DerLig_f7 As Long
    Dim i As Long
    Dim DateSaisie As Double, DateNew As Double
    Dim x As Range, d As Range
    Dim FirstPassageOk As Boolean, SndPassageOk As Boolean
    Set f1 = Sheets("Données Analyse Charge")
    Set f2 = Sheets("Data")
    Set f3 = Sheets("Transfert & Retard")
    Set f4 = Sheets("Bilan")
    Set f5 = Sheets("Extraction")
    Set f6 = Sheets("Liste délai court")
    Set f7 = Sheets("Paramètre")
    
    Application.ScreenUpdating = False 'Evite les scintillements de l'écran et accélère l'exécution du programme
    DerLig_f7 = f7.Range("E" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Paramètre"
    
    '**************************************************************************************************************************************************
    f3.Range("A2:C" & f3.Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents 'efface les précédents résultats de la feuille ""Transfert & Retard"
    f5.Select 'on se positionne sur la feuille "Extraction"
    
    '**************************************************************************************************************************************************
    '1ère étape :  trier les données en fonction des dates de la plus ancienne saisie à la plus récente de l'onglet "Extraction" en colonne I.
    DerLig_f5 = f5.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Extraction"
    f5.Range("A2:M" & DerLig_f5).Sort [I1], 1 'filtrage par date
    
    DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Données Analyse Charge"
    FirstPassageOk = False 'Le premier passage n'a pas encore eu lieu
    SndPassageOk = False 'Le deuxième passage n'a pas encore eu lieu
    
    '**************************************************************************************************************************************************
    For i = 2 To DerLig_f5 'De la ligne 2 à la dernière ligne de la feuille "Extraction"
        '2ème étape : Une fois triées, elle va faire une recherche V des données de la colonne C de l'onglet Données Analyse Charge par rapport aux données _
            de l'onglet Paramètre en K, et copier coller les valeurs de la colonne L (onglet Paramètre) vers Colonne D (onglet Données Analyse Charge).
       If FirstPassageOk = False Then 'si c'est le premier passage
            'on traite la première ligne de "Extraction"
            f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC[-1],Paramètre!C[7]:C[9],2,FALSE)" 'on récupère les valeurs de la colonne L de "Paramètre" avec une rechercheV
        ElseIf SndPassageOk = False Then 'Si ce n'est plus le premier passage, on traite les lignes suivantes de "Extraction"
            '2ème passage
                '1ère étape : copier les valeurs de la colonne I (Onglet Données Analyse Charge) sur la colonne M (Onglet Paramètre) via une recherche V (la valeur à _
                    rechercher se fait en fonction de la colonne K onglet Paramètre), il faudra faire un copier coller d'un onglet à l'autre via une fonction recherche V
            f1.Range("D5:D" & DerLig_f1).Value = f1.Range("I5:I" & DerLig_f1).Value 'Copie les valeurs de la colonne I vers colonne C
            SndPassageOk = True
        End If
        'f1.Range("D5:D" & DerLig_f1).Value = f1.Range("D5:D" & DerLig_f1).Value 'on remplace les formules par leurs valeurs
        
        '3ème étape : Sur (onglet Extraction), en colonne I prendre la première date saisie et la coller en B15 (onglet Data).
        If f5.Cells(i, "I") <> f5.Cells(i - 1, "I") Then 'si les dates sont différentes
            f2.Range("B15").Value = f5.Cells(i, "I").Value ' on copie la date traitée de "Extraction" vers B15 de "Data"
            
            '4ème étape : Une fois le collage en B15 Faite, il va prendre la valeur de la date en B16 (onglet Data) copier et coller en colonne A (démarrage en A2, onglet Transfert & Retard),
            DerLig_f3 = f3.Range("A" & Rows.Count).End(xlUp).Row + 1 'dernière ligne de la feuille "Transfert & Retard"
            f3.Cells(DerLig_f3, "A") = f2.Range("B16").Value 'Copie de la date saisie en B16 de "Data"
            'DateSaisie = f3.Cells(DerLig_f3, "A") 'Attribution de la date à la variable "DateSaisie"
            f3.Cells(DerLig_f3, "B") = f2.Range("B24").Value ' Copie des heures de transferts en B24 de "Data"
            f3.Cells(DerLig_f3, "C") = f2.Range("B23").Value ' Copie des heures de retards en B23 de "Data"
            
        End If
        FirstPassageOk = True 'le premier passage à eu lieu, donc lors des prochains passages on exécutera les lignes suivantes
    Next i

    f1.Range("D5:D" & DerLig_f7).FormulaR1C1 = "=VLOOKUP(RC[-1],Paramètre!C[7]:C[9],2,FALSE)" 'réécriture des formules en colonne M de "Paramètre"
    f3.Select ' affichage de la feuille "Transfert & Retard"
    
    '**************************************************************************************************************************************
    'Libération de la mémoire
    'Set d = Nothing
    'Set x = Nothing
    Set f1 = Nothing
    Set f2 = Nothing
    Set f3 = Nothing
    Set f4 = Nothing
    Set f5 = Nothing
    Set f6 = Nothing
    Set f7 = Nothing
End Sub

Tout est résolu grâce à vous !!!

Merci encore, je suis si contente hihi !!!

Belle journée à vous et bon courage pour la suite !!!
Sonia
 

Rouge

XLDnaute Impliqué
Quelle est votre version d'excel? la mienne étant de 2007, cela me met tous les résultats des dates transformées par vos formules "ANNEE(F3)*10000+MOIS(F3)*100+JOUR(F3))" en #VALEUR", ce qui est un peu gênant pour pouvoir suivre les comportements.

1er Bug:
Le tri pas d'anomalies constatées, même en le faisant manuellement.

2ème bug:
"Le collage des valeurs Colonne I vers C de l'onglet Données Analyse Charge, ne fonctionne pas. "
Ce que je vois, c'est que cela copie vers D et non vers C

f1.Range("D5:D" & DerLig_f1).Value = f1.Range("I5:I" & DerLig_f1).Value 'Copie les valeurs de la colonne I vers colonne C

Cette ligne là me chagrine
If f5.Cells(i, "O") <> f5.Cells(i - 1, "O") Then 'si les dates sont différentes
 

Sonia2020

XLDnaute Nouveau
Quelle est votre version d'excel? la mienne étant de 2007, cela me met tous les résultats des dates transformées par vos formules "ANNEE(F3)*10000+MOIS(F3)*100+JOUR(F3))" en #VALEUR", ce qui est un peu gênant pour pouvoir suivre les comportements.

1er Bug:
Le tri pas d'anomalies constatées, même en le faisant manuellement.

2ème bug:
"Le collage des valeurs Colonne I vers C de l'onglet Données Analyse Charge, ne fonctionne pas. "
Ce que je vois, c'est que cela copie vers D et non vers C

f1.Range("D5:D" & DerLig_f1).Value = f1.Range("I5:I" & DerLig_f1).Value 'Copie les valeurs de la colonne I vers colonne C

Cette ligne là me chagrine
If f5.Cells(i, "O") <> f5.Cells(i - 1, "O") Then 'si les dates sont différentes

Bonjour Rouge

Vous allez me dire RHHOOOOOOO, mais j'ai essayé une autre solution avec les cases.

Avec cette méthodes, j'ai réussi à trouver ce que je cherchais hihi !!!

VB:
Option Explicit
Option Compare Text

Sub Traitement()
    'Déclaration des variables
    Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet, f4 As Worksheet, f5 As Worksheet, f6 As Worksheet, f7 As Worksheet
    Dim DerLig_f1 As Long, DerLig_f2 As Long, DerLig_f3 As Long, DerLig_f4 As Long, DerLig_f5 As Long, DerLig_f6 As Long, DerLig_f7 As Long
    Dim i As Long
    Dim DateSaisie As Double, DateNew As Double
    Dim x As Range, d As Range
    Dim FirstPassageOk As Boolean, SndPassageOk As Boolean
    Set f1 = Sheets("Données Analyse Charge")
    Set f2 = Sheets("Data")
    Set f3 = Sheets("Transfert & Retard")
    Set f4 = Sheets("Bilan")
    Set f5 = Sheets("Extraction")
    Set f6 = Sheets("Liste délai court")
    Set f7 = Sheets("Paramètre")
    
    Application.ScreenUpdating = False 'Evite les scintillements de l'écran et accélère l'exécution du programme
    f7.Activate 'Active Onglet Paramètre
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotCache.Refresh 'Met à jour le TCD 3
    ActiveSheet.PivotTables("Tableau croisé dynamique4").PivotCache.Refresh 'Met à jour le TCD 4
    ActiveSheet.PivotTables("Tableau croisé dynamique5").PivotCache.Refresh 'Met à jour le TCD 5
    DerLig_f7 = f7.Range("E" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Paramètre"
    
    '**************************************************************************************************************************************************
    f3.Range("A2:D" & f3.Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents 'efface les précédents résultats de la feuille ""Transfert & Retard"
    f5.Select 'on se positionne sur la feuille "Extraction"
    
    '**************************************************************************************************************************************************
    '1ère étape :  trier les données en fonction des dates de la plus ancienne saisie à la plus récente de l'onglet "Extraction" en colonne I.
    DerLig_f5 = f5.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Extraction"
    f5.Range("A2:O" & DerLig_f5).Sort [O1], 1 'filtrage par concatener
    'Call Macro2
    
    DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de la feuille "Données Analyse Charge"
    FirstPassageOk = False 'Le premier passage n'a pas encore eu lieu
    SndPassageOk = False 'Le deuxième passage n'a pas encore eu lieu
    
    '**************************************************************************************************************************************************
    For i = 2 To DerLig_f5 'De la ligne 2 à la dernière ligne de la feuille "Extraction"
        Select Case i ' Réalisation des cas jusqu'à la dernière ligne non vide de la feuille Extraction
            Case 2 ' Démarre les valeurs de la ligne 2
                f1.Range("D5:D" & DerLig_f1).FormulaR1C1 = "=VLOOKUP(RC[-1],Paramètre!C[7]:C[9],2,FALSE)" 'on récupère les valeurs de la colonne L de "Paramètre" avec une rechercheV
            
            Case Else 'A partir de la ligne 3
                f1.Range("D5:D" & DerLig_f1).Value = f1.Range("I5:I" & DerLig_f1).Value 'Copie les valeurs de la colonne I vers colonne C
            
        End Select 'Fin des cas
        
        'Sur (onglet Extraction), en colonne I prendre la première date saisie et la coller en B15 (onglet Data).
        If f5.Cells(i, "O") <> f5.Cells(i - 1, "O") Then 'si les dates sont différentes
                f2.Range("B15").Value = f5.Cells(i, "I").Value ' on copie la date traitée de "Extraction" vers B15 de "Data"
                f2.Range("B21").Value = f5.Cells(i, "A").Value ' on copie la date traitée de "Extraction" vers B21 de "Data"
            
        '4ème étape : Une fois le collage en B15 Faite, il va prendre la valeur de la date en B16 (onglet Data) copier et coller en colonne A (démarrage en A2, onglet Transfert & Retard),
            DerLig_f3 = f3.Range("A" & Rows.Count).End(xlUp).Row + 1 'dernière ligne de la feuille "Transfert & Retard"
            f3.Cells(DerLig_f3, "A") = f2.Range("B16").Value 'Copie de la date saisie en B16 de "Data"
            'DateSaisie = f3.Cells(DerLig_f3, "A") 'Attribution de la date à la variable "DateSaisie"
            f3.Cells(DerLig_f3, "B") = f2.Range("B21").Value ' Copie des heures de transferts en B21 de "Data"
            f3.Cells(DerLig_f3, "C") = f2.Range("B29").Value ' Copie des heures de transferts en B29 de "Data"
            f3.Cells(DerLig_f3, "D") = f2.Range("B28").Value ' Copie des heures de retards en B28 de "Data"
            
        End If
    Next i
     f3.Range("I2:I1000").Value = f1.Range("C5:C1000").Value
    f3.Range("J2:J1000").Value = f1.Range("I5:I1000").Value
    f1.Range("D5:D" & DerLig_f7).FormulaR1C1 = "=VLOOKUP(RC[-1],Paramètre!C[7]:C[9],2,FALSE)" 'réécriture des formules en colonne M de "Paramètre"
    f3.Select ' affichage de la feuille "Transfert & Retard"
    
    '**************************************************************************************************************************************
    'Libération de la mémoire
    'Set d = Nothing
    'Set x = Nothing
    Set f1 = Nothing
    Set f2 = Nothing
    Set f3 = Nothing
    Set f4 = Nothing
    Set f5 = Nothing
    Set f6 = Nothing
    Set f7 = Nothing
End Sub

Cette ligne là me chagrine
If f5.Cells(i, "O") <> f5.Cells(i - 1, "O") Then 'si les dates sont différentes

Et bien, je crois que cela fonctionne bien. J'ai fait des tests avec des dates au plus tôt dans le désordre et cela fonctionne.

Merci encore du fond du coeur.

ihihi

Sonia
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 796
Membres
101 817
dernier inscrit
carvajal