Userform avec données externes fichier fermé (ADO)

pmfontaine

XLDnaute Occasionnel
Bonjour,
Je cherche le code pour lié un userform avec une base de données externe (fichier excel qui reste fermé)
Sur http://boisgontierjacques.free.fr/pages_site/ado.htm#CopyFrom j'ai trouvé des pistes avec ADO, mais je ne suis pas arrivé à les utiliser.
Je précise que les combobox sont liés (Grasse à ce forum et en particulier à Dranreb)

Sur le fichier joint FICHIER_DESTINATION.xlsm je souhaiterais que la table TabEspGlo qui est sur la page SOURCE soit sur un autre fichier BD_SOURCE.xlsx qui sera dans le même dossier et qui restera fermé grasse à ADO si j'ai bien compris le site de boisgontier Jacques.
(NB : La table TabEspGlo comporte plus de 220 000 lignes)
Merci d'avance pour votre aide
Patrick
 

Pièces jointes

  • FICHIER_DESTINATION.xlsm
    320.6 KB · Affichages: 43
  • BD_SOURCE.xlsx
    8.7 MB · Affichages: 74

Dranreb

XLDnaute Barbatruc
VB:
Private Sub CBnRajoutEspece_Click()
Dim TVL(1 To 1, 1 To 3), LCou As Long
TVL(1, 1) = CBxAjouNomVerna.Text
TVL(1, 2) = CBxAjouNomLatin.Text
TVL(1, 3) = CDbl(Me.CBxAjouCD_NOM.Text)
LCou = Ajt.PlgTablo.Rows.Count
Ajt.PlgTablo.Rows(LCou).Copy
Ajt.PlgTablo.Rows(LCou).Insert xlShiftDown
LCou = LCou + 1
Ajt.PlgTablo.Rows(LCou).Value = TVL
Ajt.Actualiser
Ajt.Nettoyer
End Sub
Cette procédure ne serait sans doute pas de trop non plus :
VB:
Private Sub Ajt_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long)
CBnRajoutEspece.Enabled = Complet And NbrLgn = 0
End Sub

Aussi ces deux procédures :
VB:
Private Sub CBxAjouOrdre_Change()
CBxAjouNomVerna.Enabled = CBxAjouOrdre.MatchFound
CBxAjouNomLatin.Enabled = CBxAjouOrdre.MatchFound
CBxAjouCD_NOM.Enabled = CBxAjouOrdre.MatchFound
If CBxAjouOrdre.MatchFound Then
   Ajt.Actualiser NouvellePlage:=FEspèces1.[C2:E2].Offset(, 4 * CBxAjouOrdre.ListIndex), NbCol:=True
Else
   Ajt.Nettoyer: End If
End Sub

Private Sub BTnNettoyer_Click()
Me.CBxAjouOrdre = "" ' va provoquer CBxAjouOrdre_Change qui devrait tout effacer grâce au Ajt.Nettoyer
CBxAjouOrdre.SetFocus
End Sub
 
Dernière édition:

pmfontaine

XLDnaute Occasionnel
Bonjour,
Dranreb, votre code met les données sectionnées sur la feuille "SOURCE" à la suite de la famille choisie. Ce n'est pas mon objectif.
Mon but et de rajouter les données sur la feuille "DESTINATION" dans le tableau "TabEspèces"

La procédure que vous me conseillez de rajouter, désactive le bouton CBnRajoutEspece, même après avoir sélectionné le nom vernaculaire ou latin.
 

Dranreb

XLDnaute Barbatruc
Ah ce n'est pas une mise à jour de la base espèces multi-ordres ?
j'ai peut être tout compris de travers alors !
Mais dans ce cas, si la base espèces ne change jamais, pourquoi Ajt.Actualiser à la fin de CBnRajoutEspece_Click ?
Il serait possible d'utiliser plusieurs ComboBoxLiées, un pour la liste à mettre à jour et un autre pour consulter la base espèces.
Mais pas sûr que l'accroissement de confort qui en résulterait justifierait celui de la complexité de la programmation.
Je pourrais néanmoins étudier ça si ça vous intéresse…
Effectivement le CBnRajoutEspece ne devrait être désactivé que si l'espèce est déjà dans la liste destinatrice. Où alors qu'il devienne "Supprimer" ?
 
Dernière édition:

pmfontaine

XLDnaute Occasionnel
Merci Dranreb pour votre réponse rapide.
Merci pour votre proposition d'amélioration du code, mais non merci, je préfère rester avec un code qui m'est accessible.
A quoi sert une formule 1 si on n'est pas capable de la conduire.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi