Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Transfert de données - Deux classeurs - vba

  • Initiateur de la discussion Initiateur de la discussion Celeda
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Celeda

XLDnaute Barbatruc
Bonjour,

Je rencontre quelques soucis avec les formules pour transférer des infos du classeur1-master vers le classeur2-esclave.
C'est le 1 qui met à jour le 2.Je pense que le binzz dans le transfert des données de l'un à l'autre tient aux nombre de lignes importantes et le fait que les deux classeurs soient très importants et surtout qu'il doit y avoir dans les classeurs quelques imperfections qui font que je n'arrive pas à faire matcher correctement les critères et surtout que je perds un temps fou à vérifier quelle donnée a été zappée.

Je m'explique :
dans le classeur1, en fonction du crit1 et du crit2, je reporte le crit5.
c'est celle du classeur1 qui va aller écraser celle du crit5.et mettre à jour le classeur2.
Mais argument à retenir car les deux classeurs n'ont pas été représentés de la même manière:
Si dans le classeur 1, le crit 5 est égal à 0,
et que dans le classeur 2, le crit 5 est égal à 1
on n'écrase rien, on laisse le 1 dans le classeur 2

Si dans le classeur 1, le crit 5 est égal à 0,
et que dans le classeur 2, le crit 5 est égal à 2
on change le 2 par un 1

Si dans le classeur 1, le crit 5 est égal à 1,
et que dans le classeur 2, le crit 5 est égal à 1
on change le 1 par un 2

récapitulons =
0 est égal 1 dans le classeur 2
1 est égal à 2 dans le classeur 2

Je suis donc à la recherche d'un code simple qui puisse faire le travail rapidement et sans erreur. Je ne dis pas que les formules me donnent les erreurs, je pense qu'une certaine lourdeur s'installe à un moment parce que je travaille sur deux classeurs différents parce que je passe par des calculs intermédiaires du type sommeprod et index.
Je vous remercie à l'avance de votre aide et j'espère avoir été claire.
 

Pièces jointes

Re : Transfert de données - Deux classeurs - vba

bonjour Celeda

code à mettre dans classeur master
mis un test sur les noms,si pas besoin tu commentes
une histoire d'if et de si(si,si,si,la vie est belle...)

Sub UnVersDeux()
Dim WbSource As Workbook, WbDest As Workbook
Dim WsDest As Worksheet, Rng As Range, Cel As Range
Application.ScreenUpdating = False
Set WbSource = ThisWorkbook 'classeur du code
Set WbDest = Workbooks("Classeur2-esclave") 'on peut tester si ouvert,si pas ouvert l'ouvrir
Set WsDest = WbDest.Worksheets("Feuil1")

With WbSource.Worksheets("Feuil1")
Set Rng = .Range("E2:E" & .Range("E65536").End(xlUp).Row) 'crit5 classeur source
End With

For Each Cel In Rng
With WsDest
If .Cells(Cel.Row, 1) = Cel.Offset(0, 4) Then 'les noms sont les mêmes
If Cel = 0 And .Cells(Cel.Row, 5) = 2 Then .Cells(Cel.Row, 5) = 1
If Cel = 1 And .Cells(Cel.Row, 5) = 1 Then .Cells(Cel.Row, 5) = 2
End If
End With
Next Cel
Application.ScreenUpdating = True
End Sub

à bientôt
 
Re : Transfert de données - Deux classeurs - vba

pour accélérer les choses surtout avec les sommeprod (oualalalala ca alourdi ce truc)

je désactive les calculs en début de macro et les réactive en fin de macro.

Code:
    Application.EnableEvents = False
   Application.Calculation = xlManual

la macro ici

    Application.Calculation = xlautomatic
    Application.EnableEvents = true

te connaissant tu doies bien avoir quelques macro évènementiels ^^ et sans doute tu connais déjà ces lignes..faut juste ne pas les oublier.


sinon peut être faire en sorte que les formules dans les classeurs soient remplacées par des valeurs (un macro referait les calculs au besoin).
Dans tous les cas faut éviter de garder des formules "actives", surtout des sommepro.


++
 
Re : Transfert de données - Deux classeurs - vba

Bonjour,

Décidément Bebere, tu es comme le coach sur le terrain!!lol😛

Je suis toujours dans le même projet et j'avance doucement....merci de m'aider.

J'ai placé le code dans un module mais cela ne fonctionne pas..
y-a quelque chose qui ne se fait pas...😕 ou bien je fais quelque chose qui ne fonctionne pas ...mais quoi 😱

Merci fifi pour le complément d'info.


Si, si, si, si, la vie est belle et il faut que l'on en profite même si les sommeprod me causent du sou ci, ci ci!😀
 
Re : Transfert de données - Deux classeurs - vba

Salut ...

Autre proposition (macro dans "maître" et plages à adapter; avec ce que j'ai compris)
Code:
Sub PlusUn()
  Dim dest1 As Range, dest2 As Range, C As Range
  With Workbooks("Classeur2-esclave.xls").Sheets("Feuil1")
    Set dest1 = .Cells(2, 1)
    Set dest2 = .Cells(2, 3)
    Workbooks("Classeur1-master.xls").Sheets("Feuil1").Activate
    [A3:B10].Copy dest1
    [E3:E10].Copy dest2
    For Each C In .[C2:C9]
      If C = 0 Or C = 1 Then C = C + 1
    Next
  End With
End Sub
 
Re : Transfert de données - Deux classeurs - vba

Bonjour,

Revu et corrigé...merci Fo_rum ....mais il y a un petit mais...
elle me recopie tout hors dans le classeur esclave il se trouve qu'il n'y a pas les mêmes correspondances, il lui manque des données :dans le fichier original j'ai une différence de 100 lignes dans l'esclave; je ne veux pas lui ajouter ces 100 lignes, je veux qu'il reste comme il est et juste modifier ce fameux crit5 quand il trouve crit1 et crit2 identiques dans les deux classeurs :
c'est pourquoi je souhaitais que la macro ne s'occupe que des données du maitre et ajuste en fonction, l'esclave. Si la macro ne trouve pas la correspondance dans l'esclave des crit1 et crit2 et bien elle passe son tour.
Je suis désolée si je ne suis pas vraiment explicit; pourriez-vous regarder de nouveau,svp.
Merci.
 
Re : Transfert de données - Deux classeurs - vba

Re ...

peut-être ainsi (macro simpliste)
Code:
Sub PlusUn()
  Dim Cel1 As Range, Cel2 As Range, C As Variant
  With Workbooks("Classeur2-esclave.xls").Sheets("Feuil1")
    Workbooks("Classeur1-master.xls").Sheets("Feuil1").Activate
    For Each Cel1 In Range("A2:A" & [A65000].End(xlUp).Row)
      If Cel1 <> "" Then 's'il y a des vides, pour ne pas retarder la recherche
      For Each Cel2 In .Range("A2:A" & .[A65000].End(xlUp).Row)
        If Cel2.Value & Cel2.Offset(, 1) = Cel1.Value & Cel1.Offset(, 1) Then
          C = Cel1.Offset(, 4)
          If C <> "" And (C = 0 Or C = 1) Then Cel2.Offset(, 2) = C + 1
        End If
      Next
      End If
    Next
  End With
End Sub
 
Re : Transfert de données - Deux classeurs - vba

Bonjour,

Bebere, je n'avais pas vu ton fichier joint ???? zarbi!!
la macro fonctionne bien ==> je n'arrive pas à changer la destination
je souhaite que cela aille écraser dans le classeur esclave la colonne c;
j'ai bidouillé dans les
If Cel = 0 And .Cells(Cel.Row, 3) > 0 Then .Cells(Cel.Row, 5) = 1
If Cel = 1 And .Cells(Cel.Row, 3) >= 1 Then .Cells(Cel.Row, 5) = 2
mais je n'arrive pas....😱

Fo_rum : je vais tester demain sur excel 2000 car ici sur 2007, elle ne
fonctionne pas.

Je vous remercie tous les deux.🙂
 
Re : Transfert de données - Deux classeurs - vba

bonsoir
moi aussi dur de la compréhension,mes excuses gente dame

Sub UnVersDeux()
Dim WbSource As Workbook, WbDest As Workbook, Chemin As String
Dim WsDest As Worksheet, Rng As Range, Cel As Range

With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Chemin = ThisWorkbook.Path 'suppose que les 2 classeurs sont dans le même dossier
Set WbSource = ThisWorkbook 'classeur du code

If IsWorkbookOpen("Classeur2-esclave.xls") = True Then
Set WbDest = Workbooks("Classeur2-esclave.xls") 'on peut tester si ouvert,si pas ouvert l'ouvrir
Else
Workbooks.Open Filename:=Chemin & "\" & "Classeur2-esclave.xls"
Set WbDest = ActiveWorkbook
End If

Set WsDest = WbDest.Worksheets("Feuil1")

With WbSource.Worksheets("Feuil1")
Set Rng = .Range("A2:A" & .Range("A65536").End(xlUp).Row) 'crit5 classeur source
End With

For Each Cel In Rng
With WsDest
For l = 2 To .Range("A65536").End(xlUp).Row
If Cel = .Cells(l, 1) Then
If Cel.Offset(0, 1) = .Cells(l, 2) Then
Cel.Offset(0, 2) = .Cells(l, 3)
Exit For
End If
End If
Next l
End With
Next Cel

With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With

End Sub

à bientôt
 
Re : Transfert de données - Deux classeurs - vba

bonjour Celeda
Le code de Fo_rum fonctionne sous excel2003
et comme lui a bien compris,j'ai repris une partie de son code

Sub UnVersDeux()
Dim WbSource As Workbook, WbDest As Workbook, Chemin As String
Dim WsDest As Worksheet, Rng As Range, Cel As Range, L As Long: C As Integer

With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Chemin = ThisWorkbook.Path 'suppose que les 2 classeurs sont dans le même dossier
Set WbSource = ThisWorkbook 'classeur du code

If IsWorkbookOpen("Classeur2-esclave.xls") = True Then
Set WbDest = Workbooks("Classeur2-esclave.xls") 'on peut tester si ouvert,si pas ouvert l'ouvrir
Else
Workbooks.Open Filename:=Chemin & "\" & "Classeur2-esclave.xls"
Set WbDest = ActiveWorkbook
End If

Set WsDest = WbDest.Worksheets("Feuil1")

With WbSource.Worksheets("Feuil1")
Set Rng = .Range("A2:A" & .Range("A65536").End(xlUp).Row) 'crit5 classeur source
End With

For Each Cel In Rng
With WsDest
For L = 2 To .Range("A65536").End(xlUp).Row
If Cel = .Cells(L, 1) Then
If Cel.Offset(0, 1) = .Cells(L, 2) Then
C = Cel.Offset(0, 4)
If C <> "" And (C = 0 Or C = 1) Then .Cells(L, 3) = C + 1
End If
End If
Next L
End With
Next Cel

With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With

End Sub

à bientôt
 
Re : Transfert de données - Deux classeurs - vba

Bonsoir,

Je suis confuse de vous donner tous ces soucis...😱

J'ai essayé les nouveaux codes : voici ce qu'il me dit :
instruction incorrecte à l'exterieur d'un bloc de type ?????

J'utilise excel 2000.

Merci pour vos aides.
 
Re : Transfert de données - Deux classeurs - vba

Bonjour Celeda
regarde cette ligne
Dim WsDest As Worksheet, Rng As Range, Cel As Range, L As Long, C As Integer
il y a un : avant C as integer
à bientôt
 
Re : Transfert de données - Deux classeurs - vba

Bonjour,

Il paraît que plus c'est long et plus c'est bon...lol alors on continue!!
Merci Bebere de t'occuper ainsi de moi.
J'aurai du le voir mais quand on a la tête dans le guidon....bon maintenant
elle me surligne en jaune :

If C <> "" And (C = 0 Or C = 1) Then

???

Merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
233
Réponses
5
Affichages
64
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
74
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…