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 :

[VBA-E] Macro pour copier cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut [VBA-E] Macro pour copier cellules
    Bonjour,

    je dois réaliser un travail urgent (ceux que j'adore, du matin pour le soir) sur Excel.

    J'ai fait quelques recherches, parcouru la FAQ VBA: je n'ai que des bases en VBA donc SVP, soyez indulgents.

    Dans mon classeur Excel, j'ai un tableau sur un onglet.
    J'ai crée un bouton sur lequel je dois clicker pour copier une plage de cellules.

    "La plage de cellules correspond aux 5 jours de la semaines avec, pour chaque jour, 17 créneaux horaires"

    Quand je click sur le bouton, je souhaiterai recopier mes 85 (5x17) lignes x 3 colonnes (1 colonne "jour", 1 colonne "créneau", et 1 colonne "infos")

    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
     
    Sub Rectangle30_QuandClic()
     
    Dim finplage As Long
    Dim debutplage As Long
    Dim lignevide As Long
     
    finplage = Range("F2:H2").End(xlDown).Row
    debutplage = Range("F2:H2").End(xlDown).Row - 84
    lignevide = Range("F2:H2").End(xlDown).Row + 1
     
    Range("F2:H2" & debutplage, "F2:H2" & finplage).Select
    'Range("F" & finplage").Activate
    'Range("F2:H2" & lignevide).Select
    Range("F2:H2" & lignevide).Copy
    ActiveSheet.Paste
     
    End Sub
    Merci de m'aider , sans me donner la réponse et sans taper SVP

    Je le répète, je débute franchement en VBA

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Est-ce que la plage à copier se trouve toujours au même endroit?
    Si oui, définit une plage nommée (tape un nom dans la zone nom, voir image jointe) dans ton code tu peux appeler cette plage facilement

    Tu n'as même pas besoin de spécifier la feuille!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par zazaraignée
    Salut

    Est-ce que la plage à copier se trouve toujours au même endroit?
    Si oui, définit une plage nommée (tape un nom dans la zone nom, voir image jointe) dans ton code tu peux appeler cette plage facilement

    Tu n'as même pas besoin de spécifier la feuille!

    Non, la plage se décalera toujours vers le bas. Je souhaite créer un tableau qui listera, pour plusieurs semaines, un emploi du temps "sommaire" en fonction du jour et du créneau horaire => les cellules se décaleront donc de 85 lignes vers le bas : 5 jours x 17 créneaux.

    Tout ceci pour que la personne puisse de nouveau faire son planning pour la semaine suivante.

    Mon souci doit être de sélectionner la plage car j'arrive déja à fixer les extrémités par ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    finplage = Range("F2:H2").End(xlDown).Row
    debutplage = Range("F2:H2").End(xlDown).Row - 84
    lignevide = Range("F2:H2").End(xlDown).Row + 1
    J'ai un pb de syntaxe et je pige pas avec l'aide Excel VBA

    Merci pour ton aide en tout cas

  4. #4
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    J'ai pensé que cette plage était fixe parce que dans ton code le Range de dart est fixe... Si la plage en question est fonction de la date courante, faudra faire une recherche sur cette date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aujourdhui = Now()
    ' ...
    Enregistre une macro avec la fonction RechercheV et modifie le code...

  5. #5
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Aux lumières de ton message (privé - pas utile à mon avis... je t'expliquerai), je réitère ma question: La plage d'origine de cette copie est-elle toujours au même endroit?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Je t'ai MP car tu es le seul à me répondre et je voulais pas que le topic soit "up"

    Ma plage d'origine restera au même endroit... je ne sais cependant où tu veux en venir (c'est la que je me dis que je n'ai pas le VBA Spirit)

  7. #7
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Je veux en venir à ceci: il n'est pas nécessaire de faire toute la gymnastique des xlDown si la source de ta copie est toujours au même endroit. À ta décharge, je pense avoir oublié de joindre l'image de la zone Nom... honte sur moi!

    À ma décharge, je suis en multi-tâche ce matin: ma fille, la vaisselle, le repas et le forum...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par zazaraignée
    Je veux en venir à ceci: il n'est pas nécessaire de faire toute la gymnastique des xlDown si la source de ta copie est toujours au même endroit.
    xldown: je souhaite sélectionner la derniere cellule vide... pour y copier la plage

    Pour ton image, tu veux dire qu'il faut absolument que je donne un nom à cette plage afin de l'appeler en VBA ? Je teste

    Citation Envoyé par zazaraignée
    À ma décharge, je suis en multi-tâche ce matin: ma fille, la vaisselle, le repas et le forum...
    Et moi je suis en monotâche , sans être aussi productif que toi

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Pour ton image, tu veux dire qu'il faut absolument que je donne un nom à cette plage afin de l'appeler en VBA ? Je teste
    Non, c'est juste que ça simplifie les choses... et comme je te le disait plus haut, plus besoin de spécifier la feuille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Range("H2:G7").copy
    devient
    si maPlage correspond à H2:G7.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Ok merci de ton aide Zazaraignée.


    Ci joint 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
    14
    15
    16
    17
    18
     
    Dim plage As Long
    Dim lignevide As Long
     
    'je recherche la 1ere cellule vide de la colonne G
    lignevide = Range("G:G").End(xlDown).Row + 1
     
    'je sélectionne la plage de cellules ayant pour nom "plage" dans la feuille "Prévisionnel"
    Sheets("Prévisionnel").Range("plage").Select
     
    ' je copie
    Range("plage").Copy
     
    ' je me place à la 1ere cellule vide de la colonne G
    Sheets("Prévisionnel").Range("G" & lignevide).Select
     
    ' je colle la sélection "plage"
    ActiveSheet.Paste
    Je compte améliorer la chose pour rendre l'application plus conviviale... je reviendrai surement à la charge

    Encore merci

  11. #11
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim plage As Long  ' à quoi sert cette variable?
    Dim lignevide As Long
     
    'je recherche la 1ere cellule vide de la colonne G
    lignevide = Sheets("Prévisionnel").Range("G:G").End(xlDown).Row + 1
     
    Range("plage").Copy
     
    ' je me place à la 1ere cellule vide de la colonne G
    Sheets("Prévisionnel").Range("G" & lignevide).Paste
    Devrais fonctionner sans mettre tes cellules en surbrillance (inutilement).

    P.S. C'est pas utile de m'écrire en privé pour ce sujet.

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

Discussions similaires

  1. [Toutes versions] Macro pour copier le contenu d'une cellule d'un fichier excel et coller dans une form
    Par wizishop dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 16/10/2015, 12h05
  2. Réponses: 7
    Dernier message: 22/03/2011, 18h00
  3. [XL-2003] Macro pour copier une cellule d'un classeur à un autre sous condition
    Par mairiemeudon dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 14/06/2010, 15h28
  4. [VBA-E]Macro pour positionnement cellule
    Par Micky58 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/04/2007, 11h54
  5. [VBA-E] Macro pour convertir un fichier texte en excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2006, 14h47

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