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 :

Insertion ligne avec copie certaines cellules ligne précédente


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Insertion ligne avec copie certaines cellules ligne précédente
    Bonjour,

    Ayant encore et toujours du mal avec VBA je me tourne une nouvelle fois vers ce cher forum qui m'est toujours venu en aide

    J'ai créé un bouton qui m'insère une nouvelle ligne tout en copiant la ligne précédente. Mon problème est que je n'ai pas besoin de toute la ligne mais seulement de la cellule de la première colonne de cette ligne et de la 8ème.

    L'intérêt est de gérer un planning en ajoutant des lignes qui conservent les formules de la ligne précédente mais ces formules se trouvent uniquement en colonne A et H. Je n'ai donc pas besoin de ce qui se trouve entre et après.
    Je vous met le code que j'ai fait pour le moment.

    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
    Option Explicit
     
    Sub InsererLigneSem1()
    Dim L As Long
     
     
            L = ActiveCell.Row
     
                With Sheets("Semaine 1")
                    .Rows(L - 1).Copy
                    .Rows(L).Insert Shift:=xlDown       'Insertion
                    .Rows(L).EntireRow.Hidden = False  'Rendre visible la ligne insérée
                End With
     
     
        Application.CutCopyMode = False
    End Sub

    Merci d'avance pour votre aide

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    essayes comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub InsererLigneSem1()
    Dim L As Long, Dc As Integer
    L = ActiveCell.Row
    With Sheets("Semaine 1")
      Dc = Cells(L, .Columns.Count).End(xlToLeft).Column
      .Rows(L - 1).Copy
      .Rows(L).Insert Shift:=xlDown    'Insertion
      .Range("B" & L, "G" & L).ClearContents: .Range(.Cells(L, 9), .Cells(L, Dc)).ClearContents
    End With
    Application.CutCopyMode = False
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Merci pour ta réponse. Malheureusement, ce code ne réponds pas à mes besoins.
    Je te met un exemple du fichier.
    Tu remarqueras que la ligne 5 qui sert de référence pour la copie de la première journée est masquée. En dessous de chaque ligne contenant la date de la journée de la semaine il y a une ligne masquée qui sert de référence pour la copie de formule.

    Si ce que je te dis n'est pas clair n'hésite pas à me demander
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Essayes comme ça, sans garantie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub InsererLigneSem1()
     
    Dim L As Long, Dc As Integer
    L = ActiveCell.Row
     
    With ActiveSheet
      Dc = Cells(L, .Columns.Count).End(xlToLeft).Column
      .Rows(L - 1).Copy
      .Rows(L).Insert Shift:=xlDown    'Insertion
      .Rows(L).EntireRow.Hidden = False  'Rendre visible la ligne insérée
      .Range("B" & L, "G" & L).ClearContents
    End With
    Application.CutCopyMode = False
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Bonjour,
    Je reviens vers vous pour une question.
    Le code fonctionne bien mais il est un peu lent à s'exécuter ce qui n'est pas très pratique pour l'utilisateur. Je pense que l'étape consistant à effacer les cellules comprises entre les colonnes B et G ralentit l'exécution de la macro.
    Est il possible de copier uniquement la cellule de la colonne A et H de la ligne précédente?

    Merci d'avance

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    Le code fonctionne bien mais il est un peu lent à s'exécuter ce qui n'est pas très pratique pour l'utilisateur. Je pense que l'étape consistant à effacer les cellules comprises entre les colonnes B et G ralentit l'exécution de la macro.
    Je ne vois pas pourquoi
    Est il possible de copier uniquement la cellule de la colonne A et H de la ligne précédente?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub InsererLigneSem1()
     
    Dim L As Long, Dc As Integer
    L = ActiveCell.Row
     
    With ActiveSheet
      .Rows(L).Insert Shift:=xlDown
      .Range("A" & L) = .Range("A" & L - 1)
      .Range("H" & L) = .Range("H" & L - 1)
    End With
    Application.CutCopyMode = False
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    C'est exactement ce que je voulais!

    Par contre quand j'ai déjà plusieurs lignes de rentrer et que je souhaite en insérer des nouvelles il y a une petite lenteur avant l'insertion (calcul du processeur). Je ne sais pas si c'est normal?

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Si tu mets un point d'arrêt dans ton code, juste après l'insertion, quel temps jusqu'au point d'arrêt ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    J'ai inséré un point d'arrêt juste après le EndWith. Environ 3secondes avant l'exécution

  10. #10
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Fais ce que je t'ai dit, insères le juste après l'insertion, sur la ligne 8 (.Range("A" & L) = .Range("A" & L - 1)), c'est là où je voudrais savoir
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Je te le confirme, environ 3 secondes.

  12. #12
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Essayes comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub InsererLigneSem1()
     
    Dim L As Long, Dc As Integer
    Application.ScreenUpdating = False
    L = ActiveCell.Row
     
    With ActiveSheet
      .Rows(L).Insert Shift:=xlDown
      .Range("A" & L) = .Range("A" & L - 1)
      .Range("H" & L) = .Range("H" & L - 1)
    End With
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  13. #13
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Toujours 3 secondes même un peu plus

  14. #14
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Ah ! zut,

    Essayes comme ça (sans conviction) :
    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
    Sub InsererLigneSem1()
    Application.ScreenUpdating = False
    Dim L As Long, Dc As Integer
    L = ActiveCell.Row
    With ActiveSheet
      .Rows(L).Insert Shift:=xlDown
      .Rows(L).EntireRow.Hidden = False
      Application.Calculation = xlCalculationManual
      .Range("A" & L) = .Range("A" & L - 1).Formula
      .Range("H" & L) = .Range("H" & L - 1).Formula
    End With
    Application.CutCopyMode = False
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  15. #15
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Toujours le même problème. Ca fonctionne bien quand il n'y a pas de lignes d'insérer mais dès qu'il y en a plusieurs ça lag...

  16. #16
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Donc je n'ai pas de solution immédiate, je verrai, dès que je pourrai, si on peut faire autrement
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  17. #17
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Pas de soucis je te remercie
    J'ai juste une autre question, j'ai conservé ce code ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub InsererLigneSem1()
     
    Dim L As Long, Dc As Integer
    L = ActiveCell.Row
     
    With ActiveSheet
      .Rows(L).Insert Shift:=xlDown
      .Range("A" & L) = .Range("A" & L - 1)
      .Range("H" & L) = .Range("H" & L - 1)
      .Range("I" & L) = .Range("I" & L - 1)
    End With
    Application.CutCopyMode = False
     
    End Sub
    et je voulais savoir s'il était possible de conserver la mise en forme pour les lignes uniquement (qui sont en pointillés) de la ligne précédente?

  18. #18
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    je voulais savoir s'il était possible de conserver la mise en forme pour les lignes uniquement
    Je ne comprends pas, car, apparemment, la mise en forme est conservée, après tout dépend de tes MFC
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  19. #19
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    La mise en forme était conservée avec le premier code mais plus avec le second. C'est uniquement pour la copie des bordures en cas d'insertion de nouvelles lignes

  20. #20
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    as-tu modifié ton fichier car
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("I" & L) = .Range("I" & L - 1)
    dans l'exemple que tu m'as envoyé, la colonne I ne contient rien, et comme je le disais, ça peut influer sur tes MFC.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. [XL-2010] macro copie et colle des lignes avec condition de cellule
    Par olive72 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2015, 16h34
  2. [XL-2007] Insertion d'une ligne avec copie de certains éléments
    Par Zentin dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/07/2014, 17h48
  3. Réponses: 2
    Dernier message: 29/08/2012, 15h44
  4. [XL-2003] VBA - Problème d'insertion de ligne avec copie de formules
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/06/2010, 15h22
  5. [VBA-E]Insertion ligne + recopie formules certaines cellules
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/05/2007, 15h25

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