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 une ligne à l'identique !


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Points : 23
    Points
    23
    Par défaut Copier une ligne à l'identique !
    Bonjour.

    Je sais que cela paraît nul mais je n'arrive pas à copier une ligne à l'identique de celle juste au-dessus.
    J'en m'explique.
    Ma base de données remplit une vingtaine de cellules par ligne.
    Selon conditions, je dois répéter ladite ligne, C'est à dire sélectionner la ligne, me décaler d'une ligne vers le bas. Recopier la ligne et faire le focus sur la première cellule de cette ligne.
    Ainsi je repars via des "ActiveCell.Offset (1, 0), etc" pour modifier certaines valeurs.
    Mais malgré l'enregistreur de Macro pour tenter quelque chose, je reste démuni. 😳

    Merci à vous.

    Cordialement.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Salut,
    étonnant que l'enregistreur ne t'ai pas aide suffisamment pour trouver ton bonheur.

    Peux-tu nous donner le code qu'il t'a généré stp ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    plutôt que de se focaliser sur les cellules, il faut simplifier et se focaliser sur les lignes

    ainsi formulé, on obtient : "La dernière ligne active de la plage +1 = La dernière ligne active de la plage"

    On peut calculer cette dernière ligne de diverses manières, par exemple en utilisant le nombre de lignes de la plage active (UsedRange)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
        With Feuil1
            .Rows(.UsedRange.Rows.Count + 1).Value = .Rows(.UsedRange.Rows.Count).Value
        End With
    End Sub
    Ou plutôt calculer la dernière ligne en remontant du bas de la feuille jusqu'à tomber sur une ligne non vide (par exemple en analysant la colonne 1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
        With Feuil1.Cells(Feuil1.Rows.Count, 1)
            .End(xlUp)(2).EntireRow.Value = .End(xlUp).EntireRow.Value
        End With
    End Sub
    et bien d'autres méthodes encore (.Copy par exemple, ou encore stocker les valeur dans un tableau et restituer le tableau sur X lignes d'un coup) ... à choisir en fonction du contexte d'utilisation et de la conception du classeur

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 405
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 405
    Points : 16 245
    Points
    16 245
    Par défaut
    Bonjour

    Pour insérer une ligne identique au dessus ( les deux étant identiques, dessus ou dessous....) : exemple ligne 16 de la feuille active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Rows("16:16").Copy
        Selection.Insert Shift:=xlDown
        Application.CutCopyMode = False
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Peux-tu nous donner le code qu'il t'a généré stp ?
    Salut Jean-Philippe,

    Non hélas, je n'ai pas gardé le code géneré par L'enregistreur de Macro. Je suis sur Mac et je ne peux travailler qu'au travail sur les PC. Aussi m'est-il compliqué de répondre en live. Il va falloir que j'y retourne demain pour tenter une autre expérience. 👍

  6. #6
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    plutôt que de se focaliser sur les cellules, il faut simplifier et se focaliser sur les lignes

    ainsi formulé, on obtient : "La dernière ligne active de la plage +1 = La dernière ligne active de la plage"

    On peut calculer cette dernière ligne de diverses manières, par exemple en utilisant le nombre de lignes de la plage active (UsedRange)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
        With Feuil1
            .Rows(.UsedRange.Rows.Count + 1).Value = .Rows(.UsedRange.Rows.Count).Value
        End With
    End Sub
    Ou plutôt calculer la dernière ligne en remontant du bas de la feuille jusqu'à tomber sur une ligne non vide (par exemple en analysant la colonne 1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub toto()
        With Feuil1.Cells(Feuil1.Rows.Count, 1)
            .End(xlUp)(2).EntireRow.Value = .End(xlUp).EntireRow.Value
        End With
    End Sub
    et bien d'autres méthodes encore (.Copy par exemple, ou encore stocker les valeur dans un tableau et restituer le tableau sur X lignes d'un coup) ... à choisir en fonction du contexte d'utilisation et de la conception du classeur
    Bonjour joe-levrai,

    Je vais tenter cette approche même si mon faible niveau en VBA me fait comprendre la moitié de ton code.
    Notamment, que veut dire le (2) après le End(xlUp) sur ton premier code ? Je vais aller voir les arguments nécessaire à cette fonction dans la bibliothèque MSDN. 🙃

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    le (2) permet d'aller, non pas sur la dernière ligne remplie, mais sur la suivante

    comme si tu faisais un .Offset(1,0)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Points : 23
    Points
    23
    Par défaut
    Alors, voilà ce que j'ai fait :

    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
    ' Déclaration des variables. 
    Dim I as Integer
    
    ' Affectation des variables. 
    I = 8
    
    Do While Worksheets("Feuil1").Cells (I, 1) <> "".  ' Tant que la conditions est vraie la boucle est répétée. 
    Worksheets("Feuil1").Cells (I, 1).Offset.Select.     ' Sinon on exécute l'instruction qui est de sélectionner la 1ère cellule vide. 
    I = I + 1
    Loop
    
    ' je sélectionne ma ligne entière 
    ActiveCell.EntireRow.Select 
    ´ J'en fait une copie	
    Selection.Copy   
    ' je sélectionne la cellule en dessous en me décalant d'une ligne et je colle ma selection
    ActiveCell.Offset(1, 0).Paste.     
    ' Je refais le focus sur ma cellule et je copie dans les cellules adjacentes, les instructions des lignes qui suivent
    ActiveCells.Offset(1, 0) 
    
            ActiveCells.Offset(1, 14).Value = Me.ComboBox1
    	ActiveCells.Offset(1, 15).Value = Format(Val(Me.TextBox5), "0")
    	ActiveCells.Offset(1, 16).Value = Me.TextBox6
    	ActiveCells.Offset(1, 17).Value = Me.TextBox7
            Etc…


    En fonction de certaine condition j'ai également écrit ceci. Mais je ne sais pas si les Or successifs sont bien interprétés en VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    ' Si la Case à cocher est à vrai OU si un 2ème plein est effectué OU si Une 2ème reprise est effectuée alors 
    
    If CheckBox1.Value = True Or txtDelivreSol <> ""  Or txtRepris <> "" Then 
    	ActiveCell.EntireRow.Select
    	Selection.Copy
    	ActiveCell.Offset(1, 0).Paste
    	ActiveCells.Offset
    	
    	ActiveCells.Offset(1, 14).Value = Format(Val(Me.cboTanker2), "0")
    	ActiveCells.Offset(1, 15).Value = Format(Val(Me.txtNb2), "0")
    	ActiveCells.Offset(1, 16).Value = Me.txtNationalite2
    Je sais travail'de debutant 😞

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    le VBA comme la langue française n'accepte ni les erreurs d'orthographe ni les lignes incomplètes !
    Lancer d'abord la compilation du projet et corriger chaque ligne de code en erreur …

    ___________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    le (2) permet d'aller, non pas sur la dernière ligne remplie, mais sur la suivante

    comme si tu faisais un .Offset(1,0)
    Alors ça c'est trop fort 🙃😋👍

  11. #11
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Bonjour,

    le VBA comme la langue française n'accepte ni les erreurs d'orthographe ni les lignes incomplètes !
    Lancer d'abord la compilation du projet et corriger chaque ligne de code en erreur …

    ___________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    Euh ??? Là suis d'un niveau trop faible 🤔

Discussions similaires

  1. copier une ligne contenant un mot
    Par newbiedelphi dans le forum Delphi
    Réponses: 2
    Dernier message: 25/07/2006, 12h02
  2. copier une ligne d'une cellule et la coller
    Par sam01 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/07/2006, 15h34
  3. comment copier une ligne d'un fichier à un autre
    Par debutant-1 dans le forum C
    Réponses: 14
    Dernier message: 26/06/2006, 22h01
  4. language SQL - Copier une ligne dans autre table
    Par fxd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/10/2005, 19h16
  5. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 23h59

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