Copier les valeurs d'un tableau déjà existant avec condition

JdViRuS a écrit :

OK, mais l'adressage du fichier sur le pc peut affecter le fonctionnement de la macro ?

Car là j'essai d'un autre pc pour essayer avant demain c'est peut être pour cela que ça ne fonctionne pas.

Re,

J'ai oublié de te dire que pour cette macro ... les deux fichiers doivent se trouver dans le même répertoire ...

Bien sûr ... ce détail est modifiable ...

J'essai demain et je te dirai quoi. Merci

JdViRuS a écrit :

J'essai demain et je te dirai quoi. Merci

Merci de me tenir au courant des résultats de tes tests ...

Oui sans faute .

J'ai essayer et ça ne fonctionne pas. J'ai besoin de comprendre le fonctionnement de ta macro.

Tu pourrai la commenté s'il te plait ? (car j'ai plusieurs fichier dans ce cas, et une fois que j'aurai compris et que ça fonctionnera je devrai l'adapter.

Le fichier jour envoi les données dans le fichier récap à chaque fois qu'on ajoute des données ?

A quel moment exactement il exécute ?

Est ce que la copie des données peut s' interrompre si le fichier récap est déjà ouvert ?

Re,

Ci-joint la macro commentée

Sub CopieDonnéesJour()
' Déclaration des quatre variables
Dim wkb1 As Workbook
Dim wkb2 As Workbook
Dim der1 As Long
Dim der2 As Long
' Stopper rafraichissement de l'écran
    Application.ScreenUpdating = False
' Définir le fichier 1 - Jour
    Set wkb1 = ActiveWorkbook
' Définir la dernière ligne du fichier 1 -Jour
    der1 = ActiveSheet.Cells(Application.Rows.Count, "B").End(xlUp).Row
' Si la dernière ligne = 2 sortir de la macro
    If der1 = 2 Then Exit Sub
' Ouvrir le fichier Récap siuté dans le même sous-répertoire que le fichier Jour
    Workbooks.Open Filename:=wkb1.Path & "\PF RECAP.xlsm"
'Définir le fichier 2 - Récap
    Set wkb2 = ActiveWorkbook
'Définir la dernière ligne du fichier 2 - Récap
    der2 = ActiveSheet.Cells(Application.Rows.Count, "B").End(xlUp).Row
' Activer le fichier 2
    wkb1.Activate
' Faire la copie des données
    wkb2.Sheets(1).Range("B" & der2 + 1 & ":H" & der2 + der1 - 2).Value = wkb1.Sheets(1).Range("B3:H" & der1).Value
 ' Activer le fichier 2
    wkb2.Activate
' Sauver et Fermer le fichier 2
    wkb2.Close savechanges:=True
' Ré-Autoriser le rafraichissement de l'écran
   Application.ScreenUpdating = True
End Sub

En espèrant que cea t'aide ...

Merci pour les commentaires sur la macro.

J'essai de comprendre pourquoi je n'ai aucune réaction.

Quand tu fait l'essai, a quel moment exacte la macro s’exécute ?

Quand j'enregistre ? ou quand je ferme la page jour ?

edit : les deux fichiers sont bien dans le même répertoire

Pour que ce soit bien clair :

j'ouvre le fichier jour, j'ajoute des données, puis je ferme et enregistre le fichier jour.

Ensuite pour vérifier si ça a fonctionner, j'ouvre le fichier récap, mais là les données n'y sont pas.

Question, si on ajoute plusieurs lignes, il ne risque pas de copier que la dernière ?

' Si la dernière ligne = 2 sortir de la macro 
   If der1 = 2 Then Exit Sub
' Ouvrir le fichier Récap siuté dans le même sous-répertoire que le fichier Jour
   Workbooks.Open Filename:=wkb1.Path & "\PF RECAP.xlsm"
'Définir le fichier 2 - Récap
   Set wkb2 = ActiveWorkbook
'Définir la dernière ligne du fichier 2 - Récap
   der2 = ActiveSheet.Cells(Application.Rows.Count, "B").End(xlUp).Row
Si la dernière ligne = 2 sortir de la macro

>> Je ne comprend pas cette phrase, est ce pour cela que ça ne fonctionne pas ?

Bonjour,

A ce stade ... il s'agit d'une macro ... standard ...

Donc il faut :

1. Ouvrir le fichier Jour

2. Utiliser les deux touches Alt F8

3. Exécuter la macro ...

Si je fait ça j'ai un code erreur.

En surligné j'ai ceci :

der1 = wkb1.Feuil1.Cells(Application.Rows.Count, "B").End(xlUp).Row

capture

Alors j'ai découvert quelque chose :

j'ai renommer le fichier PF récap en "récap" et depuis, lorsque je me sert du fichier, que j'enregistre et quitte ça ne fonctionne toujours pas mais si je fait Alt+F8 pour activer la macro en manuel ça fonctionne.

Edit : j'ai donc essayer d'inclure ça sur un bouton et ça fonctionne mais du coup pas en auto.

Edit 2 : par contre je remarque qu'avec un bouton, il copie les mêmes lignes à chaque fois.

Il faudrait dans ce cas interdire les doublons en prenant en compte les colonnes B,C et D.

edit 3 :

Ce code

Option Explicit
Public Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If Flag Then Exit Sub
    If Not Application.Intersect(Target, Columns("c")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Application.CountIf(Range("c:c"), Target) > 1 Then
            Flag = True
                MsgBox ("Ce numéro existe déjà!")
                Target.ClearContents
            Flag = False
        End If
    End If
End Sub

empêche bien les doublons mais la macro peut copier passe par dessus .

Re,

Tu as écrit ...

le fichier jour sera remis à zéro chaque jour

Donc ... il n' y aura aucun doublon .... puisque tu feras un archivage ... en fin de journée ...

Oui autant pour moi, je me suis tromper .

Je me suis rendu compte qu'en effet j'avais oublié certaine chose quand à l'utilisation de ce fichier, et en effet le fichier ne sera pas systématiquement remis à zéro chaque jour.

Pense tu avoir une solution pour éviter les doublons ?

Re,

On peut tout faire ... avec Excel ...

Mais le plus embêtant ... c'est d'avancer à tâtons ... parce ce que l'utilisateur, lui même... ne sait ce qu'il veut ...

Une question : A quoi cela sert de conserver dans le fichier Jour ... ce qui a été copié dans le fichier Récap ...???

Au fait ...pour corriger ton commentaire précédent ... "ça ne fonctionne pas ...", deux questions:

1. Est-ce-que tu sais exécuter une macro .... maintenant ... ?

2. Et, la macro fait-elle la copie entre les deux fichiers ...?

Désolé je viens de me rendre compte de sa.

Par contre, je ne comprend toujours pas pourquoi j'arrive à faire fonctionner la macro via un bouton mais qu'elle ne fonctionne pas d'elle même en auto.

Le fait de conserver dans fichier jour d'un côté est en gros pour lister les problèmes du moment.

Dans récap c'est pour avoir un visuel sur la totalité des actions en cours de gestion et ceux déjà réglé.

Tes deux questions je ne comprend pas leurs raisonnement.

Oui je sais exécuter une macro et oui la macro fait la copie entre les deux fichier mais avec un bouton.

Au pire le fait de l'activer avec un bouton ne me dérange pas.

Re,

Que signifie pour toi à propos de la macro ...

elle ne fonctionne pas d'elle même en auto

Peux-tu être plus clair ...???

Si je met un bouton sur lequel j'affecte cette macro ça fonctionne. Mais sans l'activer moi même via un bouton ça ne fonctionne pas de façon automatique, pour que lorsque j'ajoute des données dans le fichier jour, que j'enregistre et je quitte, que la macro s'exécute directement.

J'espère que c'est assez clair.

Mais cela ne me dérange pas (le fait d'inclure un bouton)

Re,

ça ne fonctionne pas de façon automatique, pour que lorsque j'ajoute des données dans le fichier jour, que j'enregistre et je quitte, que la macro s'exécute directement.

Est-ce-que tu fais référence à une macro évènementielle ..???

Si oui, à quel évènement penses-tu ...???

En fait, je pensais que c'était déjà le cas ! Car quand tu m'a donner le premier fichier jour, je n'ai pas vu de bouton alors je pensais que c'était déjà le cas. Car tu m'avais dit que ça s'exécutai des lors que j'aurai enregistré et fermer le fichier jour.


En fait, je pensais que c'était déjà le cas ! Car quand tu m'a donner le premier fichier jour, je n'ai pas vu de bouton alors je pensais que c'était déjà le cas. Car tu m'avais dit que ça s'exécutai des lors que j'aurai enregistré et fermer le fichier jour.

Re,

Si la macro fonctionne correctement ... après tes tests ..

elle peut toujours être stockée dans Private Sub Workbook_BeforeSave()

OK, faut avant que je trouve une solution pour les doublons.

Car la macro copie a l'infini du coup.

Rechercher des sujets similaires à "copier valeurs tableau deja existant condition"