Erreur de copie de données
Résolu
safach
Messages postés
258
Date d'inscription
Statut
Membre
Dernière intervention
-
Frenchie83 Messages postés 2240 Date d'inscription Statut Membre Dernière intervention -
Frenchie83 Messages postés 2240 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Erreur de copie de données
- Copie cachée - Guide
- Supprimer les données de navigation - Guide
- Copie écran samsung - Guide
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
13 réponses
Bonjour,
Que voulez-vous dire par "La copie est altérée"? A quel niveau?
Votre code quelque peu modifié
Cdlt
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
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
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
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.
Je pense que le code est suffisamment simple et limpide pour que vous puissiez le faire vous-même.
Cdlt
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
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/
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/
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.
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.
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/
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/
Bonjour,
Désolé, je n'avais pas envoyé le bon fichier.
https://mon-partage.fr/f/Q7oPizNx/
Dans la nouvelle feuille, j'ai supprimer les données de la colonne I (qui sont maintenant en E)
dlt
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