XL 2013 Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

  • Initiateur de la discussion Initiateur de la discussion Averell1976
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Averell1976

XLDnaute Junior
Bonjour à toutes et à tous,

J'ai posé un sujet il y a quelques temps. J'ai reçu de l'aide de votre part et je vous en remercie vivement, mais je coince toujours. Je n'avais pas de code à vous proposer, mais aujourd'hui, j'ai quelque peu avancé. Je peux donc vous le soumettre. J’avais mis les fichiers en PJ mais je comprends que cela puisse poser problème.
L'objectif est de transférer des données (en lignes) d'un fichier, compris entre 2 dates vers une colonne d'un autre fichier:

Code:
Private Sub GenererPlanning_Jour_Click()
 'J'ouvre un userform et je renseigne la date de début et la date de fin pour récupérer toutes les données entre ces 2 dates   
    Application.ScreenUpdating = False
    Set Fdép = ActiveSheet
    Dte1 = DateValue(Right(TextBox1, 10))
    Dte2 = DateValue(Right(TextBox2, 10))
    If Dte2 < Dte1 Then
        MsgBox "     Mauvaise saisie !" & Chr(13) & "     La date de fin doit être postérieure à celle de début ! ", 16
        Exit Sub
    End If
    LnNom = ComboBox1.ListIndex + 11
    NbreMois = Month(Dte2) - Month(Dte1)
    If NbreMois < 0 Then NbreMois = NbreMois + 13
    NomMois = Array("JANVIER", "FéVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOÛT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DéCEMBRE")
    
    Chemin = ThisWorkbook.Path & "\"
    If TextBox1 = "" Or TextBox2 = "" Then
        MsgBox "     Vous devez saisir une date de début et une date de " & Chr(13) & "     fin de remplacement.", 16
        Exit Sub
    End If
    
    'On ouvre le planning du remplaçant (le fichier dans lequel je veux copier les données en colonne)
    Application.DisplayAlerts = False
    'Workbooks.Open Filename:=Chemin & "MATRICE PLANNING JOUR PREVISIONNEL INDIVIDUEL.xlsm"
    Workbooks.Open Filename:="O:\Cecile BALANDRAUD\MATRICES\MATRICE PLANNING_FL\FL Melting1.xlsm"
    Set DocDest = ActiveWorkbook
    ActiveSheet.Name = NomMois(Month(Dte1) - 1)
    'Range("A1").Value = Fdép.Cells(LnNom + 1, 2).Value
    'Range("A2").Value = "qui remplace " & ComboBox1
    

    'On affiche le mois de début de remplacement dans ce fichier qui s'est ouvert
    Fdép.Range("Z2").Value = NomMois(Month(Dte1) - 1)
    Fdép.Range("AC2").Value = Year(Dte1)
    DocDest.Sheets(NomMois(Month(Dte1) - 1)).Range("O10").Value = NomMois(Month(Dte1) - 1)
    '''''''''''
    DocDest.Sheets(NomMois(Month(Dte1) - 1)).Range("O8").Value = Year(Dte1)
    
    ' Dernière colonne du mois
   For i = 3 To 34
    If Fdép.Cells(9, i).Value = "" Then
    Exit For
    End If
   Next i
   DerCol = i - 1
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'On copie les jours de remplacement dans le planning du remplaçant; c'est là que ça coince
    For Col = 3 To DerCol
    For Lign = 21 To 51
  If Fdép.Cells(9, Col).Value >= Dte1 And Fdép.Cells(9, Col).Value <= Dte2 Then
    'If DocDest.Sheets(NomMois(Month(Dte1) - 1)).Cells(Lign, 1).Value >= Dte1 And DocDest.Sheets(NomMois(Month(Dte1) - 1)).Cells(Lign, 1).Value <= Dte2 Then
    Fdép.Cells(LnNom, Col).Copy
    DocDest.Sheets(NomMois(Month(Dte1) - 1)).Cells(Lign, 3).PasteSpecial xlPasteAll, Operation:=xlNone, SkipBlanks:= _
 False, Transpose:=True 'selection un collage special => transposé permet de passer de ligne en colonne
 Application.CutCopyMode = False
        
    End If
    Next Lign
    Next Col
    
    Unload Me
 
''''''''''''''''''''''''''''''''''''''''''
 
End Sub

Merci de votre aide éventuelle.
Cordialement,

Averell
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Bonjour Averell.
Si tu as l'occasion de nous transmettre des fichiers sur lesquels tu travailles, afin que nous puissions apporter une réponse cohérente 🙂.
Bonne soirée.
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Bonjour Averell.
Si tu as l'occasion de nous transmettre des fichiers sur lesquels tu travailles, afin que nous puissions apporter une réponse cohérente 🙂.
Bonne soirée.
Bonsoir thebenoit59.
Merci pour ta réponse. Voici donc les fichiers. Le fichier source est MATRICE PLANNING FL. Le fichier de destination FL Melting 1.
L'objectif donc: En remplissant l'userform1 (nom du salarié, date de début d'absence, date de retour) et en cliquant sur le bouton "Générer un planning de jour", je voudrai récupérer les dates concernés en colonel A (partir de A21) et les horaires compris entre ces 2 dates en colonne C (à partir de C21, C22.... etc en fonction du nombre de jour) du fichier de destination... Ces horaires sont indiqués en ligne dans le fichier source (ex: ligne 11 pour le salarié "Combes": 13:30-22:00/R/R/7:00-14:00 entre le 1er et le 4 avril, à récupérer dans le fichier de destination en colonne C)

Merci de votre aide.
Averell
 

Pièces jointes

Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Bonjour Averell.

Je te joins le fichier sur lequel j'ai travaillé.
J'ai imaginé la procédure un peu différemment.

A toi de voir si ça peut te convenir.
 

Pièces jointes

Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Merci thebenoit59,

Un grand merci pour ton aide.
J'ai bidouillé toute la matinée et j'ai réussi à faire fonctionner mon fichier.
Ceci dit, je vois que ton code est beaucoup plus propre que le mien. Cela m'intéresse donc.
Mais en voulant le tester, j'ai directement un message d'erreur:
erreur.jpg

En débogage, il pointe sur:
erreur1.jpg

Je ne vois pas bien d'où cela vient... Tu n'as pas ce bug quand tu testes?
 

Pièces jointes

  • erreur.jpg
    erreur.jpg
    45.3 KB · Affichages: 37
  • erreur1.jpg
    erreur1.jpg
    21.8 KB · Affichages: 37
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Non, mais je pense savoir d'où vient le problème. Je n'ai pas ré-attribué le bouton, il faut l'attribuer à la macro suivante :

Code:
Private Sub PlanningCDD_Click()
Planning_Absence
End Sub

En gros, j'ai divisé la procédure générale en sous-procédures (voir le module thebenoit59).
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

En effet, c'était cela.
J'ai ré- attribué le bouton et je peux lancer. Mais quand je lance, ça me récupère n'importe quoi au niveau des dates en colonne A???
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Je n'avais testé qu'avec des dates à partir du 16, c'est dû au transfert en date américaine.
Modifie juste la procédure ci-dessous :

Code:
Sub Transferer_Donnees()
Dim Range_Donnees, Range_Dates, d As Object, d1 As Object
Dim i As Integer, c As Range
    With fBase
        Range_Dates = Application.Transpose(.Range(.Cells(9, Premiere_Colonne), .Cells(9, Derniere_Colonne)).Value)
        Set d1 = CreateObject("scripting.dictionary")
        For i = LBound(Range_Dates) To UBound(Range_Dates)
            d1(i) = CDate(Range_Dates(i, 1))
        Next i
        Range_Donnees = Application.Transpose(.Range(.Cells(Ligne_Absent, Premiere_Colonne), .Cells(Ligne_Absent, Derniere_Colonne)).Value)
        Set d = CreateObject("scripting.dictionary")
        For i = LBound(Range_Donnees) To UBound(Range_Donnees)
            d(i) = Range_Donnees(i, 1)
        Next i
    End With
    With fDestination
        For i = 1 To d1.Count
            .Cells(20 + i, 1).Value = d1(i)
        Next i
        For i = 1 To d.Count
            If d(i) = "R" Then
                .Cells(20 + i, 3).Resize(, 2).Value = d(i)
                Else: .Cells(20 + i, 3).Resize(, 2).Value = Split(d(i), "-")
            End If
        Next i
        For Each c In .Range(.Cells(21, 3), .Cells(20 + i, 4))
            c = Application.WorksheetFunction.Trim(c)
        Next c
    End With
End Sub
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Merci ça marche impeccable et cela s'exécute beaucoup plus rapidement que mon code....
Par contre du coup, je suis embêté car j'ai du mal à le comprendre et donc à le faire évoluer, pour récupérer par exemple le nom du salarié en colonne J... avec mon code, je sais où caser la requête, avec le tien, je vois pas trop.

En tout cas, je suis à la fois épaté, reconnaissant et dégouté car je n'aurai jamais pu programmer un truc aussi proprement...
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Il faut rajouter la commande dans la procédure Transferer_Donnees().
Ensuite la variable de la personne absente est Nom_Absent.
Juste définir la zone où tu souhaites le mettre, pour connaître le nombre de ligne tu peux utiliser Ubound(Range_Dates) comme variable.
Ce qui donnera :

Code:
.Cells(21,10).Resize(Ubound(Range_Dates)).Value = Nom_Absent

Bien sûr que tu aurais pu programmer ainsi. C'est juste une démarche à utiliser, celle-ci je m'efforce de l'utiliser à chacun de mes codes pour obtenir quelque chose de lisible pour mes collègues le jour de mes absences.
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Ce que je te conseille, c'est de lancer la procédure pas à pas, c'est à dire d'aller dans l'éditeur te placer à la première ligne de Planning_Absence et d'appuyer sur F8, tu pourras suivre le cheminement de la procédure.

Ensuite pour Nom_Absent, tu peux faire une recherche dans l'éditeur avec Ctrl+F et sélectionner dans le projet.
Tu remarqueras que la valeur est définit quand tu valides l'userform.

Pour le UBound, je place la zone des dates et des horaires sous forme de tableau Range_Donnees et Range_Dates.
LBound est la limite inférieure et UBound la limite supérieure (en gros la dernière ligne), soit le nombre de lignes qui seront utilisées.
 
Re : Transfet de données d'une ligne d'un fichier vers une colonne d'un autre fichier

Merci, j'ai compris, c'était en effet pas sorcier.
Je bricoles encore certaines choses pour l'améliorer.
Mais ton aide m'a été très très bénéfique.
Merci à toi.

Averell
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
240
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
500
Réponses
35
Affichages
2 K
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Retour