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 :

UserForm avec liaison dans un autre classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut UserForm avec liaison dans un autre classeur
    Bonjour à tous : Est-il possible à partir d’un UserForm de faire appel à un fichier extérieur

    Voici le début du code que j’utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
     Set f = Sheets("tarif") 
     choix1 = f.Range("A2:E" & f.[A65000].End(xlUp).Row).Value
     For i = 2 To f.[A65000].End(xlUp).Row
    Ici la feuille est contenue dans le fichier qui contient l’ UserForm
    Ce classeur aurait pour emplacement D:\Devis\Tarif PR -- (le nom de la feuille est nommé) Tarif (par exemple)
    Le nom du fichier sur lequel je travail est nommé Devis emplacement D:\Devis\Devis
    Le but est de déplacer la feuille tarif pour la rende indépendante du fichier que j’utilise cette feuille contient environ 20000 lignes
    Créer des liaisons entre classeurs ne me pose pas de problèmes mais je ne sais pas comment faire le lien lorsque je fais appel par l’UserForm
    Je pense qu’il faut modifier la seconde ligne du code
    En somme un UserForm peut ‘il faire appel à un fichier enregistré ailleurs que sur le fichier sur lequel je travail ?
    Pardonnez mois je ne suis qu’un apprenti dans le domaine des macros
    Par avance merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Un exemple dans les fichiers joints :

    - Fichier boite de dialogue : Pièce jointe 207412

    - Fichier tarifs : Pièce jointe 207413

    Le code ci-dessous ouvre le fichier Tarifs, charge une matrice des prix, et referme le fichier après chargement.
    Nb : On peut s'affranchir d'une matrice en travaillant directement avec un range, mais c'est ma façon de travailler.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    Option Explicit
     
    Public Continuer As Boolean
    Public AireProduits As Range
    Public CelluleProduits As Range
     
     
    Public MatriceTarifs As Variant
     
     
    Sub VisualiserLesProduits(ByVal FeuilleProduit As Worksheet, ByVal TitreProduit As Long)
     
    Dim I As Long
    Dim DerniereLigneProduit As Long
     
         On Error GoTo ErrorHandler
     
         ' Répertoire et nom du fichier à adapter
         ChargementMatriceTarifs "C:\Users\XXXX", "Tarifs 2016-04-20.xlsx"
     
         With FeuilleProduit
     
              DerniereLigneProduit = .Cells(.Rows.Count, 1).End(xlUp).Row
              Set AireProduits = .Range(.Cells(TitreProduit + 1, 1), .Cells(DerniereLigneProduit, 2))
     
              With Form_Produit
                 .List_Produits.List() = AireProduits.Value
                 .Show
              End With
     
              Set AireProduits = Nothing
     
         End With
     
         Exit Sub
     
     
    ErrorHandler:
            MsgBox Err.Number
     
    End Sub
     
     
    Sub ChargementMatriceTarifs(ByVal RepertoireFichier As String, ByVal NomFichier As String)
     
    Dim Wb As Workbook
    Dim WbTarifs As Workbook
     
        Continuer = True
        For Each Wb In Workbooks
        Select Case Wb.Name
            Case NomFichier
                Continuer = False
                Exit For
        End Select
        Next Wb
     
        If Continuer = True Then
            Set WbTarifs = Workbooks.Open(Filename:=RepertoireFichier & "\" & NomFichier)
        Else
            Set WbTarifs = Workbooks(NomFichier)
        End If
     
        ' Chargement de la matrice
        MatriceTarifs = WbTarifs.Sheets("Tarifs").Range("ListeTarifs")
     
        ' Fermeture du fichier des produits
        If Continuer = True Then
            Application.DisplayAlerts = False
            Workbooks(NomFichier).Close savechanges:=False
            Application.DisplayAlerts = True
        End If
     
        Set WbTarifs = Nothing
     
    End Sub

    La boite de dialogue affiche le prix de la référence choisie contenu dans la matrice. Le bouton Valider met à jour le libellé et le prix.


    Pièce jointe 207414


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
     
    Option Explicit
     
    Private Sub BoutonRetour_Click()
     
         Continuer = False
         Unload Form_Produit
     
    End Sub
     
    Private Sub BoutonValider_Click()
     
     
    Dim CtrI As Long
    Dim CtrJ As Long
     
        If List_Produits.ListCount > 0 Then
            For CtrI = 0 To List_Produits.ListCount - 1
                If List_Produits.Selected(CtrI) = True Then
                     For Each CelluleProduits In AireProduits
                         If CelluleProduits = List_Produits.List(CtrI) Then
                            With CelluleProduits
                                 .Offset(0, 1).Value = LabelLibelle
                                 .Offset(0, 2).Value = CDbl(LabelPrixTarif)
                                 .Offset(0, 2).NumberFormat = "#,##0.00 €"
                            End With
                            Exit For
                         End If
                     Next CelluleProduits
                End If
            Next CtrI
     
         End If
     
     
     
    End Sub
     
     
    Private Sub List_Produits_Click()
     
    Dim CtrI As Long
    Dim CtrJ As Long
     
        If List_Produits.ListCount > 0 Then
            For CtrI = 0 To List_Produits.ListCount - 1
                If List_Produits.Selected(CtrI) = True Then
     
                    For Each CelluleProduits In AireProduits
                         If CelluleProduits = List_Produits.List(CtrI) Then
                            Application.Goto CelluleProduits.Offset(-10, 0), Scroll:=True
                            CelluleProduits.Activate
                            Exit For
                         End If
                     Next CelluleProduits
     
                     For CtrJ = LBound(MatriceTarifs, 1) To UBound(MatriceTarifs, 1)
                         If MatriceTarifs(CtrJ, 1) = List_Produits.List(CtrI) Then
                            LabelLibelle = MatriceTarifs(CtrJ, 2)
                            LabelPrixTarif = Format(MatriceTarifs(CtrJ, 3), "#,##0.00 €")
                            Exit For
                         End If
                     Next CtrJ
     
                End If
            Next CtrI
     
         End If
     
    End Sub
     
    Private Sub UserForm_Click()
     
    End Sub

    La commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.Goto CelluleProduits.Offset(-10, 0), Scroll:=True
    , permet de positionner la référence choisie 10 lignes par rapport au haut de l'écran (Utile si vous avez une grande quantité de références).


    Cordialement.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut
    Bonsoir : Eric avant tout merci pour votre aide. l'UserForm que vous me proposez ne correspond pas tout à fait à ce que je cherche
    voici ci joint un fichier trouvé sur le site de jacques Boisgontier bien connu des développeurs que j'ai adapté à mon type de réalisation

    Le fait de double cliquer appel l'UserForm puis je sélectionne en tapant le début d'une référence puis valide pour incorporer cette référence au fichier.
    Notez que mon tarif est actuellement dans le même fichier. le but est bien sur de dissocier les 2 fichiers comme je l'ai soumis plus haut.
    Dans l'UserForm est'il possible de verrouiller l'affichage dans les textBox 1 à 5 en effet on peur modifier le prix afficher dans les textBox et lors de la validation le prix est ainsi modifié.

    DevisIntuitif.xlsm

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par patmicro Voir le message
    Dans l'UserForm est'il possible de verrouiller l'affichage dans les textBox 1 à 5 en effet on peur modifier le prix afficher dans les textBox et lors de la validation le prix est ainsi modifié.
    Bonjour,

    Ci-joint, une version modifiée avec les textbox bloqués. Au double-clic, la matrice Choix1 est chargée après ouverture et recherche de l'onglet tarif en cours. Le fichier tarif est fermé une fois la matrice chargée.
    Les répertoire tarif, nom du fichier tarif, onglet tarif en cours sont dans l'onglet Paramètres.


    - Fichier devis : Pièce jointe 207528

    - Fichier Tarif : Pièce jointe 207529

    J'ai ajouté un Textbox pour saisir la quantité et un label pour le coût total HT

    Pièce jointe 207530

    J'ai modifié vos formules Prix total HT dans votre tableau pour arrondir à deux décimales près.

    Cordialement.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2014
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2014
    Messages : 308
    Par défaut
    Bonsoir Eric : Un grand merci pour ton aide. Désolé de te faire encore appel. J’ai un souci, lorsque l’on veut utiliser le fichier Devis je dois ouvrir le fichier tarif pour pouvoir faire appel à l’userform si un message d'erreur apparait. Lorsque l’userform est ouvert le fichier tarif se ferme systématiquement. Le problème quand je veux compléter les cellules suivantes je dois à nouveau ouvrir le fichier tarif.
    Le fichier actuel est un fichier de démo afin d’intégrer par la suite ces données dans un fichier de base ou appelé fichier modèle que j’utilise actuellement au travail. Pour tout expliquer ce fichier de base est complété par mes collèges. Lorsqu’ils clic sur le bouton enregistrer, le fichier est fermé automatiquement et enregistré dans un dossier pour y être traité par mes soins. Le fichier de base est de nouveau libre pour un nouvel enregistrement.
    Ma question : Est ’il possible d’ouvrir le fichier tarif à l’ouverture du fichier devis intuitif et de le laisser ouvert le temps de compléter les cellules puis de fermer le fichier tarif lors de l’enregistrement.

    Par avance merci et désolé de te solliciter de nouveau.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par patmicro Voir le message
    Ma question : Est -il possible d’ouvrir le fichier tarif à l’ouverture du fichier devis intuitif et de le laisser ouvert le temps de compléter les cellules puis de fermer le fichier tarif lors de l’enregistrement.
    Bonjour,

    Une nouvelle version Pièce jointe 207641

    A l'ouverture de la boite de dialogue, Tarifs reste ouvert. Sur clic du bouton Retour, un message demande si le fichier Tarifs doit être fermé avec sauvegarde. Si Non, le fichier Tarifs reste ouvert.

    Nb : Le lancement de la boite de dialogue ne se fait plus dans le module de la feuille devis, mais dans le module standard.

    Cordialement.
    Dernière modification par AlainTech ; 30/04/2016 à 20h20.

Discussions similaires

  1. Réponses: 18
    Dernier message: 18/11/2013, 10h50
  2. [XL-2003] Rompre des liaisons dans un autre classeur
    Par steps5ive dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2012, 18h26
  3. Enregistrer des données d'un Userform dans un autre classeur
    Par LinC49 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/01/2011, 17h51
  4. TCD avec des donnees dans un autre classeur
    Par nana85 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2008, 11h24
  5. lster userform.combobox avec les infos dans un autre classeur
    Par dkmix dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/10/2007, 22h53

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