Erreur de copie de données

Résolu
Bonjour les amis,
j'ai un document dans lequel se fait ,par code VBA, la copie d'un onglet nommé "modele" et la copie de 2 colonnes du dernier onglet qui existe dans le fichier (les 2 colonnes colorés par jaune et vert)
mais depuis un temps la copie est altérée et j'aimerais rétablir l'ordre de nouveau
merci beaucoup pour votre aide dont j'ai vraiment besoin
le fichier est suivant ce lien
https://mon-partage.fr/f/zAviKYUR/
bien cordialement

Configuration: Windows / Chrome 76.0.3809.132


--
c'est en cherchant qu'on trouve

13 réponses

  1. Bonjour,

    Que voulez-vous dire par "La copie est altérée"? A quel niveau?

    Votre code quelque peu modifié
    Private Sub CommandButton1_Click()
        Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet
        Application.ScreenUpdating = False
        Set f1 = Sheets("MODELE")
        Set f3 = Sheets(4)
        'copie feuille modele - place la copie en 3eme poistion et la renomme avec la date
        f1.Copy Before:=Sheets(3)
        Set f2 = Sheets("MODELE (2)")
        f2.Name = Day(ladate) & "-" & Month(ladate) & "-" & Year(ladate) - 2000
        f2.Range("T1:X1").FormulaR1C1 = ladate
        'si la case feuille vierge n'est pas cochée, boucle sur les lignes et copie données feuille précédente
        If Me.vierge.Value = False Then
                f2.Range("E3:E8").Value = f3.Range("H3:H8").Value
                f2.Range("D3:D8").Value = f3.Range("D3:D8").Value
                f2.Range("I3:I8").Value = f3.Range("I3:I8").Value
                f2.Range("J3:J8").Value = f3.Range("J3:J8").Value
                
                f2.Range("E10:E20").Value = f3.Range("H10:H20").Value
                f2.Range("D10:D20").Value = f3.Range("D10:D20").Value
                f2.Range("I10:I20").Value = f3.Range("I10:I20").Value
                f2.Range("J10:J20").Value = f3.Range("J10:J20").Value
                
                f2.Range("D25:D37").Value = f3.Range("D25:D37").Value
                f2.Range("E25:E37").Value = f3.Range("E25:E37").Value
                f2.Range("F25:F37").Value = f3.Range("F25:F37").Value
                f2.Range("G25:G37").Value = f3.Range("G25:G37").Value
        End If
        f2.Shapes("CommandButton1").Delete
        Unload UserForm2
        Set f1 = Nothing
        Set f2 = Nothing
        Set f3 = Nothing
    End Sub


    Cdlt
    0
    1. Bonjour Frenchie83
      merci de votre réponse

      si vous essayer de créer une nouvelle feuille l'onglet modèle est copié , la désignation aussi est copiée de l'onglet qui le précède mais les compteurs ne sont pas copiés de la façon souhaitée
      en fait je veux que le colonne des derniers compteurs I de l'onglet 02/09/19 se met dans le colonne des premiers compteurs E de la feuille créée 03/09/19
      merci encore
      bien cordialement

      0
      1. Bonsoir,

        en fait je veux que le colonne des derniers compteurs I de l'onglet 02/09/19 se met dans le colonne des premiers compteurs E de la feuille créée 03/09/19
        mais ceci n'apparaissait pas dans le code de votre fichier d'origine. A l'origine on peut voir que c'est la colonne H et non pas la colonne I qui est recopiée en E, si le problème n'est que là, remplacez H par I.
        f2.Range("E3:E8").Value = f3.Range("I3:I8").Value
        f2.Range("E10:E20").Value = f3.Range("I10:I20").Value

        Je pense que le code est suffisamment simple et limpide pour que vous puissiez le faire vous-même.

        Cdlt
        0
        1. Bonsoir,
          je ne suis pas l'auteur du code; le fichier fonctionnait parfaitement mais il y avait un ajout de colonnes et tout d'un coup ça ne fonctionne plus comme avant
          j'essayé de remplacer H par I mais en activant la macro ça déclenche la copie du colonne I du 02/09/19 au colonne I du 03/09/19 pas dans le colonne E du 03/09/19 crée
          merci de votre aide
          bien cordialement
          0
          1. Bonjour,

            Pouvez_vous me montrer le code que vous avez écrit?

            Cdlt
            0
            1. Bonjour,

              Sub transfert2()
              Dim Ligne As Long
              'desactive rafraichissement écran
              Application.ScreenUpdating = False
              mess = ""
              ladate = CDate(Range("T1"))
              'boucle sur les lignes de la feuille de production
              For lg = 3 To 20
              Windows("production.xlsm").Activate
              'si designation non vide
              If Range("D" & lg) <> "" Then
              ' nom de la piece
              piece = Range("D" & lg)
              'quantité à transferer
              quantite = Range("U" & lg)
              'cadence à transférer
              cadence = Range("I" & lg)
              'machine à transférer
              machine = Range("B" & lg)
              ' active classeur suivi
              Windows("suivi des livraisons.xlsm").Activate
              exi = 0
              'boucle sur les feuilles de suivi
              For y = 1 To ActiveWorkbook.Sheets.Count
              'si une feuille porte le nom de la piece exi=1
              If ActiveWorkbook.Sheets(y).Name = piece Then exi = 1
              Next y
              ' si exi=0 pas de correspondance - piece ajoutée au futur message d'erreur
              If exi = 0 Then
              mess = mess & piece & Chr(10)
              'sinon recherche ligne de la date dans feuillede suivi et copie quantité
              Else
              ActiveWorkbook.Sheets(piece).Select
              ActiveWorkbook.Sheets(piece).Range("G2") = cadence
              ActiveWorkbook.Sheets(piece).Range("F2") = machine
              Ligne = ActiveWorkbook.Sheets(piece).Columns(1).Find(DateValue(ladate), , , xlByColumns, xlPrevious).Row
              ActiveWorkbook.Sheets(piece).Range("B" & Ligne) = quantite
              End If
              End If
              Next lg
              ' message à afficher
              If mess <> "" Then aff = "PIECES NON TRANSFEREES SUITE A ERREUR :" & Chr(10) & mess Else aff = "Transfert complet effectué"
              MsgBox aff
              ' réactivation rafraichissement écran
              Application.ScreenUpdating = True
              End Sub

              0
              1. Arrêtez tout, je crois qu'on ne parle pas de la même chose.

                Moi, ce que je comprends, c'est que dans la feuille "MODELE", il y a un bouton "Créer nouvelle feuille" qui lorsque l'on clique dessus ouvre un UserForm qui demande de saisir une date et lors de la validation cela crée une nouvelle feuille(si "feuille vierge" n'est pas coché) avec recopie des données de certaines colonnes de la dernière création.
                Le programme lié à ce bouton de validation est dans le module du UserForm2, et c'est ce programme qui s'occupe de faire le nécessaire, création de la nouvelle feuille et recopie des cellules des colonnes demandées( H, D, E, I, J). De mon côté, je n'ai fais que le modifier pour l'adapter à votre demande.

                Je n'ai jamais regardé la macro que vous me montrez, Comment la lancez-vous?
                Pour qu'on se comprenne bien, je vois retourne votre fichier et faites des essais en cliquant sur le bouton "Créer nouvelle feuille" dans la feuille "MODELE". Peut-être qu'à partir de là on parlera de la même chose sinon on va tourner en rond encore longtemps. Si ce n'est pas ce que vous attendez, alors donnez un descriptif précis sur la façon dont vous procédez.

                https://mon-partage.fr/f/CuTChd12/

                Cdlt
                0
                1. Rebonjour,

                  pour éviter toute confusion ci joint le document fonctionnel mais reste le problème suivant
                  je veux qu'au lieu de copier les colonnes E et I de la dernière création vers l'onglet crée, je veux copier le colonne I de la dernière création vers le colonne E de l'onglet crée
                  la copie des désignations , des cadences et de l'onglet "MODELE" est déja fait
                  merci beaucoup pour votre aide
                  bien cordialement

                  https://mon-partage.fr/f/hwyJQ28Z/

                  0
                  1. Vous me renvoyez le même fichier qu'au début, mais avez-vous testez le fichier que je vous ai retourné?

                    De plus vous n'avez pas répondu à ma question:
                    -concernant la macro "transfert2", Comment la lancez-vous? et donnez un descriptif précis sur la façon dont vous procédez.
                    0
                    1. oui je l'ai testé
                      https://mon-partage.fr/f/SVUwcu5G/
                      ça ne donne pas le résultat souhaité
                      en fait vous trouverez suivant ce deuxième lien un essai qui montre le résultat attendu sauf je veux modifier la copie des compteurs comme j'ai précédemment détaillé càd copier le colonne I de l'onglet 02/09/19 vers le colonne E de l'onglet 03/09/19
                      https://mon-partage.fr/f/pfLKm5K0/

                      0
                      1. Bonjour,

                        Désolé, je n'avais pas envoyé le bon fichier.
                        https://mon-partage.fr/f/Q7oPizNx/

                        Private Sub CommandButton1_Click()
                            Dim f1 As Worksheet, f2 As Worksheet, f3 As Worksheet
                            Dim DerLig_f2 As Long
                            Application.ScreenUpdating = False
                            Set f1 = Sheets("MODELE")
                            Set f3 = Sheets(4)
                            'copie feuille modele - place la copie en 3eme poistion et la renomme avec la date
                            f1.Copy Before:=Sheets(3)
                            Set f2 = Sheets("MODELE (2)")
                            f2.Name = Day(ladate) & "-" & Month(ladate) & "-" & Year(ladate) - 2000
                            f2.Range("T1:X1").FormulaR1C1 = ladate
                            'si la case feuille vierge n'est pas cochée, boucle sur les lignes et copie données feuille précédente
                            DerLig_f2 = f2.[A2].End(xlDown).Row
                            If Me.vierge.Value = False Then
                                f2.Range("E3:E" & DerLig_f2).Value = f3.Range("I3:I" & DerLig_f2).Value
                                f2.Range("D3:D" & DerLig_f2).Value = f3.Range("D3:D" & DerLig_f2).Value
                                f2.Range("J3:J" & DerLig_f2).Value = f3.Range("J3:J" & DerLig_f2).Value
                            End If
                            f2.Shapes("CommandButton1").Delete
                            Unload UserForm2
                            Set f1 = Nothing
                            Set f2 = Nothing
                            Set f3 = Nothing
                        End Sub


                        Dans la nouvelle feuille, j'ai supprimer les données de la colonne I (qui sont maintenant en E)

                        dlt
                        0
                        1. Bonjour,
                          merci de votre réponse
                          mais ça donne le même résultat: la copie des fausses compteurs
                          le lien de mon essai
                          https://mon-partage.fr/f/7ZVhvoGP/
                          bien cordialement
                          0
                          1. Désolé, mais ce n'est pas le dernier fichier que j'ai déposé dernièrement (voir post 11).
                            0