mon classeur cible comporte le meme nombre d'onglets avec le meme nom de fe=
uille que le classeur source.
le but recherch=E9 est de mettre =E0 jour ma cible en fonction de ma source=
.
vous me direz qu'avec un copier coller c=E0 serait simple or je ne veux cop=
ier que ma derni=E8re ligne de ma source vers ma cible ( sur le meme onglet=
) seulement si la date de ma source est differente de ma cible.
exemple=20
classeur cible
donnees jusqu'en ligne 25
en A25 j'ai la date Aout 2012
sur mon source j'ai des donnees jusqu'en ligne 211
en A 212 j'ai la date Sept 2012
Dans ce cas, il va copier la ligne 212 et va la coller valeur en A26 de ma =
cible
si dans le cas ou les dates etaient identiques alors petit message genre "a=
ucune donnees =E0 inserer"
...mais l'entretien de ton fichier risque d'être plus facile et cette approche est plus flexible, le cas échéant :
+1 adepte de ce procédé
Sans oublier de remplacer
Application.EnableEvents = False
Par
Application.EnableEvents = true
en fin de macro
-- Salutations JJ
"MichD" a écrit dans le message de news: k3cb11$tc0$
Il serait sage de modifier la ligne de code suivante If Rst.EOF = False Then
par celle-ci :
'Si au moins un enregistrement If Rst.EOF = False And Rst.RecordCount >= 0 Then
IMPORTANT : Il est préférable d'avoir une ligne de données en dessous de la ligne d'étiquette des feuilles du fichier de destination. Sinon, la procédure risque de confondre le type de données transféré et enregistrer les données au format texte.
Si tu utilises ce qui suit, la procédure prend quelques millisecondes de plus à s'exécuter, mais l'entretien de ton fichier risque d'être plus facile et cette approche est plus flexible, le cas échéant :
Quand tu ouvres le fichier de cette manière : Set WkCible = GetObject(ThisWorkbook.Path & "Ado_Feuille_Destination.xlsm")
L'interface de la feuille de calcul est masquée et l'usager ne se rend pas compte qu'un fichier s'ouvre...
'---------------------------------------------------- Sub test() Dim WkSource As Workbook Dim WkCible As Workbook Dim Sh As Worksheet Dim Nom As String, ValeurSource As Range Dim ValeurCible As Range
Application.EnableEvents = False Set WkSource = ThisWorkbook 'Où tu as copié la procédure 'En supposant que le classeur cible est source sont 'dans le même répertoire. Set WkCible = GetObject(ThisWorkbook.Path & "Ado_Feuille_Destination.xlsm")
For Each Sh In WkSource.Worksheets Nom = Sh.Name Set ValeurSource = Sh.Range("A65536").End(xlUp) With WkCible.Worksheets(Nom) Set ValeurCible = .Range("A65536").End(xlUp) If ValeurCible <> ValeurSource Then ValeurSource.EntireRow.Copy ValeurCible.Offset(1) Else MsgBox "Pour la feuille source """ & Sh.Name & """ " & _ "il n'y a aucune ligne à copier." End If End With Next Workbooks(WkCible).Close True Application.EnableEvents = False End Sub '----------------------------------------------------
...mais l'entretien de ton fichier risque d'être plus facile et cette approche est plus flexible, le cas
échéant :
+1 adepte de ce procédé
Sans oublier de remplacer
Application.EnableEvents = False
Par
Application.EnableEvents = true
en fin de macro
--
Salutations
JJ
"MichD" <michdenis@hotmail.com> a écrit dans le message de news: k3cb11$tc0$1@speranza.aioe.org...
Il serait sage de modifier la ligne de code suivante
If Rst.EOF = False Then
par celle-ci :
'Si au moins un enregistrement
If Rst.EOF = False And Rst.RecordCount >= 0 Then
IMPORTANT : Il est préférable d'avoir une ligne de données en dessous
de la ligne d'étiquette des feuilles du fichier de destination.
Sinon, la procédure risque de confondre le type de données
transféré et enregistrer les données au format texte.
Si tu utilises ce qui suit, la procédure prend quelques millisecondes de plus
à s'exécuter, mais l'entretien de ton fichier risque d'être plus facile et cette
approche est plus flexible, le cas échéant :
Quand tu ouvres le fichier de cette manière :
Set WkCible = GetObject(ThisWorkbook.Path & "Ado_Feuille_Destination.xlsm")
L'interface de la feuille de calcul est masquée et l'usager ne se rend pas
compte qu'un fichier s'ouvre...
'----------------------------------------------------
Sub test()
Dim WkSource As Workbook
Dim WkCible As Workbook
Dim Sh As Worksheet
Dim Nom As String, ValeurSource As Range
Dim ValeurCible As Range
Application.EnableEvents = False
Set WkSource = ThisWorkbook 'Où tu as copié la procédure
'En supposant que le classeur cible est source sont
'dans le même répertoire.
Set WkCible = GetObject(ThisWorkbook.Path & "Ado_Feuille_Destination.xlsm")
For Each Sh In WkSource.Worksheets
Nom = Sh.Name
Set ValeurSource = Sh.Range("A65536").End(xlUp)
With WkCible.Worksheets(Nom)
Set ValeurCible = .Range("A65536").End(xlUp)
If ValeurCible <> ValeurSource Then
ValeurSource.EntireRow.Copy ValeurCible.Offset(1)
Else
MsgBox "Pour la feuille source """ & Sh.Name & """ " & _
"il n'y a aucune ligne à copier."
End If
End With
Next
Workbooks(WkCible).Close True
Application.EnableEvents = False
End Sub
'----------------------------------------------------
...mais l'entretien de ton fichier risque d'être plus facile et cette approche est plus flexible, le cas échéant :
+1 adepte de ce procédé
Sans oublier de remplacer
Application.EnableEvents = False
Par
Application.EnableEvents = true
en fin de macro
-- Salutations JJ
"MichD" a écrit dans le message de news: k3cb11$tc0$
Il serait sage de modifier la ligne de code suivante If Rst.EOF = False Then
par celle-ci :
'Si au moins un enregistrement If Rst.EOF = False And Rst.RecordCount >= 0 Then
IMPORTANT : Il est préférable d'avoir une ligne de données en dessous de la ligne d'étiquette des feuilles du fichier de destination. Sinon, la procédure risque de confondre le type de données transféré et enregistrer les données au format texte.
Si tu utilises ce qui suit, la procédure prend quelques millisecondes de plus à s'exécuter, mais l'entretien de ton fichier risque d'être plus facile et cette approche est plus flexible, le cas échéant :
Quand tu ouvres le fichier de cette manière : Set WkCible = GetObject(ThisWorkbook.Path & "Ado_Feuille_Destination.xlsm")
L'interface de la feuille de calcul est masquée et l'usager ne se rend pas compte qu'un fichier s'ouvre...
'---------------------------------------------------- Sub test() Dim WkSource As Workbook Dim WkCible As Workbook Dim Sh As Worksheet Dim Nom As String, ValeurSource As Range Dim ValeurCible As Range
Application.EnableEvents = False Set WkSource = ThisWorkbook 'Où tu as copié la procédure 'En supposant que le classeur cible est source sont 'dans le même répertoire. Set WkCible = GetObject(ThisWorkbook.Path & "Ado_Feuille_Destination.xlsm")
For Each Sh In WkSource.Worksheets Nom = Sh.Name Set ValeurSource = Sh.Range("A65536").End(xlUp) With WkCible.Worksheets(Nom) Set ValeurCible = .Range("A65536").End(xlUp) If ValeurCible <> ValeurSource Then ValeurSource.EntireRow.Copy ValeurCible.Offset(1) Else MsgBox "Pour la feuille source """ & Sh.Name & """ " & _ "il n'y a aucune ligne à copier." End If End With Next Workbooks(WkCible).Close True Application.EnableEvents = False End Sub '----------------------------------------------------
Enfin un message que je comprends, mais qui suscite une réponse non évidente! ;-)
MichD --------------------------------------------------------------- "Jacky" a écrit dans le message de groupe de discussion : k3ch55$dk3$
-- Salutations JJ
Enfin un message que je comprends, mais qui suscite une
réponse non évidente! ;-)
MichD
---------------------------------------------------------------
"Jacky" a écrit dans le message de groupe de discussion :
k3ch55$dk3$1@speranza.aioe.org...
Enfin un message que je comprends, mais qui suscite une réponse non évidente! ;-)
MichD --------------------------------------------------------------- "Jacky" a écrit dans le message de groupe de discussion : k3ch55$dk3$
-- Salutations JJ
Jacky
Pour un fois que j'ai faillis me taire ;o)))
-- Salutations JJ
"MichD" a écrit dans le message de news: k3chok$fci$
Enfin un message que je comprends, mais qui suscite une réponse non évidente! ;-)
MichD --------------------------------------------------------------- "Jacky" a écrit dans le message de groupe de discussion : k3ch55$dk3$
-- Salutations JJ
Pour un fois que j'ai faillis me taire
;o)))
--
Salutations
JJ
"MichD" <michdenis@hotmail.com> a écrit dans le message de news: k3chok$fci$1@speranza.aioe.org...
Enfin un message que je comprends, mais qui suscite une
réponse non évidente! ;-)
MichD
---------------------------------------------------------------
"Jacky" a écrit dans le message de groupe de discussion : k3ch55$dk3$1@speranza.aioe.org...
"MichD" a écrit dans le message de news: k3chok$fci$
Enfin un message que je comprends, mais qui suscite une réponse non évidente! ;-)
MichD --------------------------------------------------------------- "Jacky" a écrit dans le message de groupe de discussion : k3ch55$dk3$
-- Salutations JJ
MichD
| Sans oublier de remplacer | > Application.EnableEvents = False | Par | > Application.EnableEvents = true | en fin de macro
Tu as bien raison, vive le copier-coller!
| +1 adepte de ce procédé
Lorsque la situation s'y prête, le traitement avec ADO est très rapide et avantageux si l'opération doit être répétée fréquemment. Elle est cependant plus complexe à mettre en opération...
Un fichier Zip pour illustrer la chose : http://cjoint.com/?BItqaCNmQXE
A ) Dézipper et mettre les 2 fichiers dans le même répertoire B ) Ouvrir le fichier Ado_Feuille_Destination.xlsm, les 2 macros y sont. C ) Il ne reste plus qu'à cliquer sur les boutons!
| Sans oublier de remplacer
| > Application.EnableEvents = False
| Par
| > Application.EnableEvents = true
| en fin de macro
Tu as bien raison, vive le copier-coller!
| +1 adepte de ce procédé
Lorsque la situation s'y prête, le traitement avec ADO est très
rapide et avantageux si l'opération doit être répétée fréquemment.
Elle est cependant plus complexe à mettre en opération...
Un fichier Zip pour illustrer la chose : http://cjoint.com/?BItqaCNmQXE
A ) Dézipper et mettre les 2 fichiers dans le même répertoire
B ) Ouvrir le fichier Ado_Feuille_Destination.xlsm, les 2 macros y sont.
C ) Il ne reste plus qu'à cliquer sur les boutons!
| Sans oublier de remplacer | > Application.EnableEvents = False | Par | > Application.EnableEvents = true | en fin de macro
Tu as bien raison, vive le copier-coller!
| +1 adepte de ce procédé
Lorsque la situation s'y prête, le traitement avec ADO est très rapide et avantageux si l'opération doit être répétée fréquemment. Elle est cependant plus complexe à mettre en opération...
Un fichier Zip pour illustrer la chose : http://cjoint.com/?BItqaCNmQXE
A ) Dézipper et mettre les 2 fichiers dans le même répertoire B ) Ouvrir le fichier Ado_Feuille_Destination.xlsm, les 2 macros y sont. C ) Il ne reste plus qu'à cliquer sur les boutons!