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 une ligne à la suite sans écraser la suivante


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut Copier/Coller une ligne à la suite sans écraser la suivante
    Bonjour à tous,

    Je suis actuellement entrain de travailler sur un fichier pointage.

    Le principe est donc de pointer les heures de l'ouvrier. Pour se faire

    1/ J'ajoute l'ouvrier et je lui créer sa feuille excel, ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '**************************************
    'Ajouter une feuille excel grace
    'au formulaire
    '***************************************
     
    Private Sub BtnValider_Click()
     
    Sheets("Trame").Copy Before:=Sheets("BMO")              'Ajouter feuille
    ActiveSheet.Name = nom & Textnom & "" & Textprénom      'Renommer la feuille
    Range("C2") = ActiveSheet.Name                          'Renommer la cellule avec le nom de la feuille
    Range("C3") = ComboPostes.Text                          'Renommer la cellule avec le poste Occupé

    2/ Je voudrais donc que lorsque je rajoute la feuille de ce dernier une ligne concernant l'ouvrier apparaisse dans la feuille Bilan. Pour se faire je voudrai simplement copier/coller la "ligne trame" (qui existe déjà dans la feuille) de la feuille "BMO" sans écraser la suite. Je reste bloquer avec ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    '**************************************
    'Après avoir ajouter la feuille une ligne se créé
    's'ajoute à la suite dans la feuille BMO 
    '*************************************** 
    Worksheets("BMO").Activate                              'Aller à la feuille BMO
    Range("A2:AM3").Select                                  'Selectioner la "ligne trame"
    Selection.Copy                                          'Copier la "ligne trame"
    Worksheets("BMO").Activate                              'Activation de la feuille BMO
    Range("A4:AM").End(xlUp).Select                         'Coller la ligne à la suite de "ligne trame" sans l'écraser ??
    ActiveSheet.Paste                                               'Ajouter ligne dans BMO

    Ci-joint une photo pour illustrer le problème.

    Merci d'avance,
    Images attachées Images attachées  

  2. #2
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonjour,

    A priori d'après ce que je peux voir, il n'y a pas d’intérêt à avoir des cellules fusionnées sur vos lignes 2 à 7. Ainsi si tel est le cas je vous propose de supprimer cette fusion (avoir des cellules fusionnées peut apporter pas mal de soucis de manière générale il vaut mieux éviter un maximum).
    je vous propose ce code en remplaçant "toto" par votre variable de nom (nom & Textnom & "" & Textprénom ?) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub insertRow()
     
    Set wsBmo = Worksheets("BMO")
     
    derLig = wsBmo.Range("A2").End(xlDown).Row
    wsBmo.Rows(derLig).Insert
    wsBmo.Range("A2:AM2").Copy
    wsBmo.Range("A" & derLig).PasteSpecial xlPasteAll
    wsBmo.Range("A" & derLig).Value = "toto"
     
    End Sub
    Et sinon pour votre ligne de total qui sera en B3, je vous propose cette formule (sinon la somme ne vas jamais prendre la dernière ligne en référence) :
    =SOMME(INDIRECT("B2:B"&LIGNE()-1)).

    Merci.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Bonjour Vincent_merle merci pour votre réponse,

    Votre manipulation n'atteint pas ma page BMO car en cliquant sur un bouton nommé "VALIDER" il y a deux manipulation qui s'enclenche:

    1/ Ajout d'une nouvelle feuille (sans problème)
    2/ Ajout d'une nouvelle ligne dans la feuille BMO (LE PROBLEME)

    Je vous invite à visualiser le fichier pdf qui vous montre la manipulation et qui me permettra peut être d'être plus clair dans ma requête.

    Encore Merci.
    Images attachées Images attachées

  4. #4
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Hello, c'est normal car tu as inclus totalement ma procédure dans la tienne, du coup le "end sub" se répète.
    Je te propose ce 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
    Private Sub BtnValider_Click()
     
    Set wsBmo = Worksheets("BMO")
    Set wsTrame = Worksheets("trame")
     
    wsTrame.Copy before:=wsBmo
    ActiveSheet.Name = nom & Textnom & "" & Textprénom
    Set wsPoint = ActiveSheet
    wsPoint.Range("C2") = wsPoint.Name
    wsPoint.Range("C3") = ComboPostes.Text
     
    derLig = wsBmo.Range("A2").End(xlDown).Row
    wsBmo.Rows(derLig).Insert
    wsBmo.Range("A2:AM2").Copy
    wsBmo.Range("A" & derLig).PasteSpecial xlPasteAll
    wsBmo.Range("A" & derLig).Value = nom & Textnom & "" & Textprénom
     
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Merci beaucoup Vincent_merle ca fonctionne

    Par contre une dernière manip que j'aimerai ajouter.

    Le copier coller que nous faisons permet juste de récupérer les informations de la ligne A2 jusqu'à AM2 de la feuille "wsBmo"

    Est-ce possible de copier les informations de la ligne E47 jusqu'à AN47 de la nouvelle feuille créer et de la coller dans le "wsBmo".

    Ainsi cela permettrait de recenser les heures pointées dans la nouvelle feuille (de Jean par exemple) de la ligne E47 - AN47 et de coller ces heures dans la nouvelle ligne que nous venons de créée (pour Jean) dans la feuille Bmo.

    Si ce n'est pas clair je pourrais vous refaire un pdf.

    Merci.

  6. #6
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonjour, super si ça fonctionne.

    - je pensais que la plage A2:AM2 de bmo contenait une formule qui justement avait le rôle de recenser les informations qui se trouvent dans les feuilles qui sont crées (jean par exemple). est-ce le cas ? car si oui il n'y a pas besoin de recopier la plage E47:AN47 ?
    - sinon, oui c'est tout à fait possible de copier les données de ta plage avec le code que je met ci-dessous, mais ou veut tu coller ensuite ces données dans BMO ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsPoint.Range("E47:AN47").Copy
    A+

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2018
    Messages : 4
    Par défaut
    Bonjour,

    J'ai utilisé le deuxième codage que vous m'avez proposé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    derLig = wsBmo.Range("A2").End(xlDown).Row
    wsBmo.Rows(derLig).Insert                                 'La ligne que j'ai rajouté 
    wsPoint.Range("E47:AN47").Copy
    wsBmo.Range("D" & derLig).PasteSpecial xlPasteAll
    wsBmo.Range("A" & derLig).Value = nom & Textnom & "" & Textprénom
     
    End Sub

    Ainsi:
    1/ une nouvelle feuille s'insert
    2/ une nouvelle ligne s'insert
    3/ le copier coller sur la ligne se fait mais avec un message d'erreur : #REF!

    Pour moi le problème c'est qu'en mettant wsPoint la cellule n'arrive plus à retrouver la nouvelle feuille car avec le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub BtnValider_Click()
     
    Set wsBmo = Worksheets("BMO")
    Set wsTrame = Worksheets("trame")
     
    wsTrame.Copy before:=wsBmo
    ActiveSheet.Name = nom & Textnom & "" & Textprénom          'Renommer la nouvelle feuille par le nom de l'ouvrier 
    Set wsPoint = ActiveSheet
    wsPoint.Range("C2") = wsPoint.Name
    wsPoint.Range("C3") = ComboPostes.Text

    Nous avons renommer la feuille par ActiveSheet.Name = nom & Textnom & "" & Textprénom.

    Ci-joint la capture d'écran du message d'erreur REF!
    Images attachées Images attachées  

  8. #8
    Membre éprouvé Avatar de Wololol
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 104
    Par défaut
    Bonjour,

    le copier coller sur la ligne se fait mais avec un message d'erreur : #REF!
    Sur ta capture d'écran, on voit que ta cellule contient =SOMME(#REF!), ce qui signifie que tu as copié directement la formule d'une autre feuille. Cependant, elle ne fonctionne pas car les cellules utilisées appartiennent à l'autre feuille ou est introuvable/invalide (explication bancale, désolé).

    Si tu souhaite récupérer la valeur sur ton autre feuille, remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsBmo.Range("D" & derLig).PasteSpecial xlPasteAll
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsBmo.Range("D" & derLig).PasteSpecial Paste := xlValues
    Tu récupérera ainsi le résultat de la formule (mais ça ne copiera pas la formule).

    Pour moi le problème c'est qu'en mettant wsPoint la cellule n'arrive plus à retrouver la nouvelle feuille car avec le code.
    Je n'ai pas compris, mais tu peux enregistrer le nom de ta feuille dans une variable.

    En espérant avoir aidé.

    Bonne journée

  9. #9
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonjour,

    je pense que ce que tu devrais faire, ce n'est pas copier-coller la ligne "E47:AN47" de la feuille que tu as crée mais plutôt de mettre en place une formule dans ta ligne 2 de trame de "BMO" qui fasse référence à chacune des feuilles qui sont crées.
    En effet, j'imagine que les changements que tu effectues dans chaque feuille de pointage doit produire le reporting que tu attends dans BMO.

    Pour cela tu peux utiliser la fonction "INDIRECT" qui puisse s'adapter au nom de chaque feuille. Essayes cette formule dans la cellule "E2" de l'onglet BMO et de la coller sur chaque colonne de ta ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(INDIRECT($A2&"!"&CAR(65+COLONNE()-1)&47);0)
    A+

  10. #10
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 108
    Par défaut
    Salut

    Pour te facilité la vie, tu peux aussi mettre un tableau en A1:AM..., ils sont accessible dans Insertion, tableau.
    Tu peux supprimer les filtres auto s'ils te génent
    Tu peux mettre des formule dans les cellules qui seront automatiquement étendu lors de l'ajout d'une ligne
    Via le code VBA les ajouts de lignes se font facilement
    Tu peux activer les totaux automatiques en bas de tableau avec si besoin personnalisation des valeur
    Tu peux utiliser la structure du tableau dans ton code VBA via les ListObjects et ainsi, bien souvent, simplifier le code
    ...
    Enfin bref, les tableaux c'est cool

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/04/2017, 16h00
  2. [XL-2007] Excel 2007 Copier Coller une ligne vers une autre feuille
    Par fcjunic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/02/2013, 21h54
  3. Réponses: 4
    Dernier message: 17/12/2012, 13h29
  4. [XL-2007] Copier coller une ligne excel sur autre feuille avec conditions
    Par amstelveen dans le forum Excel
    Réponses: 5
    Dernier message: 11/05/2009, 18h54
  5. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34

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