Partage d'un fichier VBA contenant un UserForm

Bonjour à tous, Je me permets de venir vers vous après avoir retourné tout internet sans trouvé de solution à mon problème. En effet, dans le cadre de mon travail j'ai mit en place un formulaire de recherche multicritères en suivant pas à pas la vidéo suivante : "Excel VBA - Créer un Formulaire de recherche Multi-critères" de Learnaccess sur YouTube Tout fonctionne parfaitement sur MON fichier. Cependant, une fois que le fichier est partagé avec un collègue, la recherche sur le formulaire affiche le message d'erreur que j'ai mit en place moi même dans le code: Private Sub btnRechercher_Click() On Error GoTo gestionerreur: Feuil1.Range("W1").Value = ComboBox1.Value Feuil1.Range("W2").Value = TextBox1.Value Call Filtrer lstDossier.RowSource = Feuil1.Range("ListeExtraction").Address(external:=True) txtTotal.Value = Feuil3.Range("V2").Value Exit Sub gestionerreur: MsgBox "Une erreur est intervenue ou aucun dossier trouvé sur le critère " & TextBox1.Text End Sub Savez-vous pourquoi la recherche ne fonctionne plus une fois que c'est partagé? Est-ce un problème qui provient des filtres avancés ? PS: étant un fichier confidentiel, je ne peux malheureusement le partager. Je vous remercie d'avance

Edit modo : code placé entre balises

Private Sub btnRechercher_Click()

On Error GoTo gestionerreur: Feuil1.Range("W1").Value = ComboBox1.Value
Feuil1.Range("W2").Value = TextBox1.Value
Call Filtrer
lstDossier.RowSource = Feuil1.Range("ListeExtraction").Address(external:=True)
txtTotal.Value = Feuil3.Range("V2").Value
Exit Sub
gestionerreur: MsgBox "Une erreur est intervenue ou aucun dossier trouvé sur le critère " & TextBox1.Text
End Sub 

Bonjour,

Je pense que tu devrais joindre un fichier à ta demande, cela serait plus engageant :)

Bonjour et bienvenue

Oulàlà... Mais comment voulez-vous que l'on lise facilement un message où il n'y a ni point, ni virgule ou retour à la ligne ?

Je comprends que ce soit votre 1er post mais veillez à utiliser les balises de codes en cliquant sur l'icone </> disponible dans le menu et en collant le code dans la fenêtre. Il sera plus facile à lire. -->J'ai corrigé dans votre post

étant un fichier confidentiel, je ne peux malheureusement le partager.

Vous pouvez anonymiser avec cet utilitaire -> https://www.excel-pratique.com/fr/utilitaires/anonymisation-donnees

Cordialement

Je ne savais justement pas comment mettre sus forme de code, je vous remercie pour l'astuce.

En ce qui concerne mon problème je pense savoir d'où il provient.

En effet, étant donné que j'utilise les filtres avancés ceux-ci sont "restreint par l'administrateur" quand le fichier est partagé.

Quelqu'un sait comment retirer cette restriction, car j'ai beau cherché je ne trouve pas.

Merci

Quelqu'un sait comment retirer cette restriction, car j'ai beau cherché je ne trouve pas.

En son temps Felix (devenu CousinHub) avait donné une réponse ici -> https://forum.excel-pratique.com/s/goto/65640

Peut être aussi ce lien peut vous en dire plus https://support.microsoft.com/fr-fr/office/en-savoir-plus-sur-la-fonctionnalit%C3%A9-classeur-partag...

Par contre, essayez plutot avec Autofilter
Voyez aussi ce fil dans lequel j'ai répondu ce matin et où le filtre est réalisé sans utiliser le "filtre avancé" --> https://forum.excel-pratique.com/excel/recherche-d-un-critere-via-textbox-dans-listbox-184870

Crdlt

Bonjour,

Merci pour vos réponses.

J'ai fini par trouvé la solution. Il fallait juste baisser le niveau de la confidentialité dans Accueil.

Bonjour

Ok bien j'avais lu quelque chose à ce sujet aussi après vous avoir posté

Maintenant gardez en mémoire que cette manière de faire est ancienne (excel 2003, 97...) et que cela complique les choses dans vos feuilles car il vous faut définir une plage ailleurs pour le filtre.

Aujourd'hui vous pouvez vous éviter cela

Cordialement

Bonjour Dan,

J'ai crée un fichier test. Si vous avez le temps j'aimerais bien savoir quelle est la nouvelle manière.

Merci

Bien à vous

Je ne sais pas ouvrir votre fichier.
Excel me demande des informations de mail

Pouvez-vous éditer votre post précédent en plaçant un fichier accessible ?

21dossiers-test.xlsm (138.87 Ko)

Les noms et prénoms ne concernent pas des vraies personnes je suppose ?

A l'ouverture de l'USF vous ne voulez pas avoir la liste de toutes les infos dans la listbox ? Ce serait plus pratique je pense

Tout bonnement !! C'est une liste 100% fictive.

Oui, ca peut se faire. Il faut juste que je puisse trouvé des personnes avec une recherche "multi-critères"

Oui, ca peut se faire. Il faut juste que je puisse trouvé des personnes avec une recherche "multi-critères"

En lisant le code Trier, je viens de me rendre compte que dans votre fichier original, le tableau dans la feuille Base est au format structuré ??
Son nom est bien "Basedossier" ?

Je dois savoir pour les codes qui sont différents dans ce cas

Le code Trier a été mis en place pour mettre les noms dans l'ordre alphabétique, faut pas le prendre en compte celui-ci car ça a déjà été fait.

La base de donner s'appel bien "Basedossier".

En ce qui concerne les filtres, je sais pas si vous avez vus mais ils se trouvent dans la feuille "Accueil" en colonne W et Y.

En ce qui concerne les filtres, je sais pas si vous avez vus mais ils se trouvent dans la feuille "Accueil" en colonne W et Y.

Non je n'avais pas vu mais cela ne sert plus dans ce que je vais vous proposer. Vous pouvez supprimer tout


Modifiez déjà ceci :

1. Code Trier : remplacez le par celui ci-dessous

Sub Trier()
With ThisWorkbook
    With .Worksheets("Base").ListObjects(1)
        With .Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("BaseDossier[NOM]"), SortOn:=xlSortOnValues, Order:=xlAscending
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlPinYin
            .Apply
        End With
    End With
End With
End Sub

2. Code Initialize : remplacez le code initialize dans l'USF par celui ci-dessous

Private Sub userform_initialize()
Call Trier
Call init
ComboBox1.List = WorksheetFunction.Transpose(Feuil2.Range("B1:G1"))
End Sub

3. Dans l'USF, en dessous de l'initialize, ajoutez le ci-après

Private Sub init()
With Feuil2.ListObjects(1)
    lstDossier.List = .DataBodyRange.Value
    txtTotal = .ListRows.Count
End With
End Sub

Faites un test et dites moi si ok. Je reviens plus tard pour le reste

J'ai tout fait comme indiqué. En exécutant le code il y a un débogage à ce niveau:

Sub AfficherFormulaire()

    frmRecherche.Show

End Sub

Avec le message "La méthode Range de l'objet Global a échoué"

Aucun souci dans le fichier posté

Avec le message "La méthode Range de l'objet Global a échoué"

Ce n'est pas à ce niveau que cela se passe mais probablement dans la procédure Initialize ou init

En premier vérifiez que votre feuille Base comporte bien un tableau au format structuré
Si je regarde dans votre fichier posté dans la feuille Base, allez dans Formule --> Gestionnaire de noms, vous devez voir un nom "Basedossier"
Aussi vérifiez dans l'éditeur VBA que Feuil2 correspond bien à la feuille Base.

Si vous n'êtes pas certain, allez dans l'usf et positionnez-vous sur la ligne initialize
Ensuite allez dans le menu "débogage" et choisissez "basculer au point d'arrêt".
Cliquez sur le bouton de la feuille Accueil pour exécuter le code. Celui-ci va s'arrêter sur la ligne initialize qui sera coloriée en jaune

Pour continuer le code en mode pas à pas, appuyez chaque fois sur F8 (ou FN + F8).
Lorsque vous aurez le message d'erreur dites moi sur quelle ligne le code est arrivé

Bonjour Dan,

J'ai tout vérifié et tout fait comme vous avez indiqué. Le message d'erreur s'affiche sur la ligne

.SortFields.Add Key:=Range("BaseDossier[NOM]"), SortOn:=xlSortOnValues, Order:=xlAscending

de "Trier".

En fait, le tableau s'appel "BaseDossier3". Je viens de modifier cela dans le code et le message d'erreur ne s'affiche plus.

Ok mais il me semble mieux de ne pas avoir ce chiffre 3 présent sans quoi on ne demande s'il y a un Basedossier1 ou Basedossier2

Pour supprimer le 3 :
- Allez dans formule -> Gestionnaire de noms
- Sélectionnez BaseDossier3
- Cliquez sur "Modifier"
- Dans la rubrique "Nom", supprimer le chiffre 3 puis OK
- ensuite enlever le 3 du votre macro trier

Dites moi si ok pour vous

Rechercher des sujets similaires à "partage fichier vba contenant userform"