tout est dans le titre !
je ne vois pas comment c'est possible de gérer les erreurs avec l'utilisation de> ExecuteExcel4Macro
j'utilise depuis longtemps cette fonction pour extraire des données d'un classeur fermé.
au niveau de la fonction, tout est ok, là n'est pas le problème.
mais si par exemple, je met un nom de feuille inexistante ou une adresse incorrecte
ça ne plante jamais sur la fonction !? mais c'est après ceci
Don = ExecuteExcel4Macro(Chaine$ & RS$)
et le plantage intervient lors de la manipulation de cette variable exemple avec 2 vars de type variant
SvgDon = Don
même on error ne réagit pas, c'est plantage !
donc impossible de tester les erreurs !?
Sub test()
Dim chemin$, fichier$, feuille$, rang As Range,v
chemin = "C:\Users\polux\DeskTop"
fichier = "test fichfermée.xlsx"
feuille = "Feuil1"
Set rang = [B3]
'recupe une valeur dans UNE!! cellule
MsgBox GetVal_on_closed_fich(chemin, fichier, feuille, rang)
'recupe une plage de cellules
Set rang = [A1:d3]
tableau = GetVal_on_closed_fich(chemin, fichier, feuille, rang)
For Each v In tableau
MsgBox v
Next
' le tableau restitué a la même dimension que la plage il peut donc être transposé directement
End Sub
Function GetVal_on_closed_fich(ByVal chemin As String, ByVal fichier As String, ByVal feuille As String, rang As Range) As Variant
Dim Rc$, tableau(), lig&, col&
If rang.Cells.Count = 1 Then
Rc = "R" & rang.Row & "C" & rang.Column
GetVal_on_closed_fich = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & feuille & "'!" & Rc)
Else
ReDim tableau(1 To rang.Rows.Count, 1 To rang.Columns.Count)
For Each cel In rang.Cells
lig = cel.Row: col = cel.Column
Rc = "R" & lig & "C" & col
tableau(lig - rang.Row + 1, col - rang.Column + 1) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & feuille & "'!" & Rc)
Next
GetVal_on_closed_fich = tableau
End If
End Function
ben non, justement je n'ai pas ma réponse, tu n'as pas bien lu !?
quand j'ai cette situation, le fait de tester la variable c'est plantage !
exp
Dim MaVar as variant, SvgMaVar as variant
MaVar = ExecuteExcel4Macro
dès l'instant que je manipule MaVar, plantage, exemples:
SvgMaVar = MaVar ou MsgBox MaVar ou Debug.Print MaVar <<< tout ça c'est plantage !
message d'incompatibilité de type (erreur 13)
alors que ça fonctionne très bien s'il n'y a pas cette situation particulière, par exp nom de feuille incorrecte ou inexistante !
à ce moment là, quand je passe le curseur dessus MaVar ça m'affiche "erreur 2023"
ce serait une erreur de référence (nom de feuil absente par exp) mais il est impossible de le tester.
j'arrive à tester l'erreur après par exemple
on error resume next: err.clear
SvgMaVar = MaVar
if err then ... ok !
mais le problème c'est qu'une fois j'ai l'erreur et une autre fois je n'en ai pas !? bizarre ! sur les mêmes fichiers
à savoir que cette fonction boucle sur plusieurs centaines de fichiers excel ! c'est pour une entreprise (toujours pour mon fils)
ces fichiers n'on qu'une seule feuille.
mais j'ai du nouveau !
j'utilise aussi la fonction ci-dessous(ADO), et après moult recherche sur le net j'ai trouvé comment lire le nom des feuilles en rajoutant ceci:
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Cnn
puis For Each T In Cat.Tables
voici cette fonction complète !
Code:
Private Sub LoadNomFeuilClassFerme(PathFich$, F$, TotF)
Set Cnn = CreateObject("ADODB.Connection")
Set Cat = CreateObject("ADOX.Catalog")
If Int(Val(Application.Version)) < 12 Then 'AVEC IMEX=1 2fois plus rapide
Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & PathFich$ & ";Extended Properties=""Excel 8.0;HDR=No,IMEX=1"""
Else
Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathFich$ & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1"""
End If
Set Cat.ActiveConnection = Cnn
TotF = 0
For Each T In Cat.Tables
If Right(T.Name, 1) = "$" Then F$ = Replace(Replace(T.Name, "$", ""), "'", ""): TotF = TotF + 1
Next
Cnn.Close: Set Cat = Nothing: Set Cnn = Nothing
End Sub
avec ça je suis sauvé ! mais ça multiplie le temps d'exécution par 3ou4 !
ça reste tout même plus rapide que d'ouvrir quand il s'agit d'un grand nombre de fichiers !