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 ligne saisie en cours vers une autre feuille du même classeur [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut Copier ligne saisie en cours vers une autre feuille du même classeur
    Bonjour à toutes et à tous,

    Voici mon problème : Dans une feuille Excel ("Arch_Bât"), je saisie des données sans l'aide d'un formulaire. Je souhaiterai qu'à chaque fois que je saisie une ligne dans mon tableau et que je passe à la ligne suivante, la précédente soit copiée vers un tableau de la feuille ("Général") à partir de la ligne 1540.

    Donc insertion d'une ligne, et copie des données.

    Est-ce possible sans formulaire et comment ?

    Merci par avance pour votre aide

    Amicalement

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour VBA, bonjour le forum,

    Le problème est de savoir à quel moment on sait que la ligne est remplie (quelle colonne) pour déclencher le copier/coller ? Si tu t'es trompé et que tu modifies une donnée après le copier/coller comment fait-on ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Bonjour,

    A lancer manuellement quand tu as fini de remplir ta ligne avec n'importe quel cellule de cette ligne activée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub insert_et_copie
    sheets("Général").rows(1540).insert
    activecell.entirerow.copy destination:= sheets("Général").rows(1540)
    end sub

  4. #4
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour Thautheme,

    Merci pour ta réponse.

    La dernière colonne est la colonne P du tableau de la feuille "Arch_Bât". Les tableaux sont identiques dans les deux feuilles, mais le tableau général concentre plusieurs feuilles.

  5. #5
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour halaster08,

    Merci pour ta réponse, nos posts se sont croisés.

    Mais comment fonctionne ton code ? Désolé je ne comprends pas Comment dois-je le lancer ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Comment dois-je le lancer ?
    Je ne comprends pas ta question, comme n'importe quel macro ? Mon code n'a rien de particulier.

  7. #7
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Voilà ce que j'essaie de faire mais je peine beaucoup.

    J'ai trouvé un modèle de code sur le forum que j'essaie d'adapter à ma situation, mais je rame un peu.
    Est-ce que je suis sur la bonne voix ?

    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
     
    Sub validation_Copie()
    Dim derlig As Integer, i As Integer
    Dim validée As String 
    Application.ScreenUpdating = False
    With Sheets("Général") derlig = .Range("A65536").End(xlUp).Row + 1
    End With
    Sheets("Arch_Bât").Activate For i = Sheets("Arch_Bât").Range("E65536").End(xlUp).Row To 2 With Sheets("Général")
    'à partir d'ici on recopie les données de la feuille "Arch_Bât" vers la feuille "Général"
    .Cells(derlig, 1) = Sheets("Arch_Bât").Cells(i, 1)
    .Cells(derlig, 2) = Sheets("Arch_Bât").Cells(i, 2)
    .Cells(derlig, 3) = Sheets("Arch_Bât").Cells(i, 3)
    ……
    .Cells(derlig, 16) = Sheets("Arch_Bât").Cells derlig = derlig + 1
    End With
    End If
    Next
    Sheets("Arch_Bât").Activate
    Application.ScreenUpdating = True
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Citation Envoyé par Vba14 Voir le message
    Est-ce que je suis sur la bonne voix ?
    Je ne sais pas j'ai du mal à t'entendre, sur la bonne voie peut-être.

    Sinon la macro que tu montre copie toutes les lignes (boucle for) de ta feuille, alors que dans ton énoncé initial tu ne voulais copier qu'une ligne.
    Citation Envoyé par demande initiale
    Donc insertion d'une ligne, et copie des données.
    D'où le code proposé en deux lignes, insertion puis copie

  9. #9
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Désolé pour la faute d'orthographe.
    Oui tu as raison, ce n'est que la dernière ligne saisie qui doit être copiée.

    Avec l'enregistreur de macro ça donne ça :

    Là j'ai sélectionné la ligne que je viens de saisir et je l'ai inséré et copié dans mon tableau général, mais il est évident que la ligne saisie change à chaque nouvelle saisie.
    Je patine dans la semoule ce matin, je ne dois pas être bien réveillé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Copie()
        Rows("1529:1529").Select
        Selection.Copy
        Sheets("Général").Select
        Selection.Insert Shift:=xlDown
        Sheets("Arch_Bât").Select
        Range("A1530").Select
        Application.CutCopyMode = False
    End Sub

  10. #10
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour à vous,

    Tu n'as pas besoin de faire tous ces Select

    Aide Microsoft sur Range.Copy https://docs.microsoft.com/fr-fr/off...cel.range.copy

  11. #11
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    As-tu essayé le code que je t'ai proposé ? En quoi il ne correspond pas à ta demande ?

  12. #12
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    La macro événementielle Change ci-dessous réagira dès que tu auras édité la colonne P (à placer dans l'onglet Arch_Bât) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 16 Then Exit Sub
    Sheets("Général").Rows(1540).Insert
    Rows(Target.Row).Copy Sheets("Général").Range("A1540")
    End Sub
    Mais elle ne te laissera même pas le temps de relire ta ligne. Je lui préfère cette autre événementielle BeforeDoubleClick qui réagit au double-clic (à placer aussi dans l'onglet Arch_Bât). Pour copier/coller la ligne il te suffira de double-cliquer sur n'importe quelle cellule de celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Sheets("Général").Rows(1540).Insert
    Rows(Target.Row).Copy Sheets("Général").Range("A1540")
    End Sub

  13. #13
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour à tous, bonjour Thauthème,

    Merci pour tes propositions et toutes mes excuses pour le retard de ma réponse.

    J'ai collé ton code dans ma feuille, j'ai fait quelques tests et ça à l'air de fonctionner.

    Encore mercis pour ton aide et à tout ceux qui ont participé à cette discussion.

    Bonne journée à tous

    Très amicalement

  14. #14
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour à tous,

    Je reviens sur ce fil car je rencontre un problème auquel je n'avais pas pensé.
    Thautheme, que je remercie encore une fois, m'a transmis ce code qui fonctionne bien, mais pas comme je l'aurai souhaité, mais c'est de ma faute, mes explications n'étant pas assez claires.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Sheets("Général").Rows(1555).Insert
    Rows(Target.Row).Copy Sheets("Général").Range("A1555")
    End Sub
    Ce code recopie bien la dernière ligne saisie, mais pas à l'endroit qu'il faudrait. Si je saisi le numéro 1555, par exemple, celle-ci doit être recopiée après la ligne 1554, la 1556 après la 1555 et ainsi de suite.
    Hors dans le code ci-dessus, mais encore une fois je suis le seul responsable, il vient insérer la copie à partir de la ligne 1555. Conforme à ma demande préalable.

    Ce qu'il faudrait, c'est que l'insertion se fasse à partir de A1555 mais les unes à la suite des autres, donc en clair première insertion A1555, deuxième insertion A1556 er ainsi de suite.

    Pouvez-vous m'aider s'il vous plait ?
    Je vous en remercie par avance

  15. #15
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim LI As Long
     
    Cancel = True
    LI = IIf(Sheets("Général").Cells(1555, "A").Value = "", 1555, Sheets("Général").Cells(Application.Rows.Count, "A").End(xlUp).Row + 1)
    Rows(Target.Row).Copy Sheets("Général").Cells(LI, "A")
    End Sub

  16. #16
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour Thautheme,

    Merci pour ta réponse rapide. Je teste et je reviens.

    Ce n'est pas ce que j'attends, ton code fonctionne bien pas de soucis, mais pas comme je le souhaite. Dans ton code, la copie se fait à la dernière ligne vide du tableau, hors ce que je souhaite c'est qu'elle vienne s'insérer entre deux lignes précises.

    Dans la colonne C de la feuille "Général" il y des numéros de 15 à 954 pour le moment. Après 954, il y a d'autres données mais qui ne sont pas concernées par ma saisie.
    Les numéros que je vais saisir maintenant doivent s'insérer à partir du numéro 954 de la colonne C.

    Désolé pour mon manque de précisions.

  17. #17
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Je viens de survoler les posts de ce fil, au début c'était 1540, puis 1530, 1555, ...
    Il faudrait savoir comment peut-on déterminer la destination sans l'écrire en dur dans la macro.
    - la dernière ligne ?
    - la ligne située après ou avant la ligne qui contient xxxx dans la colonne cccc ?
    - ....

  18. #18
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour Patrice740,

    Merci pour ta participation. C'est normal que le numéro de la ligne évolue puisque j'ajoute des données. Au début de la conversation j'étais à la ligne 1540 et maintenant 1555.
    Mes nouvelles données doivent s'insérer ensuite, les unes après les autres, après le double-clic.

  19. #19
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Vba14 Voir le message
    C'est normal que le numéro de la ligne évolue puisque j'ajoute des données. Au début de la conversation j'étais à la ligne 1540 et maintenant 1555.
    Mes nouvelles données doivent s'insérer ensuite, les unes après les autres, après le double-clic.
    Ça ne répond pas à la question : « comment peut-on déterminer la destination sans l'écrire en dur dans la macro »
    Puisque tu insère, c'est qu'il y a quelque chose après ...

  20. #20
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour le forum, bonjour Patrice740,

    En effet, il me faut insérer les nouvelles données les unes après les autres entre la ligne 1560 et 1561 (des données ont été ajoutées depuis notre dernière discussion).
    Donc, les prochaines nouvelles données viendront les unes après les autres à partir de la ligne 1561.

    Voici une copie écran pour vous permettre de visualiser le fichier

    Doc1.docx

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/04/2019, 15h31
  2. Réponses: 2
    Dernier message: 06/02/2015, 19h51
  3. Réponses: 1
    Dernier message: 13/10/2014, 02h12
  4. [XL-2010] copier et coller dans une autre feuille du même classeur VBA
    Par awa123 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/08/2014, 20h35
  5. [XL-2000] Comment copier-coller d'une feuille vers une autre d'un même classeur ?
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/07/2014, 16h40

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