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 :

Copie automatique données vers autre feuille [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut Copie automatique données vers autre feuille
    Bonjour à tous,

    J'aimerais réaliser une commande automatique mais je n'ai pas la moindre idée du code qui pourrait lui donner vie.

    Voici mon "problème" :

    J'ai 2 feuilles Excel avec sur la première, des candidats en cours de promotion, et sur la deuxième, j'aimerais que soient transférés les candidats promus.

    Le critère de promotion est la date d'échéance de la période de stage.
    Si celle-ci est de deux ans et que le candidat a commencé son stage en 2010, il sera promu en 2012. Ainsi, au 1er janvier 2012, toute la ligne le concernant (Nom, matricule, date arrivée, date d'échéance, etc...) devrait être transférée dans la deuxième feuille. Cependant, j'aimerais que ces données restent dans la première feuille, mais par exemple en italique ou en barré.

    La condition de transfert est donc le terme de sa période de stage (qui est l'une des colonnes de la feuille 1).


    J'espère avoir été assez clair, n'hésitez pas à me demander des précisions.

    Merci à ceux qui se pencheront sur mon problème


    OliFossa

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ci dessous un exemple (Date en colonne B)
    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
    Dim i As Long
    Dim shSource As Worksheet
    Dim shCible As Worksheet
     
    Set shSource = Sheets("sheet2")
    Set shCible = Sheets("sheet3")
     
    'Boucle sur chaque ligne de la feuille source
    For i = 2 To shSource.Range("A" & Rows.Count).End(xlUp).Row
        'Vérifie si la date de début stage + 2 ans inférieur à aujourdhui et pas déja traité (pas en gras)
        If DateAdd("yyyy", 2, CDate(shSource.Range("B" & i).Value)) < Date And shSource.Range("B" & i).Characters.Font.Bold = False Then
            shSource.Rows(i).Copy shCible.Range("A" & shCible.Range("A" & Rows.Count).End(xlUp).Row + 1)
            shSource.Rows(i).Characters.Font.Italic = True
            shSource.Rows(i).Characters.Font.Bold = True
        End If
    Next i

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre réponse.

    J'ai bien mis le code dans mon module, en adaptant la colonne concernée, mais le deboggeur me surligne en jaune la ligne suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 to shSource.Range ("I") & Rows.Count).End (x1up).Row

    (ma colonne date est en J)

    Est-ce du au fait que j'aie une autre macro avant ? Ma première macro est en fait un formulaire qui demande les noms prénoms, etc... de chaque candidat.



    Merci pour votre aide.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Tu as fermé la parenthèse au mauvais endroit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 to shSource.Range ("I") & Rows.Count).End (x1up).Row

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    Voilà, je viens de réessyer, mais le soucis persiste

    Le message d'erreur est le suivant : "Erreur d'exécution 1004 - Erreur définie pas l'application ou par l'objet "


    Dois-je peut-être écrire ce code dans un autre module ?

    Merci

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Peux tu mettre le code que tu as mis (procédure complète)

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    La procédure est assez longue, ne serait-il pas plus facile de poster le document ici ?

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Si sa taille le permet, oui

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    Voici donc ma base de donnée en pièce jointe.

    Merci
    Fichiers attachés Fichiers attachés

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    dans ma proposition de code, la colonne J doit être au format date JJ/MM/AAAA.
    il te faut adapter pour que le test se fasse uniquement sur l'année

  11. #11
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    Je comprends ce que vous me conseillez, mais je n'ai malheureusement pas les notions en suffisance pour savoir quoi changer dans le code et comment l'écrire.

    Dans le ligne " If..." doijt remplacer ce qui est entre parenthèse par les emplacements des cellules date ? ?

  12. #12
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Ci dessous le code adapté à l'année colonne J
    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
    Dim i As Long
    Dim shSource As Worksheet
    Dim shCible As Worksheet
     
    Set shSource = Sheets("TG")
    Set shCible = Sheets("HP")
     
    'Boucle sur chaque ligne de la feuille source
    For i = 3 To shSource.Range("J" & Rows.Count).End(xlUp).Row
        'Vérifie si la date de début stage + 2 ans inférieur à aujourdhui et pas déja traité (pas en gras)
        If shSource.Range("J" & i).Value + 2 < Year(Date) And shSource.Range("B" & i).Characters.Font.Bold = False Then
            shSource.Rows(i).Copy shCible.Range("A" & shCible.Range("A" & Rows.Count).End(xlUp).Row + 1)
            shSource.Rows(i).Characters.Font.Italic = True
            shSource.Rows(i).Characters.Font.Bold = True
        End If
    Next i

  13. #13
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette adaptation.

    Tout semble pouvoir marcher mais quand je lance la macro, toujours ce message d'erreur " Erreur d'execution 1004 - Erreur définie par l'application ou par l'objet ".

    Elle me surligne en jaune la ligne "For i = 3... .Row"

    Décidément, cette macro génère bien des problèmes...

  14. #14
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Ci joint ton fichier avec le code
    DB Macros.xls

  15. #15
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    La commande a en effet l'air de marcher.

    Cependant, je ne sais pour quelle raison, elle ne fonctionne pas chez moi.

    Par ailleurs, je pense m'être mal exprimé dans la mesure où l'année de promotion ne peut être inférieure à 2012, comme indiqué dans les possibilités du formulaire.Je m'excuse si je n'ai pas été assez clair.

    Les personnes entrent en fait soit en 2010, soit en 2011. Après quoi elles peuvent être promues suivant une période de 2, 3 ou 4 ans. Et c'est cette somme (s'il entre en 2010 et promu en 2 ans : 2012), qui déterminera son transfert l'année concernée dans l'autre feuille. Par exemple, les candidats de 2010 "promotables" en 2 ans changeront de feuille en 2012, ceux en 3 ans en 2013, etc...

    Je vous remercie pour le temps que vous passez à adapter mes demandes.

    Olivier

  16. #16
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Essais d'analyser le code pour pouvoir être autonome dessus.
    Il me semble que se serait plus enrichissant pour toi d'essayer de faire cette modification en posant des questions sur la façon d'y parvenir plutôt que d'attendre le résultat tout cuit.

    Une piste, la ligne qui traite l'ajout du nombre d'année est ici et ajoute 2 ans à la période colonne J
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If shSource.Range("J" & i).Value + 2 < Year(Date) And shSource.Range("B" & i).Characters.Font.Bold = False Then
    En regardant bien tu devrais trouver pour remplacer le 2 par la valeur de la colonne I (je crois que c'est cette colonne)

    Si besoin pose une question

  17. #17
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    J'admets qu'il me sera plus enrichissant de regarder tout cela de plus près

    Je vous tiendrai au courant si j'ai une question.

    Merci pour votre disponibilité

  18. #18
    Futur Membre du Club
    Inscrit en
    Février 2012
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2012
    Messages : 19
    Points : 6
    Points
    6
    Par défaut
    J'ai finalement trouvé une solution alternative, avec un code un peu différent.

    Le principal c'est que maintenant la commande fonctionne ! :-)

    Merci encore pour votre aide !

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 24/02/2015, 09h54
  2. Réponses: 1
    Dernier message: 28/01/2015, 14h39
  3. [XL-2003] Copié des données dans une feuille vers une autre
    Par guillaumepops dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/03/2012, 15h43
  4. ouverture et copie de données vers un autre classeur variable
    Par mustapha.ezzaouia dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/12/2009, 14h24
  5. Réponses: 4
    Dernier message: 07/02/2009, 17h19

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