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 :

Copier coller en fonction d'une date précise [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 21
    Par défaut Copier coller en fonction d'une date précise
    Bonjour à tous,
    J'ai besoin de votre aide pour résoudre une erreur d'incompatibilité de type que je n'arrive pas à comprendre.
    J'ai deux feuilles dans mon classeur, l'une où j'ai des données avec la date du jour et l'autre où j'ai tout l'historique.
    J'aimerais pouvoir copier les données de cette première feuille pour les coller sur la seconde en appuyant sur un bouton.
    Je vous mets mon fichier en pièce-jointe et le code également ici.
    Merci d'avance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    col = Application.Match(Sheets("copie").[D4], Worksheets("colle").[2:2], 0)
    Worksheets("colle").Cells(3, col).Resize(25, 1).Value = Worksheets("colle").[B4:B28].Value
    Fichiers attachés Fichiers attachés

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

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     Dim plage As Range,  F1 As Worksheet, F2 As Worksheet
       Set F1 = Sheets("colle")
       Set F2 = Sheets("copie")
       dercol = F1.Cells(2, F1.Cells.Columns.Count).End(xlToLeft).Column
       Set plage = F1.Range(F1.Cells(2, 2), F1.Cells(2, dercol))
       Set c = plage.Find(F2.Cells(4, "D"), LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
    derlig = F1.Cells(Rows.Count, c.Column).End(xlUp).Row
    F1.Range(F1.Cells(3, c.Column), F1.Cells(derlig, c.Column)).Copy
    F2.Cells(4, "B").PasteSpecial Paste:=xlPasteValues
    End If
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 21
    Par défaut
    Bonjour et merci pour votre réponse.
    J'ai essayé ce que vous m'avez proposé et cela ne fonctionne pas pour moi. J'ai du mal à comprendre votre code.
    Si quelqu'un peut m'éclairer je suis preneur

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

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

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    et cela ne fonctionne pas pour moi
    je ne crois pas qu'il y a un code qui fonctionne pour moi et ne fonctionne pas pour toi... quel message d'erreur??? est ce que ça fonctionne sur mon fichier test ?? quelle différence par rapport à ton fichier??
    à la limite tu peux joindre un fichier comme exemple avec quelques lignes de données non discrétionnaires
    pour le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     Dim plage As Range,  F1 As Worksheet, F2 As Worksheet
       Set F1 = Sheets("colle")
       Set F2 = Sheets("copie")
       dercol = F1.Cells(2, F1.Cells.Columns.Count).End(xlToLeft).Column ' pour chercher la dernière colonne non vide de la ligne 2
       Set plage = F1.Range(F1.Cells(2, 2), F1.Cells(2, dercol)) ' la plage ou se trouve les dates sur la ligne 2
       Set c = plage.Find(F2.Cells(4, "D"), LookIn:=xlValues, lookat:=xlWhole) ' cherche la date qui se trouve en D4 de l'onglet "copie"
    If Not c Is Nothing Then 'si tu trouve la date 
    derlig = F1.Cells(Rows.Count, c.Column).End(xlUp).Row ' chercher la dernière ligne non vide de cette colonne ou se trouve cette date
    F1.Range(F1.Cells(3, c.Column), F1.Cells(derlig, c.Column)).Copy 'copier la plage de la ligne 3 à la dernière ligne non vide
    F2.Cells(4, "B").PasteSpecial Paste:=xlPasteValues  ' copier vers B4 de l'onglet "copie"
    End If
    End Sub
    j'espère que ça t'aide à avancer

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous, Bonjour au Forum,

    Je pars de l'hypothèse selon laquelle les données de la feuille "Colle" vont s'enrichir au fur et à mesure des jours.
    A mon avis, les données sont mal présentées dans la feuille "Colle".
    Les jours qui vont suivre vont alimenter les données.
    Celles-ci constituent donc un nouvel enregistrement.
    Pour parler concrètement, j'aurais inversé les lignes et les colonnes de cette feuille.

    Si l'on considère maintenant, une table de données (ou tableau structuré) nommée "T_Données"
    Si l'on considère une cellule annexe retournant la position du jour recherché dans la première colonne (champ "jour") de cette table, et nommée "lequiv"
    Alors, la formulation de cette cellule serait
    =EQUIV(D4;T_Données[Jour];0)
    Dès lors, une seule et même formule pourrait alimenter les cellules de la feuille "copie" reportant les résultats
    =INDEX(T_Données;lequiv;LIGNE()-2)
    On évite ainsi un développement VBA.

    Le tableau structuré "T_Données" se redimensionnant automatiquement, les formulations n'en seront nullement altérées.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2021
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2021
    Messages : 21
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    j'espère que ça t'aide à avancer
    Bonjour et encore merci pour ta réponse,
    Oui ça m'aide à avancer et avec tes commentaires sur le code j'ai compris ce qu'il se passait.
    Or, c'est l'inverse de mon besoin. Dans mon cas, j'aimerais que ce soit la feuille colle qui soit alimentée alors que dans ce code c'est le fichier copie.
    Je pourrais juste inverser le sens, or la recherche de la dernière colonne non vide ne fonctionnera pas, puisque il y a déjà toutes les dates qui y sont écrites.

    Je ne sais pas comment arriver à récupérer la position de la date correspondante et je n'arrive pas bien à comprendre la méthode de Marcel car ça ne me parle pas du tout. A vrai dire je ne suis pas un expert d'Excel.

    Mais avez-vous essayé mon code que j'avais proposé parce que je pense que cela doit marcher et il doit y avoir une erreur de syntaxe ou je ne sais pas trop quoi...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    col = Application.Match(Sheets("copie").[D4], Worksheets("colle").[2:2], 0)
    Worksheets("colle").Cells(3, col).Resize(25, 1).Value = Worksheets("colle").[B4:B28].Value

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    je n'arrive pas bien à comprendre la méthode de Marcel car ça ne me parle pas du tout
    Pour ce faire, il te faut d'abord intégrer la notion de tableau structuré
    2 tutoriels
    les tableaux structurés
    VBA pour les tableaux structurés

    Je dis seulement que tu peux te passer de code VBA, et il faut le faire tant que possible.
    Ton besoin nécessite seulement
    - Une bonne organisation de tes données (enregistrements en lignes plutôt qu'en colonnes)
    - 2 formulations "structurées"

    Ci-joint, un fichier.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2016] Copier/coller une ligne en fonction d'une date
    Par pierre3b dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/12/2019, 16h23
  2. [XL-2010] Copier-Coller des lignes en fonction d'une date
    Par LeDVLP dans le forum Excel
    Réponses: 3
    Dernier message: 03/11/2017, 09h13
  3. [XL-2010] Copier Coller des colonnes d'une feuille à une autre en fonction d'un critère
    Par Groggy78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/07/2014, 19h12
  4. Copier coller en fonction des dates
    Par hortencia dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 02/12/2011, 10h51
  5. [XL-2003] Copier coller en fonction de non vide d'une colonne adjacente
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2011, 20h43

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