Ouverture de fichier Excel impossible
Bonjour à toi qui li ce poste,
J'ai un problème avec une macro excel qui teste pour savoir si un fichier excel et ouvert et l'ouvre si il ne l'est pas. Enfin c'est le but ^^
Private Function EstDansCollection(Coln As Object, Item As String) As Boolean
Dim obj As Object
On Error Resume Next
Set obj = Coln(Item)
EstDansCollection = Not obj Is Nothing
End Function
Private Sub CommandButton1_Click()
Dim Reponse
If EstDansCollection(Workbooks, "Analyse Statistique Devis.xlsx") = True Then
MsgBox "Le classeur est déjà ouvert !"
Exit Sub
End If
If EstDansCollection(Workbooks, "Analyse Statistique Devis.xlsx") = False Then
Reponse = MsgBox("Le classeur n'est pas ouvert, voulez-vous l'ouvrir ?", vbInformation + vbYesNo)
If (Reponse = vbNo) Then
Exit Sub
Else
Workbooks.Open Filename:="Q:\Chiffrage\Outils de chiffrage\analyse statistique\" & "Analyse_Statistique_Devis" & ".xlsx"
End If
End If
End SubLa ligne qui pose problème est la dernière :
Workbooks.Open Filename:="Q:\Chiffrage\Outils de chiffrage\analyse statistique\" & "Analyse_Statistique_Devis" & ".xlsx"Un message excel apparait est me dit
"Nous Sommes désolés, mais "Q:\Chiffrage\Outils de chiffrage\analyse statistique\Analyse_Statistique_Devis.xlsx" est introuvable. Peut-être a-t-il été déplacé, renommé ou supprimé ?"
Mais le fichier existe bien avec le bon nom et le bon chemin.
Si quelqu'un peut m'aider
bonjour
tu te compliques la vie. Un simple lien hypertexte (ou la fonction LIENHYPERTEXTE() ) suffit.
Ah oui je sais mais c'est une petite partie d'un code pour exporter des lignes d'un tableau source vers le ficher à ouvrir donc je suis partie sur du VBA.
voila le code de départ que je voudrais modifier pour ne pas avoir a aller chercher le fichier destination à chaque lancement de macro
Sub export()
Dim wbMyWb As Workbook
Dim Nom_Fichier As Variant
Dim Verification As Boolean
Dim MonClasseur As String
'On cherche la derniere ligne avec un numéros de devis valide
x = 14
Numdevis = Cells(x, 1).Value
While Numdevis < 200
x = x - 1
Numdevis = Cells(x, 1).Value
Wend
'On copie de la 2éme ligne à la dernière ligne valide
Sheets("Stat").Activate
Range(Cells(2, 1), Cells(x, 13)).Select
Selection.Copy
'On ouvre le fichier de destination de la copie
Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xls")
If Nom_Fichier <> False Then
Set wbMyWb = Workbooks.Open(Nom_Fichier)
wbMyWb.Activate
End If
'On colle en valeurs la selection copiée à partir de la dernière ligne vide du tableau
Sheets("Devis statistique").Activate
Sheets("Devis statistique").Cells(Rows.Count, 1).End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
nbLignes = Sheets("Devis statistique").Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:M" & nbLignes).Borders(xlEdgeBottom).Color = RGB(0, 0, 0)
'On sauvegarde
wbMyWb.Save
End Subre
alors n'"exporte" pas. Il est d'ailleurs déconseillé d'exporter d'un classeur à un autre.
il suffit de créer des liaisons entre classeurs.
aucune formule, aucun VBA.
aucun besoin d'ouvrir le classeur des données une fois que les liaisons sont établies
mais si le fichier destination et relié à une centaines d'autres fichiers "source", ça vas pas créer des problèmes ?
re
aucune idée, essaye avec 10 puis 20...
mais personne n'a 100 fichiers à exploiter en même temps !
mon avis : ce sont des exports, donc voir le script d'export pour exporter TOUTE la base d'un coup et non des bribes chaque mois.
tu peux aussi voir PowerPivot si les données sont relationnelles
Merci pour vos réponses, j'ai réussie a faire un truc qui marche bien donc je le laisse ici si ça peut aider quelqu'un un jour ^^
Private Function EstDansCollection(Coln As Object, Item As String) As Boolean
Dim obj As Object
On Error Resume Next
Set obj = Coln(Item)
EstDansCollection = Not obj Is Nothing
End Function
Sub export()
Dim wbMyWb As Workbook
Dim Nom_Fichier As Variant
Dim Reponse
Workbooks("Synthèse.xlsm").Activate
'On cherche la derniere ligne avec un numéros de devis valide
x = 14
Numdevis = Cells(x, 1).Value
While Numdevis < 200
x = x - 1
Numdevis = Cells(x, 1).Value
Wend
'On copie de la 2éme ligne à la dernière ligne valide
Sheets("Stat").Activate
Range(Cells(2, 1), Cells(x, 13)).Select
Selection.Copy
'On teste pour savoir si le fichier de destination est ouvert ou fermé
If EstDansCollection(Workbooks, "Analyse Statistique.xlsx") = True Then
MsgBox "Le classeur est déjà ouvert !"
GoTo Coller
Else
'Si non, on l'ouvre (ou pas)
Reponse = MsgBox("Le classeur n'est pas ouvert, voulez-vous l'ouvrir ?", vbInformation + vbYesNo)
If (Reponse = vbNo) Then
Exit Sub
Else
Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xls")
If Nom_Fichier <> False Then
Set wbMyWb = Workbooks.Open(Nom_Fichier)
wbMyWb.Activate
End If
End If
End If
Coller:
'On colle en valeurs la selection copiée à partir de la dernière ligne vide du tableau
Workbooks("Analyse Statistique.xlsx").Activate
Sheets("Statistique").Activate
Sheets("Statistique").Cells(Rows.Count, 1).End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
nbLignes = Sheets("Statistique").Cells(Rows.Count, "A").End(xlUp).Row
Range("A1:M" & nbLignes).Borders(xlEdgeBottom).Color = RGB(0, 0, 0)
'On sauvegarde
Workbooks("Analyse Statistique.xlsx").Save
End SubBonne fin de soirée.
et manger du chocolat !!