XL 2021 Excel facturation avec BD clients (modèle utilisable joint) - liste déroulante =INDIRECT sur classeur séparé

Calizarine

XLDnaute Nouveau
Bonjour,
Je passe rarement par ici, aussi en guise de contribution, je voudrais joindre le classeur excel que j'ai créé pour la facturation avec une base clients intégrée, des listes déroulantes et une macro pour enregistrer la facture en PDF.
fichier : 0 Gestion Clients Devis Factures Test

Mon souci : il faut que je dupplique ce classeurr avec l'arrivée d'une deuxième personne, mais que je créé un classeur indépendant avec les onglets BD client et BD clients facture devis, pour avoir un fichier unique pour les 2 personnes. Forcément les liens ne fonctionnent plus, notamment pour la liste déroulante du numéro client
VB:
=INDIRECT("tab_client[Code]")
. Les tableaux et les colonnes sont nommées.
J'ai essayé différentes choses comme
Code:
=INDIRECT("[Base_Don_V2.xls]"tab_client[Code]")
, mais ça ne fonctionne pas.

Ces fichiers sont sur Dropbox et peuvent être chargés en interne, j'ai donc tout mis dans un dossier "facturation" pour éviter tout problème de liens invalides, je voudrais aussi éviter les liens vers une adresse du type C:\Users\Veronique\Documents\Adobe.
fichiers : 0 Gestion Clients Devis Factures Test V2 et Base Don V2

J'espère avoir été claire.
Merci
 

Pièces jointes

  • 0 Gestion Clients Devis Factures Test V2.xlsm
    326.8 KB · Affichages: 9
  • Base Don V2.xlsx
    24.7 KB · Affichages: 5
  • 0 Gestion Clients Devis Factures Test.zip
    704.6 KB · Affichages: 6
Dernière édition:

goube

XLDnaute Impliqué
Bonsoir,
As tu essayé d'alimenter ta liste déroulante avec Power query, ce qui permettra d'avoir une base commune pour les deux fichiers ?
Cordialement
Edit
Essai à tester
 

Pièces jointes

  • Downloads.zip
    282.5 KB · Affichages: 4
Dernière édition:

Calizarine

XLDnaute Nouveau
Bonsoir,
As tu essayé d'alimenter ta liste déroulante avec Power query, ce qui permettra d'avoir une base commune pour les deux fichiers ?
Cordialement
Edit
Essai à tester
Bonsoir,
Merci pour la réponse.
J'avoue ne pas savoir comment utilser power query dans ce cas. Excel, pour le fichier joint, à fait ce que je redoutais. Arghhh.
Capture d’écran 2024-01-09 191515.png
 

Calizarine

XLDnaute Nouveau
Re,
Il faut remplacer le chemin inscrit dans le fichier par le chemin du fichier sur ton poste de travail.
La difficulté est que ces classeurs vont être hébergés sur Dropbox et pourront parfois être téléchargés en interne, avec ce type de chemin, les liens seront quaducs et certainement que excel essaiera de rectifier en faisant nimporte quoi. Dans mes souvenirs, on pouvait créer des liens entre 2 classeurs, sans mettre le chemin complet, s'ils étaient contenus dans un même dossier, mais peut-être que je me trompe.
 

goube

XLDnaute Impliqué
Bonjour,
Si les fichiers portent toujours le même nom et sont toujours sauvegardés au même emplacement.
Cordialement.
 

Pièces jointes

  • 0 Gestion Clients Devis Factures Test V2.xlsm
    344.3 KB · Affichages: 6
  • Base Don V2.xlsx
    24.6 KB · Affichages: 6

crocrocro

XLDnaute Occasionnel
Bonjour Calizarine et Goube,
réponse simultanée avec celle de Goube (pas vue).
Peut-être ce code pourra aider après adaptation au besoin.
VB:
Sub ListeEnviron()
' Liste des variables d'environnement
' permet de récupérer par exemple la variable correspondant au répertoire OneDrive
Dim i As Integer, TabVar
Dim Fin As Boolean
    i = 1
    Fin = False
    While Not Fin
        If Environ(i) <> "" Then
            TabVar = Split(Environ(i), "=")
            Debug.Print TabVar(0) & " = " & TabVar(1)
            i = i + 1
        Else
            Fin = True
        End If
    Wend
End Sub
Sub TestCheminLocal()
Dim AncienChemin As String
Dim NouveauChemin As String
    AncienChemin = ActiveWorkbook.Path
    'AncienChemin = "https://my.sharepoint.com/personal/Documents/MonRepertoire"
    NouveauChemin = CheminLocal(AncienChemin, "OneDrive")
End Sub
Public Function BonChemin() As String
Dim NouveauChemin As String
Dim AncienChemin As String
    AncienChemin = ActiveWorkbook.Path
    'AncienChemin = "https://my.sharepoint.com/personal/Documents/MonRepertoire"
    BonChemin = CheminLocal(AncienChemin, "OneDrive")
End Function
Function CheminLocal(pCheminIn As String, pEnv As String) As String
' exemples selon la valeur de pCheminIn et pEnv = "OneDrive" et Environ(pEnv)="C:\Users\Calizarine\OneDrive"
' https://my.sharepoint.com/personal/Documents/MonRepertoire -> C:\Users\Calizarine\OneDrive\MonRepertoire
' C:\Users\Calizarine\MonRepertoire                          -> C:\Users\Calizarine\OneDrive
Const RepDocument = "Documents"
    Select Case True
    Case InStr(1, pCheminIn, "http") <> 0
        ' Fichier non Local -> On remplace la partie après (RepDocument) du chemin par celui dans l'emplacement local (pEnv)
        New_Chemin = Environ(pEnv) & "\" & Mid(pCheminIn, InStrRev(pCheminIn, RepDocument) + Len(RepDocument) + 1, Len(pCheminIn))
        New_Chemin = Replace(New_Chemin, "/", "\")
        CheminLocal = New_Chemin
    Case Else
        ' Fichier Local -> on remplace le chemin par l'emplacement local (pEnv)
        New_Chemin = Environ(pEnv)
        CheminLocal = New_Chemin
    End Select
    Debug.Print pCheminIn & vbCrLf & New_Chemin

End Function
Adapter la formule Indirect avec un appel à la fonction BonChemin
 

Calizarine

XLDnaute Nouveau
Bonjour Calizarine et Goube,
réponse simultanée avec celle de Goube (pas vue).
Peut-être ce code pourra aider après adaptation au besoin.
VB:
Sub ListeEnviron()
' Liste des variables d'environnement
' permet de récupérer par exemple la variable correspondant au répertoire OneDrive
Dim i As Integer, TabVar
Dim Fin As Boolean
    i = 1
    Fin = False
    While Not Fin
        If Environ(i) <> "" Then
            TabVar = Split(Environ(i), "=")
            Debug.Print TabVar(0) & " = " & TabVar(1)
            i = i + 1
        Else
            Fin = True
        End If
    Wend
End Sub
Sub TestCheminLocal()
Dim AncienChemin As String
Dim NouveauChemin As String
    AncienChemin = ActiveWorkbook.Path
    'AncienChemin = "https://my.sharepoint.com/personal/Documents/MonRepertoire"
    NouveauChemin = CheminLocal(AncienChemin, "OneDrive")
End Sub
Public Function BonChemin() As String
Dim NouveauChemin As String
Dim AncienChemin As String
    AncienChemin = ActiveWorkbook.Path
    'AncienChemin = "https://my.sharepoint.com/personal/Documents/MonRepertoire"
    BonChemin = CheminLocal(AncienChemin, "OneDrive")
End Function
Function CheminLocal(pCheminIn As String, pEnv As String) As String
' exemples selon la valeur de pCheminIn et pEnv = "OneDrive" et Environ(pEnv)="C:\Users\Calizarine\OneDrive"
' https://my.sharepoint.com/personal/Documents/MonRepertoire -> C:\Users\Calizarine\OneDrive\MonRepertoire
' C:\Users\Calizarine\MonRepertoire                          -> C:\Users\Calizarine\OneDrive
Const RepDocument = "Documents"
    Select Case True
    Case InStr(1, pCheminIn, "http") <> 0
        ' Fichier non Local -> On remplace la partie après (RepDocument) du chemin par celui dans l'emplacement local (pEnv)
        New_Chemin = Environ(pEnv) & "\" & Mid(pCheminIn, InStrRev(pCheminIn, RepDocument) + Len(RepDocument) + 1, Len(pCheminIn))
        New_Chemin = Replace(New_Chemin, "/", "\")
        CheminLocal = New_Chemin
    Case Else
        ' Fichier Local -> on remplace le chemin par l'emplacement local (pEnv)
        New_Chemin = Environ(pEnv)
        CheminLocal = New_Chemin
    End Select
    Debug.Print pCheminIn & vbCrLf & New_Chemin

End Function
Adapter la formule Indirect avec un appel à la fonction BonChemin
Bonjour et merci beaucoup Crocrocro,
Je ne suis malheureusement pas assez calée du tout pour utiliser VBA. J'avais pensé trouver la solution avec Power Querry, mais pour l'instant ça bug et puis de toute façon le problème du chemin reste entier. Il y a bien un currentWorkbook très utile, mais pas de currentFolder !! Etant donné que toutes mes feuilles ont des formules renvoyant à l'onglet BD client, je pensais faire une copie dynamique de BD client du dossier BD, vers le dossier 0 gestion clients ..., comme ça on peut visualiser la BD client soit dans le classeur BD, soit dans 0 gestion clients... ce qui au final arragerait mes collègues.
 

Calizarine

XLDnaute Nouveau
re,
Qu'est ce qui ne fonctionne pas ?
Cordialement
Vous avez raison, j'aurais dû préciser.
Et bein qu'ayant été obligé d'activer la macro, je ne la voie pas. L'ajout d'un client dans Base Don V2, ne se répercute pas.
J'ai essayé la solution Power Querry, comme vous me l'avez suggéré, mais je n'y arrive pas (voir commentaire avec Crocrocro). Je pensais que mon problème serait simple, mais je crois que c'est trop compliqué pour moi.
Capture d’écran 2024-01-10 173530.png
 

goube

XLDnaute Impliqué
Re
La macro est dans le fichier 0 Gestion Clients Devis Factures Test V2.xlsm dans ThisWorkbook.
Pour que cela fonctionne, il faut que les deux fichiers soient stockés dans le dossier Dropbox présent sur chaque poste (visible dans l'explorateur)
1704905674907.png

Cordialement
 

Statistiques des forums

Discussions
312 207
Messages
2 086 247
Membres
103 163
dernier inscrit
Pelaez