Aide connection fichier fermé
Bonjour le forum,
J'ai une macro qui pour mettre à jour mon classeur ouvre un autre classeur, je sais qu'il existe le moyen de le faire sans ouvrir le classeur et j'aurai donc besoin de vos connaissances afin de m' aider .
Voici mon code:
Sub Importer()
Dim Wb As Workbook
Dim iRowPL%, iRowRens%, iRowRéc%, iRowS%, iRowBDD%, iRowVSA%, iRowBDD2%, iRowS2%, iRowVSA2%, iRowPL2%, IrowRens2%, IrowRéc2%
Dim Chemin As String
'On test le réseau
If Range("B2").Value = "Groupe 1" Then
Chemin = "C:\Users\benoi\Desktop\Groupe 1\Mon Planning.xlsm"
ElseIf Range("B2").Value = "Groupe 2" Then
Chemin = "C:\Users\benoi\Desktop\Groupe 2\Mon Planning.xlsm"
ElseIf Range("B2").Value = "Groupe 3" Then
Chemin = "C:\Users\benoi\Desktop\Groupe 3\Mon Planning.xlsm"
End If
If Len(Dir(Chemin)) = 0 Then
'Si pas de réseau
MsgBox "Causes: " & vbLf & vbLf & "*Problème de réseau " & vbLf & "*Le fichier n'est plus à son emplacement ", vbExclamation, "Mise à jour impossible"
Else
Application.ScreenUpdating = False
Sheets("PlanningOPS").Unprotect
'On test si le classeur est ouvert
For Each Wb In Workbooks
'Si le classeur est ouvert
If Wb.Name = "Mon Planning.xlsm" Then ' Respectes Minuscules/Majuscules
With Wb
iRowPL = .Sheets("Planning").Cells(Rows.Count, 50).End(xlUp).Row
iRowRens = .Sheets("Renseignement").Cells(Rows.Count, 2).End(xlUp).Row
iRowRéc = .Sheets("Récap").Cells(Rows.Count, 2).End(xlUp).Row
iRowS = .Sheets("SAVE").Cells(Rows.Count, 2).End(xlUp).Row
iRowBDD = .Sheets("BDD").Cells(Rows.Count, 2).End(xlUp).Row
iRowVSA = .Sheets("VSA").Cells(Rows.Count, 2).End(xlUp).Row
End With
With Workbooks("PlanningOPS5.xlsm")
iRowPL2 = .Sheets("PlanningOPS").Cells(Rows.Count, 50).End(xlUp).Row
IrowRens2 = .Sheets("RenseignementOPS").Cells(Rows.Count, 2).End(xlUp).Row
IrowRéc2 = .Sheets("RécapOPS").Cells(Rows.Count, 2).End(xlUp).Row
iRowS2 = .Sheets("SAVEOPS").Cells(Rows.Count, 2).End(xlUp).Row
iRowBDD2 = .Sheets("BDDOPS").Cells(Rows.Count, 2).End(xlUp).Row
iRowVSA2 = .Sheets("VSAOPS").Cells(Rows.Count, 2).End(xlUp).Row
.Sheets("PlanningOPS").Range("D9:D" & iRowPL2 + 4).EntireRow.Delete
.Sheets("PlanningOPS").Range("D9:D" & iRowPL).Value = Workbooks("Mon Planning.xlsm").Sheets("Planning").Range("D9:D" & iRowPL).Value
.Sheets("PlanningOPS").Range("AX9:AX" & iRowPL).Value = Workbooks("Mon Planning.xlsm").Sheets("Planning").Range("AX9:AX" & iRowPL).Value
.Sheets("PlanningOPS").Range("D9:D" & iRowPL).Borders.Weight = xlThin
.Sheets("RenseignementOPS").Range("C4:N" & iRowRens - 1).Value = Workbooks("Mon Planning.xlsm").Sheets("Renseignement").Range("B5:M" & iRowRens).Value
.Sheets("RenseignementOPS").Range("C4:N" & iRowRens - 1).Borders.Weight = xlThin
.Sheets("RécapOPS").Range("C7:O" & iRowRéc).Value = Workbooks("Mon Planning.xlsm").Sheets("Récap").Range("B7:N" & iRowRéc).Value
.Sheets("RécapOPS").Range("C7:O" & iRowRéc).Borders.Weight = xlThin
.Sheets("SAVEOPS").Range("A3:A" & iRowS2).EntireRow.Delete
.Sheets("SAVEOPS").Range("B2:E2").ClearContents
.Sheets("SAVEOPS").Range("B2:E" & iRowS).Value = Workbooks("Mon Planning.xlsm").Sheets("SAVE").Range("B2:E" & iRowS).Value
.Sheets("BDDOPS").Range("A3:A" & iRowBDD2).EntireRow.Delete
.Sheets("BDDOPS").Range("A2:D2,F2,J2,O2").ClearContents
.Sheets("BDDOPS").Range("A2:D" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("A2:D" & iRowBDD).Value
.Sheets("BDDOPS").Range("F2:F" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("F2:F" & iRowBDD).Value
.Sheets("BDDOPS").Range("J2:J" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("J2:J" & iRowBDD).Value
.Sheets("BDDOPS").Range("O2:O" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("O2:O" & iRowBDD).Value
'Formule Planning
With .Sheets("PlanningOPS")
.Range("E8:AW8").AutoFill .Range("E8:AW" & iRowPL)
.Range("B8:C8").AutoFill .Range("B8:C" & iRowPL)
.Range("A8:A50").Interior.Color = RGB(89, 89, 89)
.Range("AX8:AY50").Interior.Color = RGB(89, 89, 89)
End With
'Formule Récap
With .Sheets("RécapOPS")
.Range("D6:O6").AutoFill .Range("D6:O" & iRowRéc)
End With
End With
Exit For
End If
Next Wb
'Si le fichier est fermé
If Wb Is Nothing Then
Set Wb = Workbooks.Open(Chemin)
With Wb
iRowPL = .Sheets("Planning").Cells(Rows.Count, 50).End(xlUp).Row
iRowRens = .Sheets("Renseignement").Cells(Rows.Count, 2).End(xlUp).Row
iRowRéc = .Sheets("Récap").Cells(Rows.Count, 2).End(xlUp).Row
iRowS = .Sheets("SAVE").Cells(Rows.Count, 2).End(xlUp).Row
iRowBDD = .Sheets("BDD").Cells(Rows.Count, 2).End(xlUp).Row
iRowVSA = .Sheets("VSA").Cells(Rows.Count, 2).End(xlUp).Row
End With
With Workbooks("PlanningOPS5.xlsm")
iRowPL2 = .Sheets("PlanningOPS").Cells(Rows.Count, 50).End(xlUp).Row
IrowRens2 = .Sheets("RenseignementOPS").Cells(Rows.Count, 2).End(xlUp).Row
IrowRéc2 = .Sheets("RécapOPS").Cells(Rows.Count, 2).End(xlUp).Row
iRowS2 = .Sheets("SAVEOPS").Cells(Rows.Count, 2).End(xlUp).Row
iRowBDD2 = .Sheets("BDDOPS").Cells(Rows.Count, 2).End(xlUp).Row
iRowVSA2 = .Sheets("VSAOPS").Cells(Rows.Count, 2).End(xlUp).Row
.Sheets("PlanningOPS").Range("D9:D" & iRowPL2 + 4).EntireRow.Delete
.Sheets("PlanningOPS").Range("D9:D" & iRowPL).Value = Workbooks("Mon Planning.xlsm").Sheets("Planning").Range("D9:D" & iRowPL).Value
.Sheets("PlanningOPS").Range("AX9:AX" & iRowPL).Value = Workbooks("Mon Planning.xlsm").Sheets("Planning").Range("AX9:AX" & iRowPL).Value
.Sheets("PlanningOPS").Range("D9:D" & iRowPL).Borders.Weight = xlThin
.Sheets("RenseignementOPS").Range("C4:N" & iRowRens - 1).Value = Workbooks("Mon Planning.xlsm").Sheets("Renseignement").Range("B5:M" & iRowRens).Value
.Sheets("RenseignementOPS").Range("C4:N" & iRowRens - 1).Borders.Weight = xlThin
.Sheets("RécapOPS").Range("C7:O" & iRowRéc).Value = Workbooks("Mon Planning.xlsm").Sheets("Récap").Range("B7:N" & iRowRéc).Value
.Sheets("RécapOPS").Range("C7:O" & iRowRéc).Borders.Weight = xlThin
.Sheets("SAVEOPS").Range("A3:A" & iRowS2).EntireRow.Delete
.Sheets("SAVEOPS").Range("B2:E2").ClearContents
.Sheets("SAVEOPS").Range("B2:E" & iRowS).Value = Workbooks("Mon Planning.xlsm").Sheets("SAVE").Range("B2:E" & iRowS).Value
.Sheets("BDDOPS").Range("A3:A" & iRowBDD2).EntireRow.Delete
.Sheets("BDDOPS").Range("A2:D2,F2,J2,O2").ClearContents
.Sheets("BDDOPS").Range("A2:D" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("A2:D" & iRowBDD).Value
.Sheets("BDDOPS").Range("F2:F" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("F2:F" & iRowBDD).Value
.Sheets("BDDOPS").Range("J2:J" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("J2:J" & iRowBDD).Value
.Sheets("BDDOPS").Range("O2:O" & iRowBDD).Value = Workbooks("Mon Planning.xlsm").Sheets("BDD").Range("O2:O" & iRowBDD).Value
'Formule Planning
With .Sheets("PlanningOPS")
.Range("E8:AW8").AutoFill .Range("E8:AW" & iRowPL)
.Range("B8:C8").AutoFill .Range("B8:C" & iRowPL)
.Range("A8:A50").Interior.Color = RGB(89, 89, 89)
.Range("AX8:AY50").Interior.Color = RGB(89, 89, 89)
End With
'Formule Récap
With .Sheets("RécapOPS")
.Range("D6:O6").AutoFill .Range("D6:O" & iRowRéc)
End With
End With
Wb.Close False
End If
Call Totaux
Call CouleurTotaux
Sheets("PlanningOPS").Protect
Application.ScreenUpdating = True
MsgBox "Mises à jour effectuées"
End If
End Sub
Bonjour
Si tu ne joins pas ton fichier à mettre à jour et ton fichier source, on ne peut faire aucun test.
Alors....
Bye !
Bonjour,
je sais qu'il existe le moyen de le faire sans ouvrir le classeur
Si tu sais... !
Je vais te dire : si j'ai à mettre à jour des données en utilisant un autre classeur, je l'ouvre, je mets à jour, je referme ! parce que c'est le moyen le plus simple d'opérer...
Cordialement.
Bonjour gmb, bonjour MFerrand,
gmb a écrit :Si tu ne joins pas ton fichier à mettre à jour et ton fichier source, on ne peut faire aucun test.
Mon fichier contient des données personnelles et faire une version sans serait trop long.
MFerrand a écrit :Je vais te dire : si j'ai à mettre à jour des données en utilisant un autre classeur, je l'ouvre, je mets à jour, je referme ! parce que c'est le moyen le plus simple d'opérer...
C'est ce que j'ai fais mais sur une des mises à jour je dois ouvrir 3 classeurs. Je voulais donc voir si c'était plus simple de le faire sans les ouvrir. Mais si tu me dis que c'est mieux comme ça je te crois.
Bonjour MFERRAND
Benoist28200 a écrit :Mon fichier contient des données personnelles et faire une version sans serait trop long.
Alors, je ne vais pas perdre mon temps à essayer de voir ce que fais ta macro.
Il te faudra appliquer l'efficace méthode de MFERRAND.
Bye !
gmb a écrit :Alors, je ne vais pas perdre mon temps à essayer de voir ce que fais ta macro.
Je suis désolé de t'avoir fais perdre ton temps, bonne continuation.
hello world !
facile !
tu as un classeur FOS (Fichier d'Origine en Saisie) et un fichier FEX (Fichier d'Exploitation qui doit lire FOS.
dans FEX, crée un onglet MIR
en A1 de MIR, tu tapes =
puis tu vas dans FOS, et tu cliques dans A1
dans FEX onglet MIR tu obtiens un lien tout simple vers FOS
étend cette mini formule vers la droite et vers la gauche
l'onglet MIR est devenu le MIRoir de FOS. Il est en permanence à jour même si FOS est fermé
Re jmd !
Je te suis à la trace !
Je n'empêche personne d'essayer, il y en a qui s'en accomodent...
Il y avait bien des macros Excel 4 pouvant opérer sans ouvrir le classeur (mais je ne dispose pas d'une doc. suffisante sur le sujet...)
Je privilégie toujours VBA pour éviter de créer des liaisons, un seul classeur pour piloter l'ensemble et pouvant en gérer une multitude...
salut MFerrand
pourquoi une allergie extrêmement profonde à la création de liaisons entre classeurs ?
les liaisons MIR c'est ultra simple, modifiable par un enfant de 10 ans, et ultra fiable.
ça résiste aux mauvais traitements : changement de Windows, sur MAc, sur OOO...
aucune compétence particulière n'est requise, ni en informatique, ni en Excel ni en VBA. 3 clics et ça fonctionne.
inconvénient : le responsable informatique perd son job
Si ce n'est pas irritant ! Que te faut-il ?
re à toi
ben... que dire s'ils mettent sur le forum des fichiers avec une macro qui tente de lire un second fichier non joint
c'est pareil
rétablir une liaison prends au pire quelques secondes, même si le fichier a changé de place. Et c'est à la portée de n'importe qui, sans aucune formation.
par contre s'il y a une macro...
Bonjour jmd, bonjour MFerrand,
Y a t'il moyen de récupérer le numéro de la derniere ligne d'une feuille d'un classeur fermé sans l'ouvrir?
re
oui,
joins ton classeur qui sera fermé