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 :

Une macro pour recopier des lignes suivant une valeur dans une cellule [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Ragnart
    Homme Profil pro
    Electricien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Par défaut Une macro pour recopier des lignes suivant une valeur dans une cellule
    Bonjour à tous
    J'ai besoin d'aide pour recopier des lignes dans d'autres onglets à l'aide d'une macro, mais je n'y arrive pas
    J'ai joins un modèle de fichier (j'ai supprimé tous les noms et toutes les macros pour plus de facilité)
    voici ce que j'aimerai faire :

    Dans l'onglet Gestion gardiens j'aimerai que lorsque j'inscris Agent1 en colonne C ou G dans lieu 1 en C3
    ça me recopie dans l'onglet Agent1 la ligne correspondante dans lieu1 les colonnes A, C, D, E, F, G, H, I, J de gestion gardiens)

    Si j'inscris Agent 1 colonne S ou colonne W dans lieu 3 case S3
    ça me recopie la ligne dans l'onglet Agent1 lieu 3

    Idem pour Agent2 et agent3 à recopier dans les onglets Agent2 et Agent3

    J'espère que j'ai réussi à m'expliquer. merci à toutes celles et tous ceux qui pourront m'apporter un élément de réponse
    planning gardiens.xlsm

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 438
    Par défaut
    Bonjour,

    Une façon de faire: insérer ce code dans la feuille 'Gestion gardiens'.
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim sAgt As String, kR As Long, kC As Long
        sAgt = Target.Value
        If Evaluate("ISREF(" & sAgt & "!A1)") = False Then
            MsgBox "Pas encore d'onglet '" & sAgt & "' créé!", , "Pour info"
            Exit Sub
        End If
        With ActiveWorkbook.Worksheets(sAgt)
            kR = Target.Row
            kC = Target.Column
            '--- recopie les données aux mêmes places
            .Cells(kR, 1) = Cells(kR, 1).Value              '--- date
            .Cells(kR, kC) = Cells(kR, kC).Value            '--- agent
            .Cells(kR, kC + 1) = Cells(kR, kC + 1).Value    '--- heure début
            .Cells(kR, kC + 2) = Cells(kR, kC + 2).Value    '--- heure fin
            .Cells(kR, kC + 3) = Cells(kR, kC + 3).Value    '--- total
        End With
    End Sub
    Cela ne vérifie pas que rien n'est écrasé dans l'onglet de l'agent, et n'efface rien si un changement d'agent est effectué.

    Bonne continuation.

  3. #3
    Membre confirmé Avatar de Ragnart
    Homme Profil pro
    Electricien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Par défaut Une macro pour recopier des lignes suivant une valeur dans une cellule
    Bonjour Ericdgn,

    C'est exactement cela, votre code fonctionne à la perfection ! Je vous remercie vivement pour vous êtes penché sur mon problème. Vous allez me faire gagner un temps considérable.
    Cela m'évite de recopier les heures de chacun pour les transmettre ensuite en comptabilité pour le paiement des salaires.
    dire que je me suis cassé la tête durant des semaines, tous mes codes que je créés jusqu'à présent ne fonctionnaient pas ou partiellement.
    Je suis encore légèrement novice dans les macros bien que je sache faire les plus courantes. Mille merci à vous ! Trop content !
    Bien cordialement,

  4. #4
    Membre confirmé Avatar de Ragnart
    Homme Profil pro
    Electricien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Par défaut Code : erreur d'exécution "13" incompatibilité de type
    Bonjour à tous,

    EricDgn m'a beaucoup aidé avec son code pour recopier des lignes suivant une valeur et je le remercie encore !

    Seulement, quand je veux effacer une ou des cellules, j'ai chaque fois un code d'erreur qui s'affiche : erreur d'exécution "13" incompatibilité de type

    J'ai tenté des solutions sans succès, quelqu'un aurait une idée pour que ce code d'erreur ne s'affiche plus ?
    Merci d'avance

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 438
    Par défaut
    Bonjour,

    Oui, j'avais signalé cela:
    Cela ne vérifie pas que rien n'est écrasé dans l'onglet de l'agent, et n'efface rien si un changement d'agent est effectué.
    Pour remédier à cela, et prendre en compte les changements et suppression, ceci devrait convenir (à placer dans la feuille 'Gestion gardiens')
    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
    Option Explicit
    Dim sAgtOld As String
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim sAgt As String, kR As Long, kC As Long
        sAgt = Target.Value
        kR = Target.Row
        kC = Target.Column
        If sAgtOld = "" Then
            '--- cellule était vide, rien à faire
        Else
            Effacer sAgtOld, kR, kC     '--- efface ancienne affectation
        End If
        If sAgt <> "" Then
            If Evaluate("ISREF(" & sAgt & "!A1)") = False Then
                MsgBox "Pas encore d'onglet '" & sAgt & "' créé!", , "Pour info"
                Target.Value = ""       '--- annule agent sélectionné
            Else
                Copier sAgt, kR, kC     '--- copie affectation
            End If
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        sAgtOld = Target.Value
    End Sub
     
    Private Sub Effacer(sAgt As String, kR As Long, kC As Long)
        With ActiveWorkbook.Worksheets(sAgt)
            '--- vider les données aux mêmes places, sauf la date
            .Cells(kR, kC) = ""                             '--- agent
            .Cells(kR, kC + 1) = ""                         '--- heure début
            .Cells(kR, kC + 2) = ""                         '--- heure fin
            .Cells(kR, kC + 3) = ""                         '--- total
        End With
    End Sub
     
    Private Sub Copier(sAgt As String, kR As Long, kC As Long)
        With ActiveWorkbook.Worksheets(sAgt)
            '--- recopie les données aux mêmes places
            .Cells(kR, 1) = Cells(kR, 1).Value              '--- date
            .Cells(kR, kC) = Cells(kR, kC).Value            '--- agent
            .Cells(kR, kC + 1) = Cells(kR, kC + 1).Value    '--- heure début
            .Cells(kR, kC + 2) = Cells(kR, kC + 2).Value    '--- heure fin
            .Cells(kR, kC + 3) = Cells(kR, kC + 3).Value    '--- total
        End With
    End Sub
    A noter, dans ce dispositif il faut toujours inscrire les horaires avant d'inscrire un gardien. Les modifications d'horaire ne sont pas "recopiées" d'elles-même.

    Maintenant, par principe ce n'est pas une bonne solution de faire des "copiages" de données. Il vaudrait beaucoup mieux disposer les données de façon à pouvoir créer un tableau croisé dynamique.

    Bonne continuation.

  6. #6
    Membre confirmé Avatar de Ragnart
    Homme Profil pro
    Electricien
    Inscrit en
    Novembre 2013
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 99
    Par défaut
    ça fonctionne à merveille, je vous remercie énormément. j'ai un peu aménagé le code à mes tableaux de recopie, sans vous je n'y serait jamais parvenu.
    pour les tableaux croisé dynamique je me suis inscrit à mon travail, il y a des cours Excel sur les tableaux croisé dynamique, je suis complètement ignorant dans ce domaine.
    votre m'est précieuse et me font gagner énormément de temps.
    Bien cordialement et merci encore

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 438
    Par défaut
    Ci joint un petit exemple pour montrer ce qu'il est possible de faire avec un tcd.
    Bonne continuation.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2013] Macro pour Supprimer des lignes contenant un mot dans plusieurs onglets
    Par Nicoriez dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 31/05/2017, 08h12
  2. [XL-2013] Macro pour supprimer des lignes suivant des critères données
    Par Malick dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2014, 14h35
  3. Réponses: 1
    Dernier message: 03/09/2013, 18h30
  4. Macro pour grouper des lignes sur une plage qui peut varier
    Par RichRich59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2011, 13h04
  5. Macro pour grouper des lignes sur une plage qui peut varier
    Par girardinho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2010, 09h43

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