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

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 30
    Points : 15
    Points
    15

    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
    Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    11 941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 11 941
    Points : 26 547
    Points
    26 547

    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 ?
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    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
    4 236
    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 : 4 236
    Points : 8 077
    Points
    8 077
    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

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

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

    Informations forums :
    Inscription : février 2010
    Messages : 4 314
    Points : 7 873
    Points
    7 873

    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

    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
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 30
    Points : 15
    Points
    15

    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
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 30
    Points : 15
    Points
    15

    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
    4 236
    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 : 4 236
    Points : 8 077
    Points
    8 077
    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
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 30
    Points : 15
    Points
    15

    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
    8 328
    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 : 8 328
    Points : 16 477
    Points
    16 477

    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, …
    . . . . . Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !

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

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 30
    Points : 15
    Points
    15

    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
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2017
    Messages : 30
    Points : 15
    Points
    15

    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, 11h02
  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, 14h34
  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, 21h01
  4. language SQL - Copier une ligne dans autre table
    Par fxd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/10/2005, 18h16
  5. copier une ligne dans une autre table
    Par BoeufBrocoli dans le forum SQL
    Réponses: 5
    Dernier message: 24/10/2003, 22h59

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