Couper coller une plage de données Excel

Bonjour cher membres

Je sollicite votre aide pour résoudre mon souci qui est de créer une application excel qui me permettra de couper et de coller une plage de données d'une feuille excel vers une autre feuille d'une façon répétitives a l'aide des macro

J'ai pris le soin de mettre en pj le besoin

après saisi des données dans vente dans la feuil1 , je souhaite sélectionner la plage de données dans la feuil1 > coper> coller dans la feuil2

lorsque je fait une deuxieme saisi dans la feuil2 , je doit sélectionner encore une plage de données >couper > coller dans la feuil2 ,a la ligne du dessous du 1er coller .

Merci d'avance pour votre aide

38couper-coller.xlsx (12.20 Ko)

Bonjour,

Une macro à tester :

Sub Test()
Dim WsS As Worksheet, WsC As Worksheet
Dim DerLigS As Long, DerLigC As Long
    Set WsS = Worksheets("Feuil1")
    Set WsC = Worksheets("Feuil2")
    DerLigS = WsS.Range("C" & Rows.Count).End(xlUp).Row
    WsS.Range("B15", WsS.Cells(DerLigS, 9)).Copy
    DerLigC = WsC.Range("D" & Rows.Count).End(xlUp).Row
    WsC.Range("C" & DerLigC + 1).PasteSpecial Paste:=xlPasteValues
    WsS.Range("B15", WsS.Cells(DerLigS, 9)).ClearContents
    Application.CutCopyMode = False
    Set WsC = Nothing: Set WsS = Nothing
End Sub

A+

Bonjour,

Quelques réflexions :

1) Pourquoi se positionner au milieu des feuilles, tant pour saisir que pour insérer... ?

(les repères naturels étant le bord gauche et le bord haut de la feuille... !)

2) Quels sont alors les repères à utiliser ?

Et comment doit-être déclenchée l'opération ? (rien ne l'indique).

3) Pourquoi vouloir absolument copier(ou couper)-coller alors que VBA peut faire autrement ?

Cordialement.

Merci Frangy

Je vais tester


Merci MFerrand

1- en fait le pisitionnement nous pouvons le changer y a pas de souci

2- si vous avez une solution avec VBA je veux bien svp .

Cdt

frangy a écrit :

Bonjour,

Une macro à tester :

Sub Test()
Dim WsS As Worksheet, WsC As Worksheet
Dim DerLigS As Long, DerLigC As Long
    Set WsS = Worksheets("Feuil1")
    Set WsC = Worksheets("Feuil2")
    DerLigS = WsS.Range("C" & Rows.Count).End(xlUp).Row
    WsS.Range("B15", WsS.Cells(DerLigS, 9)).Copy
    DerLigC = WsC.Range("D" & Rows.Count).End(xlUp).Row
    WsC.Range("C" & DerLigC + 1).PasteSpecial Paste:=xlPasteValues
    WsS.Range("B15", WsS.Cells(DerLigS, 9)).ClearContents
    Application.CutCopyMode = False
    Set WsC = Nothing: Set WsS = Nothing
End Sub

A+

Mr Ferangy

Le teste a fonctionner super

alors un deuxieme demande svp ,Peut on rajouter la date dans la feuil2 (BDD) qui est saisi une seuil fois dans une cellule dans feuil1 et recopier sous forme de liste dans feuil2 a chaque saisi .

Merci

Merci

Je conseille de le modifier, pour rationnaliser la chose...

En attendant, comme c'est à toi de le faire, j'opère avec l'existant :

2 plages nommées (noms dynamiques à voir dans le gestionnaire de noms) : Saisie pour la zone de saisie à transférer, Base pour la zone cible du transfert.

Un bouton sur la feuille de saisie pour opérer le transfert.

NB- la première colonne de la zone de saisie doit toujours être servie (sinon cela fausse le transfert).

Moyennant quoi l'opération devient d'une simplicité enfantine, et s'effectue avec un minimum de moyens :

Sub Transfert()
    Dim n%, nb%
    n = [Saisie].Rows.Count - 1
    If n > 0 Then
        nb = [Base].Rows.Count + 1
        With [Saisie].Cells(2, 1).Resize(n, 8)
            [Base].Cells(nb, 1).Resize(n, 8).Value = .Value
            .ClearContents
        End With
    End If
End Sub

Cordialement.

MFerrand a écrit :

Je conseille de le modifier, pour rationnaliser la chose...

En attendant, comme c'est à toi de le faire, j'opère avec l'existant :

2 plages nommées (noms dynamiques à voir dans le gestionnaire de noms) : Saisie pour la zone de saisie à transférer, Base pour la zone cible du transfert.

Un bouton sur la feuille de saisie pour opérer le transfert.

NB- la première colonne de la zone de saisie doit toujours être servie (sinon cela fausse le transfert).

Moyennant quoi l'opération devient d'une simplicité enfantine, et s'effectue avec un minimum de moyens :

Sub Transfert()
    Dim n%, nb%
    n = [Saisie].Rows.Count - 1
    If n > 0 Then
        nb = [Base].Rows.Count + 1
        With [Saisie].Cells(2, 1).Resize(n, 8)
            [Base].Cells(nb, 1).Resize(n, 8).Value = .Value
            .ClearContents
        End With
    End If
End Sub

Cordialement.

Mr Mferrand

Merci pour votre aide ,c'est magic

alors j'ai une deuxieme demande svp ,Peut on rajouter la date dans la feuil2 (BDD) qui est saisi une seuil fois dans une cellule dans feuil1 et recopier sous forme de liste dans feuil2 a chaque saisi .

Merci par avance

Si tu continues de poser des questions sans fournir les éléments permettant de te répondre... !

Il n'y a aucune date dans ton classeur ! Où on la prend ? Et où on la met ?

Excel est un tableur, on y travaille sur des feuilles divisées en lignes et colonnes, et il n'existe pas de cellule sans adresse !

MFerrand a écrit :

Si tu continues de poser des questions sans fournir les éléments permettant de te répondre... !

Il n'y a aucune date dans ton classeur ! Où on la prend ? Et où on la met ?

Excel est un tableur, on y travaille sur des feuilles divisées en lignes et colonnes, et il n'existe pas de cellule sans adresse !

Désolé MFerrand

en fait je souhaite concrètement créer un bouton qui me permettra de copier et coller le contenu de C6 de la feuil1 vers la colonne B (date) a partir de B6 jusqu’à la la dernière ligne saisi .

Voici en pj le fichier modifier

Voilà :

Sub Transfert()
    Dim n%, nb%, d As Date
    n = [Saisie].Rows.Count - 1
    If n > 0 Then
        d = CDate([Saisie].Cells(-7, 2))
        nb = [Base].Rows.Count + 1
        With [Saisie].Cells(2, 1).Resize(n, 8)
            [Base].Cells(nb, 1).Resize(n, 8).Value = .Value
            .ClearContents
        End With
        [Base].Cells(nb, 0).Resize(n).Value = d
        [Saisie].Cells(-7, 2).ClearContents
    End If
End Sub

Attention : tenant compte que les noms de feuille sont susceptibles d'être modifiés, je ne les utilise pas et procède exclusivement à un adressage relatif par rapport aux plages nommées, d'où Cells avec des index de lignes et colonnes pouvant être inférieur à 1. [La cellule référente étant d'index (1, 1), la ligne précédente ou la colonne précédente est d'index 0, etc. (différence avec Offset qui mesure le décalage : par rapport à une cellule c.Cells(0, 0), la même serait définie par c.Offset(-1, -1))].

Cordialement.

MFerrand a écrit :

Voilà :

Sub Transfert()
    Dim n%, nb%, d As Date
    n = [Saisie].Rows.Count - 1
    If n > 0 Then
        d = CDate([Saisie].Cells(-7, 2))
        nb = [Base].Rows.Count + 1
        With [Saisie].Cells(2, 1).Resize(n, 8)
            [Base].Cells(nb, 1).Resize(n, 8).Value = .Value
            .ClearContents
        End With
        [Base].Cells(nb, 0).Resize(n).Value = d
        [Saisie].Cells(-7, 2).ClearContents
    End If
End Sub

Attention : tenant compte que les noms de feuille sont susceptibles d'être modifiés, je ne les utilise pas et procède exclusivement à un adressage relatif par rapport aux plages nommées, d'où Cells avec des index de lignes et colonnes pouvant être inférieur à 1. [La cellule référente étant d'index (1, 1), la ligne précédente ou la colonne précédente est d'index 0, etc. (différence avec Offset qui mesure le décalage : par rapport à une cellule c.Cells(0, 0), la même serait définie par c.Offset(-1, -1))].

Cordialement.

Bonjour MFerrand

Merci pour votre aide

Est il possible de modifier le besoin encore une fois ?

Cdt

Quoi donc d'autre ?

MFerrand a écrit :

Quoi donc d'autre ?

Alors c'est le même besoin que ma demande précedente ,j'ai juste modifier l'aspect du fichier , j'ai rajouté le vendeur dans une liste déroulante pour qu'il soit coller dans une autre feuille de la meme façon que la date .

Je souhaite aussi que le contenu de la partie Kpi dans la feuil1 soit couper coller dans l'onglet kpi a chaque nouvelle saisi .

Merci pour votre aide

MFerrand

Avez vous pu traiter ma demande

désolé pour l'urgence

Pas encore eu le temps de regarder !

MFerrand a écrit :

Pas encore eu le temps de regarder !

Ah ok , c'est pas grave

faite moi signe alors dès que ma demande est traité .

Merci

J'ai vu !

Alors :

1) Tu remets ton nouveau classeur avec la macro à l'intérieur...

2) Tu renommes les plages que j'avais nommées sur ton modèle initial (tu peux les nommer comme tu veux mais tu adaptes les formules à tes changements de références)

NB- sur la 2e feuille, tu ne prends en considération que les mêmes colonnes que sur la feuille saisie.

Cordialement.

MFerrand

Est il possible de m'aider svp je suis vraiment débutant sur macro vba

Merci

Je t'ai déjà fourni quelque chose qui fonctionnait, si cela ne te permet pas d'en tirer profit et de l'adapter aux quelques modifications que tu fais, on travaille pour rien !

Cela veut dire qu'à chaque fois on doit recommencer à zéro parce que ce qui a été fait avant ne t'a rien appris.

Si on ne progresse pas, pourquoi continuer ?

Et je te fais remarquer que je ne t'ai pas demandé de retoucher la macro, seulement de la mettre dans le classeur, c'est bien le moins que l'on puisse attendre... et d'autre part de nommer des plages, activité de base sur Excel, en t'inspirant de la façon dont c'est fait dans le modèle (et aussi des commentaires que j'avais fourni). Donc rien qui réclame une connaissance en VBA, sinon ouvrir l'éditeur...

Si ce que tu veux c'est qu'on te fournisse du travail tout fait et qu'on le refasse inlassablement à la demande, tu t'es trompé d'endroit !

Cordialement.

Je pense avoir demandé de l'aide gentiment

Je ne comprends pas PQ tout cet acharnement on fabrique pas des fusille pour autant

Et puis vous pouvez juste ne pas répondre et je comprendrai

À chaque demande vous en faite des tonnes d histoire pour me répondre

Enfin désolé pour le dérangement on demandera à d autres contributeurs dans ce cas

Rechercher des sujets similaires à "couper coller plage donnees"