Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb avec méthode open de l'objet _Connection : méthode échouée

2 réponses
Avatar
Alex_P
Bonjour,

J'ai adapté une macro vba qui doit s'exécutée à l'ouverture de mon classeur
Excel. Son but est de charger des valeurs à partir d'un autre classeur pour
les proposer ensuite en liste déroulante.

Ca fonctionne sur mon pc mais lorsque j'ouvre le document à partir d'un
autre pc, j'obtiens le message d'erreur "la méthode 'open' de l'objet
'_Connection' a échoué". Pourtant, j'ai mis exactement les mêmes références
dans l'éditeur VBA sur les 2 pc.

Ci-dessous le code de la macro (positionnée dans worbook open):
Private Sub Workbook_Open()

repertoire = ThisWorkbook.Path & "\"
Dim rsProjets As ADODB.Recordset
Dim rsPhases As ADODB.Recordset
Dim rsDEI As ADODB.Recordset

Set cnn = New ADODB.Connection

cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & repertoire &
"\" & "CRAH 2009 Equipe.xls"

Set rsProjets = cnn.Execute("SELECT Projet FROM Liste_Projets where
Projet<>''")
Sheets("Listes").[A2:A999].ClearContents
Sheets("Listes").[A2].CopyFromRecordset rsProjets

Set rsDEI = cnn.Execute("SELECT DEI FROM Liste_DEI where DEI<>''")
Sheets("Listes").[B2:B999].ClearContents
Sheets("Listes").[B2].CopyFromRecordset rsDEI

Set rsPhases = cnn.Execute("SELECT Phase FROM Liste_Phases where
Phase<>''")
Sheets("Listes").[C2:C99].ClearContents
Sheets("Listes").[C2].CopyFromRecordset rsPhases

End Sub

Je ne vois pas ce qui manque. Si quelqu'un a une idée...

Merci d'avance

2 réponses

Avatar
Youky \(BJ\)
Bonsoir Alex,
ADO n'ai pas installé par défaut, à verifier
Sans ADO je peux te proposer ceci pour alimenter un combobox à 2 colonnes
Bien sur à modifier à ta facon si le PB n'est pas résolut
Youky (BJ)

ComboBox1.Clear
Chemin = "'" & ThisWorkbook.Path & ""
Fichier = "[charpente.xls]"
Onglet = "Tuiles'!"
For k = 6 To 100 'commencer à lire à la ligne 6
ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est
B ainsi de suite
ChampALire2 = "R" & k & "C2"
ComboBox1.AddItem Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet &
ChampALire)
ComboBox1.Column(1, ComboBox1.ListCount - 1) =
Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire2)
If ComboBox1.List(ComboBox1.ListCount - 1) = 0 Then
ComboBox1.RemoveItem (ComboBox1.ListCount - 1)
Exit For
End If
Next

"Alex_P" a écrit dans le message de news:

Bonjour,

J'ai adapté une macro vba qui doit s'exécutée à l'ouverture de mon
classeur
Excel. Son but est de charger des valeurs à partir d'un autre classeur
pour
les proposer ensuite en liste déroulante.

Ca fonctionne sur mon pc mais lorsque j'ouvre le document à partir d'un
autre pc, j'obtiens le message d'erreur "la méthode 'open' de l'objet
'_Connection' a échoué". Pourtant, j'ai mis exactement les mêmes
références
dans l'éditeur VBA sur les 2 pc.

Ci-dessous le code de la macro (positionnée dans worbook open):
Private Sub Workbook_Open()

repertoire = ThisWorkbook.Path & ""
Dim rsProjets As ADODB.Recordset
Dim rsPhases As ADODB.Recordset
Dim rsDEI As ADODB.Recordset

Set cnn = New ADODB.Connection

cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & repertoire &
"" & "CRAH 2009 Equipe.xls"

Set rsProjets = cnn.Execute("SELECT Projet FROM Liste_Projets where
Projet<>''")
Sheets("Listes").[A2:A999].ClearContents
Sheets("Listes").[A2].CopyFromRecordset rsProjets

Set rsDEI = cnn.Execute("SELECT DEI FROM Liste_DEI where DEI<>''")
Sheets("Listes").[B2:B999].ClearContents
Sheets("Listes").[B2].CopyFromRecordset rsDEI

Set rsPhases = cnn.Execute("SELECT Phase FROM Liste_Phases where
Phase<>''")
Sheets("Listes").[C2:C99].ClearContents
Sheets("Listes").[C2].CopyFromRecordset rsPhases

End Sub

Je ne vois pas ce qui manque. Si quelqu'un a une idée...

Merci d'avance


Avatar
Alex_P
Merci de ta réponse Youky

Je vais tester cela cet après-midi. Par contre, je ne sais pas pourquoi ADO
n'est pas installé de la même façon sur les pc, c'est pourtant la même
version de Excel et j'ai ajouté la mêmes références VBA.

"Youky (BJ)" a écrit :

Bonsoir Alex,
ADO n'ai pas installé par défaut, à verifier
Sans ADO je peux te proposer ceci pour alimenter un combobox à 2 colonnes
Bien sur à modifier à ta facon si le PB n'est pas résolut
Youky (BJ)

ComboBox1.Clear
Chemin = "'" & ThisWorkbook.Path & ""
Fichier = "[charpente.xls]"
Onglet = "Tuiles'!"
For k = 6 To 100 'commencer à lire à la ligne 6
ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est
B ainsi de suite
ChampALire2 = "R" & k & "C2"
ComboBox1.AddItem Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet &
ChampALire)
ComboBox1.Column(1, ComboBox1.ListCount - 1) =
Application.ExecuteExcel4Macro(Chemin & Fichier & Onglet & ChampALire2)
If ComboBox1.List(ComboBox1.ListCount - 1) = 0 Then
ComboBox1.RemoveItem (ComboBox1.ListCount - 1)
Exit For
End If
Next

"Alex_P" a écrit dans le message de news:

> Bonjour,
>
> J'ai adapté une macro vba qui doit s'exécutée à l'ouverture de mon
> classeur
> Excel. Son but est de charger des valeurs à partir d'un autre classeur
> pour
> les proposer ensuite en liste déroulante.
>
> Ca fonctionne sur mon pc mais lorsque j'ouvre le document à partir d'un
> autre pc, j'obtiens le message d'erreur "la méthode 'open' de l'objet
> '_Connection' a échoué". Pourtant, j'ai mis exactement les mêmes
> références
> dans l'éditeur VBA sur les 2 pc.
>
> Ci-dessous le code de la macro (positionnée dans worbook open):
> Private Sub Workbook_Open()
>
> repertoire = ThisWorkbook.Path & ""
> Dim rsProjets As ADODB.Recordset
> Dim rsPhases As ADODB.Recordset
> Dim rsDEI As ADODB.Recordset
>
> Set cnn = New ADODB.Connection
>
> cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & repertoire &
> "" & "CRAH 2009 Equipe.xls"
>
> Set rsProjets = cnn.Execute("SELECT Projet FROM Liste_Projets where
> Projet<>''")
> Sheets("Listes").[A2:A999].ClearContents
> Sheets("Listes").[A2].CopyFromRecordset rsProjets
>
> Set rsDEI = cnn.Execute("SELECT DEI FROM Liste_DEI where DEI<>''")
> Sheets("Listes").[B2:B999].ClearContents
> Sheets("Listes").[B2].CopyFromRecordset rsDEI
>
> Set rsPhases = cnn.Execute("SELECT Phase FROM Liste_Phases where
> Phase<>''")
> Sheets("Listes").[C2:C99].ClearContents
> Sheets("Listes").[C2].CopyFromRecordset rsPhases
>
> End Sub
>
> Je ne vois pas ce qui manque. Si quelqu'un a une idée...
>
> Merci d'avance