Autres gestion des erreurs avec ExecuteExcel4Macro !?

Roland_M

XLDnaute Barbatruc
Bonsoir tout le monde,

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 !?

merci d'avance.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re

perso je me servait de ca
VB:
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
 

Roland_M

XLDnaute Barbatruc
Bonjour tout le monde, Patrick,

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 !
 
Dernière édition:

Discussions similaires

Réponses
16
Affichages
456

Statistiques des forums

Discussions
312 110
Messages
2 085 388
Membres
102 882
dernier inscrit
Sultan94