Copier coller d'une feuille à une autre

Bonjour à tous,

Je reviens vous embéter avec un sujet qui a déjà été traité je sais mais je ne trouve pas de réponse a mon problème tel quel...

Je m'explique : J'ai déjà un code VBA qui me permet de faire plein de chose mais j'aurai aimé en faire encore plus...

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Updated by Extendoffice 2017/10/12
    Dim xRg As Range, xCell As Range
    On Error Resume Next
    If (Target.Count = 1) Then
        If (Not Application.Intersect(Target, Me.Range("B:B")) Is Nothing) Then _
            Target.Offset(0, 2) = Date
        Application.EnableEvents = False
        Set xRg = Application.Intersect(Target.Dependents, Me.Range("B:B"))
        If (Not xRg Is Nothing) Then
            For Each xCell In xRg
                xCell.Offset(0, 2) = Date
                Next
        End If
Application.EnableEvents = True
End If
End Sub

Et j'ai aussi ce code pour mon bouton :

Private Sub Bouton2_Cliquer()
        ActiveWorkbook.Save
End Sub

Maintenant j'aurai aimé ajouter a ce code que lorsque je click sur le bouton enregistrer (Bouton2_Cliquer) Il me recopie certaine cellule pour les mettre a un autre onglet a une place bien précise que sa lance l'impression en même temps sur une imprimante bien précise.

Voici des creen de ce que j'aimerai copier et coller

copier

Voici les cellule à copier et ensuite Les coller dans l'onglet Etiquette dans les cellule entouré en rouge ci dessous

coller

Voila 4 colonne a recopier sur 4 cellules différente...

J'espère que vous avez tous compris lol ^^ je vous joint mon fichier et je vous laisse regarder et revenir vers moi pour toute question.

Merci d'avance pour votre aide en tous les cas

11test-enr-forum.xlsm (38.61 Ko)

Petite précision que j'ai oublier d'apporter c'est que Les infos change d'une ligne à une autre. En gros lorsque je clic sur mon bouton c'est la dernière ligne rentrer qui doit être copier et coller...

Bonjour

Un premier point : dans votre feuille donnée vous avez deux tableaux au format structuré. Il ne faut jamais de lignes sans données dans un tableau structuré.
Pour vos deux tableaux, supprimez déjà toutes les lignes vides.
Pour ce faire, sélectionnez les plages contenant des cellules vides, puis click droite --> option Supprimer --> lignes de tableau (vous devez absolument voir "ligne de tableau)

Deuxième point : supprimez toutes vos cellules fusionnées, à moins que vous ne cherchiez des problèmes. A éviter à tout prix avec VBA.

en gros : votre code posté doit uniquement mettre une date dans la colonne D ?

Bonjour Dan,

Merci pour votre réponse aussi rapide.

Pour votre 1er point : Les deux tableau sont normalement rempli de données mais par souci de confidentialité j'ai enlevé ces données.

Ensuite pour votre 2 ème points , les cellules fusionnées sont ici pour la mise en page car cela doit me permettre l'impression sur une étiquette.

Et oui mon code présent jusqu'à présent ne sert que pour la date mais j'aimerai mettre en plus la réécriture des données et l'impression d'une étiquette sur une imprimante précise.

Bonjour

Point 1 : ok.
Point 2 : Je vous ai dit que si vous vouliez avoir des problèmes avec VBA c'est un bon moyen. Je ne suis pas le seul qui vous le dira. C'est aussi s'habituer à une bonne pratique. Il suffit d'élargir vos colonnes.
Là si vous défusionnez vos cellules puis élargissez la colonne A et le souci est résolu.

Vous pouvez aussi mettre une info dans une cellule et si vous voulez l'étendre à plusieurs cellules, vous sélectionnez toutes les cellules puis vous allez dans format cellule et dans la rubrique Horizontal, vous choisissez "centre sur plusieurs colonnes". Cela donne le même résultat sans fusion

le code pour votre bouton comme ceci

Private Sub Bouton2_Cliquer()
Set TS = ActiveSheet.ListObjects(1)
If Intersect(ActiveCell, TS.Range) Is Nothing Then
    MsgBox "veuillez sélectionner une cellule dans le tableau": Exit Sub
End If
With Sheets("Etiquette")
    lig = ActiveCell.Row - TS.HeaderRowRange.Row
    .Range("B2") = TS.DataBodyRange(lig, 1).Value
    .Range("A3") = TS.DataBodyRange(lig, 2).Value
    .Range("B4") = TS.DataBodyRange(lig, 6).Value
    .Range("A5") = TS.DataBodyRange(lig, 3).Value

    .PageSetup.PrintArea = .Range("A2").CurrentRegion
    .PrintPreview
End With
End Sub

Si ok pensez à

Cordialement

EDIT : pour votre code dans la feuille Tableau, remplacez tout ce que vous avez par le code ci-dessous

Dim stpevt As Boolean
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Count = 1 And stpevt = False Then
    If Not Application.Intersect(Target, ListObjects(1).ListColumns(2).DataBodyRange) Is Nothing Then
        stpevt = True
        With Target
            If .Value <> vbNullString Then
                .Offset(0, 2) = Date
            Else: .Offset(0, 2).ClearContents
            End If
        End With
    End If
stpevt = False
End If
End Sub

Merci Dan pour ta réponse et du coup je viens de tester avec des colonnes élargie et tu as raison sa fonctionne tous pareille et sera plus simple pour le VBA...

Ensuite pour le morceau de code que tu ma donner je ne le comprend pas et il ne fonctionne pas ^^

Pour le fait qu'il ne fonctionne pas il me note :

capture

et ensuite il me met en jaune cette ligne de code suivante :

   .PageSetup.PrintArea = .Range("A2").CurrentRegion

Alors je me suis dit que j'était bête que je n'avait pas mit l'imprimante et qu'il fallait que je la rajoute après le = mais une fois fait on me dit erreur de syntaxe...

Ensuite si je comprend un peu ton code sa va m'ouvrir une msg box qui va me demander de choisir quelle ligne choisir pour être copié et coller c'est bien sa?

Il n'est pas possible de le faire automatiquement la dernière ligne écrite ? car sa sera toujours les même colonne a copier et coller et toujours au même endroit...

Merci d'avance pour Tous

re

1. Pour l'erreur, remplacez la ligne

.PageSetup.PrintArea = .Range("A2").CurrentRegion

par

.PageSetup.PrintArea = "$A$2:$B$5"

2. Pour le MSGBOX, non c'est simplement que si vous ne sélectionnez pas une ligne dans le tableau, le code va vous le demander. Le code imprimera la ligne que vous souhaitez.
On peut faire sur la dernière ligne écrite mais si vous faites une erreur dans le choix du code ou que vous devez simplement réimprimer ?

Super merci Dan Sa fonctionne parfaitement par contre j'aurai aimé ne pas avoir d'aperçu avant impression mais une impression direct sur une imprimante spécifique. J'ai bien éssayer de modifier le code mais sa ne fonctionne pas j'ai écrit ceci...

    .PageSetup.PrintArea = "$A$2:$C$5"
    Application.ActivePrinter = "Mon imprimante"

et de plus il aurait fallu que le fichier s'enregistre tous seul une fois cliquer sur le bouton ^^ mais aussi un lien hyperlink à suivre une fois que le bouton à été cliquer.

Oui j'en rajoute un de plus car je l'avais oublié ^^

Merci encore

il aurait fallu que le fichier s'enregistre tous seul une fois cliquer sur le bouton

Vous ajoutez ceci juste avant le END SUB de la macro Bouton2_cliquer

ThisWorkbook.Save

Pour l'imprimante, instruction est correcte. vous devez remplacer "Mon imprimante" par le nom de votre imprimante.
Eventuellement, exécutez ce code pour savoir ce que vous devez mettre entre guillemets

Sub test
MsgBox Application.ActivePrinter
End sub

lien hyperlink à suivre une fois que le bouton à été cliquer.

Heu où cela ?

Alors en mon instruction semble incorrect car lorsque je la met sa ne fonctionne pas... J'ai rayé expres par souci de confidentialité le nom de mon imprimante...

capture

Voici l'erreur qui apparait...

Et pour ce qui est du lien hyperlink laisser tomber normalement je devrait y arrivé lol ^^

Le message d'erreur ne sert à rien. On ne sait pas où cela bugue
Mais je suppose que c'est sur la ligne de l"imprimante ?
Si oui, mettre des "\\..." ne donne pas le chemin de votre imprimante. Elle est sur réseau il me semble

Oui elle est sur reseau

Comment savoir ou cela bug? C'est la ligne en jaune?

Comment savoir ou cela bug? C'est la ligne en jaune?

oui

Si elle est sur réseau et que ce n'est pas votre imprimante par défaut, il faut dire à excel qu'il prenne l'imprimante en question pour votre fichier
Une instruction comme ceci vous permettrait de la choisir

Application.Dialogs(xlDialogPrinterSetup).Show

Une fois fait et que votre fichier est en utilisation, vous ne devriez plus changer sauf lorsque vous fermez votre fichier

Justement le fichier sera fermer une fois que l'on aura fini donc j'aurai voulu choisir en VBA mon imprimante et ne pas laisser l'utilisateur du fichier le choix et maintenant sa ne me fait plus la même erreur et sa me met ma ligne d'impression en jaune lol ^^ je n'y comprend plus rien ... ^^

Quelle ligne en jaune ?
Vous avez utilisé la ligne que je vous ai donnée ?

    .PageSetup.PrintArea = "$A$2:$C$5"
    Application.ActivePrinter = "Mon imprimante"

En mettant mon imprimante sa ma mit une autre erreur et sa a mit en jaune cette ligne suivante :

    Application.ActivePrinter = "Mon imprimante"

Je ne comprend pas du coup car juste avant sa ne me mettait pas cette erreur ni cette ligne en jaune

On revient à la question de savoir si vous avez utilisé ce que je vous ai donné comme instruction ici --> https://forum.excel-pratique.com/s/goto/1158300

*Je ne l'avais pas utiliser car vous me dites que lorsque je vais fermer mon fichier l'imprimante ne sera plus sélectionner et comme je vous disait j'aurai voulu mettre constament la même imprimante. et sinon la je vient de tester votre ligne qui fonctionne parfaitement qui me demande de choisir mon imprimante...

Ok.

Donc lorsque vous ouvrez votre fichier on peut demander via cette instruction quelle imprimante le fichier doit utiliser et à la fermeture remettre automatiquement l'imprimante par défaut

Cela conviendrait cela ?

Oui cela pourrait convenir mais il n'es pas possible d'avoir une imprimante d'indiquer dans le code pour que lorsque l'on clic sur le bouton sa s'imprime sur cette imprimante?

Rechercher des sujets similaires à "copier coller feuille"