Erreur d'indice

dodineau

XLDnaute Occasionnel
Bonjour à toutes et tous.
Quand j'exécute ma macro j'obtiens une erreur : "L'indice n'appartient pas à la sélection"

Voici mon début de macro :
VB:
Dim Source As Worksheet
Set Source = Workbooks("Z:\Gestion Temps.xlsm").Worksheets("Planning")

Merci pour votre aide
 
Solution
non ca n'est pas possible
en vba seulement avec excel4macro ou ADO

EXEMPLE AVEC ExecuteExcel4Macro
VB:
Sub récup_une_plage_de_cellules()
    Dim chemin$, fichier$, feuille$, cellule As Range, rang As Range
    chemin = "C:\Users\polux\Desktop"
    fichier = "hhhhhtml.xls"
    feuille = "Feuil1"
    Set rang = Range("E3:F5")
    tablo = (GetVal_on_closed_fich(chemin, fichier, feuille, rang))
    Cells(1, 1).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End Sub
Sub récup_une_seule_valeur()
    Dim chemin$, fichier$, feuille$, cellule As Range, rang As Range
    chemin = "C:\Users\polux\Desktop"
    fichier = "hhhhhtml.xls"
    feuille = "Feuil1"
    Set rang = Range("E3")
    MsgBox GetVal_on_closed_fich(chemin, fichier...

dodineau

XLDnaute Occasionnel
Merci pour ces réponses.
Je pensais qu’il était possible de faire appel à des valeurs de cellules d’un classeur, qu’il soit fermé ou ouvert. Un peu comme les liaisons dans les formules que l’on peut écrire dans excel
 

patricktoulon

XLDnaute Barbatruc
non ca n'est pas possible
en vba seulement avec excel4macro ou ADO

EXEMPLE AVEC ExecuteExcel4Macro
VB:
Sub récup_une_plage_de_cellules()
    Dim chemin$, fichier$, feuille$, cellule As Range, rang As Range
    chemin = "C:\Users\polux\Desktop"
    fichier = "hhhhhtml.xls"
    feuille = "Feuil1"
    Set rang = Range("E3:F5")
    tablo = (GetVal_on_closed_fich(chemin, fichier, feuille, rang))
    Cells(1, 1).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End Sub
Sub récup_une_seule_valeur()
    Dim chemin$, fichier$, feuille$, cellule As Range, rang As Range
    chemin = "C:\Users\polux\Desktop"
    fichier = "hhhhhtml.xls"
    feuille = "Feuil1"
    Set rang = Range("E3")
    MsgBox GetVal_on_closed_fich(chemin, fichier, feuille, rang)
  End Sub


'La fonction retourne un string ou tableau
'1 un string si l'argument "rang" est une seule celluleet donc sa valeur
'2 une variable tableau si rang est une plage de cellules  donc les !! valeurs dans une variable tableau

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

EXEMPLE AVEC ADO
VB:
Sub extractionValeurCelluleClasseurFerme()


    Dim Source As ADODB.Connection

    Dim ADOCommand As ADODB.Command
    Dim Rst As ADODB.Recordset
    Dim Fichier As String, Cellule As String, Feuille As String

    'Adresse de la cellule contenant la donnée à récupérer
    Cellule = "A3"
    'Pour une plage de cellules, utilisez:
    'Cellule = "A4:C10"

    NomFeuille = "essai$"    'n'oubliez pas d'ajouter $ au nom de la feuille.
    'Chemin complet du classeur fermé
    Fichier = ThisWorkbook.Path & "\test2.xlsm"

    Set Source = New ADODB.Connection
    Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"";"
    'Source.CursorLocation = adUseClient
    
    Set Rst = New ADODB.Recordset
    Rst.Open "SELECT * FROM [" & NomFeuille & "A1:A10000] WHERE NOT ISNULL(F1);", Source, adOpenStatic, adLockReadOnly
    If Rst.RecordCount > 0 Then Rst.MoveLast
    Set Rst = Source.Execute("SELECT * FROM [" & NomFeuille & Cellule & "]""")

    Sheets("Feuil1").Range("B5") = Val(Rst("F1")) + 1

    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Sub
 

Discussions similaires

Réponses
24
Affichages
848
Réponses
5
Affichages
165
Réponses
2
Affichages
98