IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA - Relations entre tableaux Excel [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql="Select Vet.Nom,Cli.Nom From [Animaux$A1:C120] Ani "

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Une question en ADODB si on travaille sur le fichier en cours, cela prend-il bien les modifications en cours ou faut-il enregistrer le fichier ?

  3. #3
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Sinon un simple dictionnaire des deux tableaux n'aurait pas pu suffire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Option Base 1
    Private Dico_User As New Dictionary
     
    Private Sub TextBox1_Change()
     
    If (Dico_User.Exists(TextBox1.Text)) Then Label1.Caption = Dico_User(TextBox1.Text) Else Label1.Caption = "ID non valide"
     
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim Tabl_User As ListObject, rs As ListRows
    Dim Temp As Variant
    Dim r As Double
     
    Set Tabl_User = Worksheets("Feuil1").ListObjects("Tableau_Test")
    Set rs = Tabl_User.ListRows
     
    For r = 1 To rs.Count
     
        Temp = rs(r).Range.Value
        Dico_User.Add CStr(Temp(1, 1)), Temp(1, 2) & " " & Temp(1, 3)
     
    Next r
     
    Set Tabl_User = Nothing
    Set rs = Nothing
     
    End Sub
    Nom : Capture.PNG
Affichages : 599
Taille : 51,5 Ko

  4. #4
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql="Select Vet.Nom,Cli.Nom From [Animaux$A1:C120] Ani "
    Je n'ai pas réussi mais j'arrive à mes fins avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub NameFinder()
      Dim Cn As ADODB.Connection
      Dim RstC As Object, RstV As Object
      Dim CSql As String, VSql As String, AniID As Integer
        AniID = AnMyRow.Range(1).Value
    'Requête SQL pour retrouver le Nom Clients en fonction des ID.Cli dans la Feuille Animal
        CSql = " Select Cli.Nom From [Animal$] Ani "
        CSql = CSql & " Left Outer Join [Client$] Cli on Ani.IDCli = Cli.ID"
        CSql = CSql & " Where Ani.ID = " & AniID & " "
    'Requête SQL pour retrouver le Nom Vétérinaires en fonction des ID.Vet dans la Feuille Veterinaire
        VSql = " Select Vet.Nom From [Animal$] Ani"
        VSql = VSql & " Left Outer Join [Veterinaire$] Vet on Ani.IDVet = Vet.ID"
        VSql = VSql & " Where Ani.ID = " & AniID & " "
    'Lance les requêtes
      Set Cn = New ADODB.Connection
      With Cn
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
         Set RstC = .Execute(CSql)
         'Ecrit le nom du client dans la cellule XFD2
             Range("XFD2").CopyFromRecordset RstC
         Set RstV = .Execute(VSql)
         'Ecrit le nom du vétérinaire dans la cellule XFD3
             Range("XFD3").CopyFromRecordset RstV
         .Close
      End With
      Set Cn = Nothing
    End Sub
    Et avant ça, il y a ce code, appelé avec un Combobox Change, qui reprend les valeurs du tableau pour remplir le Userform (pour la modification de l'animal)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Private Sub CboModif_Change()
      If CboModif.ListIndex <> -1 Then
        Set AnMyRow = Range("Animaux").ListObject.ListRows(CboModif.ListIndex + 1)
      End If
      AnValuesToControls
     
     
    Sub AnValuesToControls()
      NameFinder
    'Importer les données du tableau "Clients" dans le formulaire
      With AnMyRow   'ListRow
     
        TxtID.Value = .Range(1).Value
        TxtNom.Value = .Range(2).Value
        TxtIDCli.Value = .Range(3).Value
        TxtIDVet.Value = .Range(4).Value
        CboFam.Value = .Range(5).Value
        CboRace.Value = .Range(6).Value
        CboSexe.Value = .Range(7).Value
        TxtInfo.Value = .Range(8).Value
      End With
      With Sheets("Animal")
        CboMaitre.Value = Range("XFD2").Value
        CboVet.Value = Range("XFD3").Value
        Range("XFD2") = ""
        Range("XFD3") = ""
      End With
    End Sub
    Merci beaucoup pour ton aide

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour 78chris,

    oui si le fichier dispose d'un chemin d’accès Windows???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test()
    Dim wb As Workbook
    Set wb = Workbooks.Add
    wb.SaveAs Environ("temp") & "\toto.xlsx"
    With wb.Sheets(1)
        .Range("A1") = "Champ1"
        .Range("A2") = "toto"
    End With
     
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & wb.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
         Set Rst = .Execute("select * from [" & wb.Sheets(1).Name & "$]")
         ThisWorkbook.Sheets(1).Range("A15").CopyFromRecordset Rst   'Ecrit le résultat de la requête dans la cellule A15
        .Close
    End With
    End Sub
    @bonjour Al__22,

    en fait une requête c'est comme un dictionnaire!, c'est moins évident de prime abord mais c'est une collection également et plus rapide!
    Dernière modification par Invité ; 27/08/2018 à 11h55.

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    @dysorthographie

    Je le savais mais je pense surtout à nos petits collègues qui eux pataugent complet quand on commence à leur parler de LINQ, ADODB, etc.

  7. #7
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    RE
    Citation Envoyé par dysorthographie Voir le message
    bonjour 78chris,

    oui si le fichier dispose d'un chemin d’accès Windows???
    Merci mais tu réponds oui à la 1ère ou 2ème question ?

    J'ai remarqué avec d'autres méthodes d’accès que cela accède au fichier enregistré donc si on met en même temps le fichier à jour, les modifs ne sont pas prises si le fichier n'est par enregistré.

    Ce pourquoi je demandais mais je pourrais aussi tester au lieu de t'embêter

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Floyd-44 Voir le message
    Bonjour,
    Je souhaiterai avoir comme en SQL(Si ça peut aider à comprendre ce que je souhaite) un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Select 
    Vet.Nom,
    Cli.Nom
    From Animaux Ani
    Left Outer Join Vétérinaires Vet on Ani.IDVet = Vet.ID 'Création du lien sur ID
    Left Outer Join Clients Cli on Ani.IDCli = Cli.ID 'Création du lien sur ID
    en fait il serait plus judicieux d’attaquer Access ou le type de base concernée et pas faire un import Excel au préalable!

    LINQ c'est du .net pas du VBA.

    @Floyd-44
    joins un fichier Excel , en prenant soin de bidonner les informations confidentiel si il y en a

  9. #9
    Membre confirmé
    Homme Profil pro
    Directeur technique
    Inscrit en
    Août 2018
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Août 2018
    Messages : 84
    Par défaut

    @Floyd-44
    joins un fichier Excel , en prenant soin de bidonner les informations confidentiel si il y en a
    @dysorthographie,
    Voilà la bête (sans faire de jeu de mots...:),

    PIECE JOINTE Actualisée
    animal.xlsm

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [AC-2010] Relations entre tableaux
    Par CHAKRI Ayoub dans le forum Modélisation
    Réponses: 2
    Dernier message: 14/10/2014, 14h29
  2. VBA Relation entre Form et S-Form
    Par maub85 dans le forum IHM
    Réponses: 0
    Dernier message: 21/06/2010, 18h02
  3. Réponses: 5
    Dernier message: 30/06/2008, 10h53
  4. Fonctions VBA renvoyant des tableaux dans Excel
    Par phil_75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2006, 00h19
  5. [VBA]Lien entre fichiers excel : Update en VBA
    Par criocaps dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2006, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo