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 des valeurs de cellule d'une feuille à une autre avec plusieurs critères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    service courrier
    Inscrit en
    Décembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : service courrier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2020
    Messages : 3
    Par défaut copier des valeurs de cellule d'une feuille à une autre avec plusieurs critères
    Bonsoir,

    J'aimerai savoir s'il est possible de copier automatiquement des valeurs de cellules présentes dans une feuille de calcul, dans une autre feuille de calcul en fonction de plusieurs critères.
    Je m'explique, dans une feuille nommée au nom du mois j'ai des données en ligne (le nom de la personne et la date du jour) et des données en colonne (la catégorie et le nombre), et je souhaite recopier automatiquement ces données dans la feuille nommée synthèse dans laquelle les données sont toutes en colonnes (date, nom de la personne, catégorie et nombre).
    J'ai mis dans la pièce jointe le résultat que je souhaite retrouver en rouge.
    Merci de m'aiguiller sur une méthode simple, car ce fichier doit comporter tous les jours de chaque mois de l'année, pour chaque personne et pour chaque catégorie.

    Merci par avance pour votre aide si une solution existe.

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fabienc75 Voir le message

    Bonjour,

    En ajoutant une ligne concaténant vos champs Agent-Date où chaque cellule aurait la formule :
    Pièce jointe 587547

    Puis en nommant vos zones :
    - Votre tableau d'activités de décembre : Activites12 depuis B3.
    - Votre colonne B : ListeActivites12 depuis B3
    - Votre ligne de titre : ListeCouples12 depuis B3



    Et dans votre onglet Synthèse :
    - En ajoutant une colonne Agent date concaténant les champs des colonnes A et B et en y mettant cette formule en C4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =$B4&" "&TEXTE($A4;"JJ-MM-AAAA")
    Et cette formule en F4 :
    Pièce jointe 587549

  3. #3
    Candidat au Club
    Homme Profil pro
    service courrier
    Inscrit en
    Décembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : service courrier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2020
    Messages : 3
    Par défaut copier des valeurs de cellule d'une feuille à une autre avec plusieurs critères.
    Bonsoir Eric,

    Merci pour votre réponse.
    Je m'interroge sur un point c'est de savoir comment je peux être sur que le résultat correspond à ma catégorie étant donné qu'il me semble que nul part dans votre solution il n'est fait mention de la catégorie.
    Dans la solution je vois des concaténations des champs agent et date, sachant que pour un couple agent - date il y a une trentaine de catégorie par jour.

    Je voyais plus une solution de type VBA avec des conditions, comme : si l'agent et la date et la catégorie de la feuille du mois est égal à l'agent et la date et la catégorie de la feuille synthèse alors la valeur de la cellule X de la feuille synthèse est égale à la valeur de la cellule X de la feuille du mois sinon la boucle tourne jusqu'à trouver une la bonne similitude.
    Mais je ne sais pas si cette solution est possible et surtout si elle possible je ne vois pas comment la mettre en place.

    Merci pour votre aide.

    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fabienc75 Voir le message
    Si chaque couple "agent date" est unique dans la ligne de titre, le calcul est correct.
    Quant à la catégorie (correspond à ListeActivites), elle est présente dans la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =INDEX(Activites12;EQUIV($D4;ListeActivites12;0);EQUIV($C4;ListeCouples12;0))

  5. #5
    Candidat au Club
    Homme Profil pro
    service courrier
    Inscrit en
    Décembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : service courrier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2020
    Messages : 3
    Par défaut copier des valeurs de cellule d'une feuille à une autre avec plusieurs critères.
    Eric,

    Merci pour ces explications.
    Je vais faire le test sur le vrai fichier afin de mettre en application vos formules.

    Un grand merci pour votre aide

    Cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fabienc75 Voir le message
    Mon fichier.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fabienc75 Voir le message
    Le calcul par formule fonctionne bien si vous avez prévu tous les cas associant catégories, noms et dates. On peut s'affranchir d'établir cette liste toujours en s'appuyant toujours sur le principe des formules, en faisant varier les paramètres entrant dans la formule et en ajoutant un enregistrement dans une table chaque fois que le résultat du calcul serait supérieur à 0.

    Pour cela, il vous faut créer une zone nommée AireCouple contenant la liste des couples Agents Dates dans votre onglet "decembre" et une zone AireActivites correspondant aux enregistrements de votre colonne B actuelle.

    Pièce jointe 587617

    Le code associé :
    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
    Sub EtablirUneSynthese()
     
    Dim TabSynthese As ListObject
    Dim LigneSynthese As ListRow
    Dim AireCouples As Range, AireCategories As Range
    Dim CelDate As Range, CelNom As Range, CelCouple As Range, CelCategorie As Range, CelResultat As Range
    Dim IndexCouples As Integer, IndexCategories As Integer
    Dim HeureDebut, HeureFin, TempsTotal
     
     
        Application.ScreenUpdating = False
     
        HeureDebut = Timer
     
     
        With Sheets("decembre")
             Set AireCouples = .Range("AgentsDates")
             Set AireCategories = .Range("Catégories")
        End With
     
        With Sheets("Synthèse 2")
             Set CelDate = .Range("CelluleDate"):  Set CelNom = .Range("CelluleNomPrenom")
             Set CelCouple = .Range("CelluleAgentDate"): Set CelCategorie = .Range("CelluleCategorie")
             Set CelResultat = .Range("CelluleResultat")
             Set TabSynthese = .ListObjects("TableSynthese")
        End With
     
        With TabSynthese
             If .ListRows.Count > 1 Then
                .DataBodyRange.Delete
                ' Debug.Print .ListRows.Count
             End If
        End With
     
     
        For IndexCouples = 1 To AireCouples.Count
            CelCouple = AireCouples(IndexCouples)
            For IndexCategories = 1 To AireCategories.Count
                CelCategorie = AireCategories(IndexCategories)
                DoEvents
                If CelResultat > 0 Then
                   Set LigneSynthese = TabSynthese.ListRows.Add
                   With LigneSynthese
                        .Range(1, 1) = Format(CelDate, "dd/mm/yyyy")
                        .Range(1, 2) = CelNom
                        .Range(1, 3) = CelCouple
                        .Range(1, 4) = CelCategorie
                        .Range(1, 5) = CelResultat
                   End With
                   Set LigneSynthese = Nothing
                End If
            Next IndexCategories
        Next IndexCouples
     
        HeureFin = Timer
        TempsTotal = HeureFin - HeureDebut
     
        MsgBox "Temps total du traitement : " & Round(TempsTotal, 1) & " seconde(s)", vbInformation
     
        Application.ScreenUpdating = True
     
     
        Set TabSynthese = Nothing
        Set CelDate = Nothing:  Set CelNom = Nothing: Set CelCouple = Nothing: Set CelCategorie = Nothing: Set CelResultat = Nothing
        Set AireCouples = Nothing: Set AireCategories = Nothing
     
    End Sub
    Enfin, vous pourriez automatiser le tout en rendant paramétrique le choix du mois et en automatisant la création des différentes zones nommées qui pourraient être remplacées par des tableaux structurés dans l'onglet synthèse. Mais cela suppose déjà d'avoir "digéré" le code ci-dessus.

Discussions similaires

  1. [XL-2013] Remplacer des valeurs de cellule dans une plage
    Par Rémy.A dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 26/06/2017, 08h00
  2. [XL-2010] Récuperer valeur de cellule d'une autre feuille
    Par antonysansh dans le forum Excel
    Réponses: 2
    Dernier message: 28/05/2015, 15h07
  3. [XL-2007] Boucle pour copier des valeurs à la suite dans une même feuille
    Par LaMite dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/04/2014, 18h21
  4. [PHPExcel] Récupération des valeurs via liaison vers une autre feuille
    Par thbmath dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 05/12/2012, 21h41
  5. Code VBA: Comparer et copier des valeurs de cellules
    Par bmeda72 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/08/2008, 22h40

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