Bug dans une liste déroulante

Bonjour à tous.

Je me permets de revenir vers vous, afin de savoir si quelqu'un à une solution pour un bug que je rencontre dans une liste déroulante.

J'avais créé cette liste déroulante il y a plusieurs années, et elle qui me permet d'afficher la liste de clients actifs et de sélectionner celui qui m'intéresse. Tout fonctionne à merveille, jusqu'à ce que je remarque très récemment que si le nombre d'enregistrements à afficher est inférieur à cinq, EXCEL recherche dans la feuille jusqu'à atteindre la limite du nombre de lignes pour pouvoir remplir la liste déroulante. Avec excel 2003 çà fait déjà 65000, mais maintenant avec Excel 2007......

En bref; EXCEL cherche à remplir la liste déroulante, et cherche jusqu'à la fin de la feuille de calcul.

Bien sûr, je calcule d'abord le nombre d'enregistrements qu'il y a dans la feuille de calcul, et le résultat est toujours juste. Le problème réside dans la liste déroulante qu'EXCEL veux à tout prix remplir. ( Le nombre de 5 enregistrements provient de la taille de la liste déroulante.)

Je me permets à tout hasard de joindre le code afférent à ma liste déroulante.

Si quelqu'un d'ntre vous avait une idée pour qu'excel ne lise pas jusqu'à la fin de la feulle, ou si l'un d'entre vous a déjà rencontré un pareil problème.

Merci à vous

Cordialement

Joseph

Private Sub UserForm_activate()

Dim compteur As Long

Dim compteur1 As Long

Dim nblignes As Variant

Dim DernierProtege As String

Application.ScreenUpdating = False

'Effacement et initialisation des données de la feuille "Actifs"

Sheets("Actifs").Select

Range("A6").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.ClearContents

Range("B6").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.ClearContents

Range("C6").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.ClearContents

Range("D6").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.ClearContents

Range("E6").Select

Range(Selection, Selection.End(xlDown)).Select

Selection.ClearContents

'Selection et tri par date de sortie de la feuille ("Proteges")

Sheets("Proteges").Select

Range("A5").Select

Range(Selection, Selection.End(xlDown)).Select

Range(Selection, Selection.End(xlToRight)).Select

Selection.Sort key1:=Range("Q6"), order1:=xlAscending, key2:=Range("A6"), order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

'Détermination du nombre de lignes dans la feuille ("Proteges")

nblignes = Range("A6").End(xlDown).Address

nblignes = Range(nblignes).Row

nblignes = nblignes - 5

Range("A6").Select

compteur = 0

compteur1 = 6

'Début de la boucle

Do

compteur = compteur + 1

If ActiveCell.Value <> 0 Then

If ActiveCell.Offset(0, 15).Value = Empty Then

nuprotege = ActiveCell.Value

intprotege = ActiveCell.Offset(0, 1).Value

noprotege = ActiveCell.Offset(0, 2).Value

prprotege = ActiveCell.Offset(0, 3).Value

Sheets("Actifs").Select

Range("A5").Select

If Range("A6").Value = Empty Then

Range("A6").Select

Range("A6").Value = nuprotege

Range("B6").Value = intprotege

Range("C6").Value = noprotege

Range("D6").Value = prprotege

Range("E6").Value = noprotege & " " & prprotege

Else

compteur1 = compteur1 + 1

Range(("A") & (compteur1)).Value = nuprotege

Range(("B") & (compteur1)).Value = intprotege

Range(("C") & (compteur1)).Value = noprotege

Range(("D") & (compteur1)).Value = prprotege

Range(("E") & (compteur1)).Value = noprotege & " " & prprotege

End If

End If

End If

Sheets("Proteges").Select

ActiveCell.Offset(1, 0).Select

Loop Until compteur = nblignes

'Tri de la feuille("Proteges") par N° R.G.

Sheets("Proteges").Select

Range("A5").Select

Range(Selection, Selection.End(xlDown)).Select

Range(Selection, Selection.End(xlToRight)).Select

Selection.Sort key1:=Range("A6"), order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Range("A6").Select

'Tri de la feuille("Actifs") par nom puis prénom

Sheets("Actifs").Select

Range("A5").Select

Range(Selection, Selection.End(xlDown)).Select

Range(Selection, Selection.End(xlToRight)).Select

Selection.Sort key1:=Range("C6"), order1:=xlAscending, key2:=Range("D6"), order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

Range("A6").Select

End Sub

DernierProtege = Sheets("Actifs").Range("E6").End(xlDown).Address

'SELECTION DE LA PLAGE DE DONNEES A AFFICHER DANS LA LISTE DEROULANTE

'Choixprotege est le nom de la zone du UserForm ListeDeroulante dans laquelle s'affichent les protégés

Choixprotege.RowSource = "Actifs!E6:" & DernierProtege

'Affichage à chaque ouverture du 1er protégé de la liste

Choixprotege.ListIndex = 0

Sheets("PAccueil").Select

End Sub

Bonsoir à tous,

Peux-tu envoyer le fichier raccourci ,

ou feuilles "Actifs" et "Proteges"

Amicalement

Claude.

Bonsoir

Ci-joint un fichier avec onglets Proteges et Actifs.

Ce n'est pas le fichier réel, car les données sont confidentielles.

Ces onglets font en fait partie d'un classeur organisé comme une base de données et servant à piloter d'autres classeurs.

Je ne sais pas si ce sera suffisant, mais déjà un grand merci de vous intéresser à mon souci.

https://www.excel-pratique.com/~files/doc2/Fichiers1.xlsm

Cordialement

Joseph

Bonjour à tous,

Joseph, il est difficile de t'aider avec si peu de données!

Ne peux-tu pas envoyer ton fichier (et en xls si possible) en gardant le code que tu as posté et avec le menu déroulant! Car je ne vois rien de déroulant dans ton fichier

6nouveau-test.xlsm (16.57 Ko)

re,

dans la feuille "Proteges", tu tri en 1ère clef la colonne "Q", c'est la dernière colonne ?

ou c'est variable ?

Claude.

Bonjour à tous,

Joseph, Je n'ai pas compris l'utilité de la boucle et toutes ces variables !

essaye avec ce code raccourci dans fichier démo:

https://www.excel-pratique.com/~files/doc2/Joseph67_2.xls

N'ayant pas l' UserForm, je l'ai mis dans un Sub

les 2 dernières lignes sont désactivées avec une apostrophe en tête

Amicalement

Claude.

Bonjour vba-new et dubois

Je vais essayer de vous joindre le fichier. Il faut d'abord que j'efface les données.

Je vais faire çà dans la journée. Je vous donnerais aussi le mot de passe de protection à ce moment là.

Merci à vous et à +

Cordialement

Joseph

re,

merci de répondre à mon message précédent

Claude.

Bonjour duboi et vba-new

En réponse à "duboi", j'ai essayé de remplacer mon code par le votre, mais çà ne fonctionne pas. Je n'en connait pas la raison exacte, mais à un moment donné VBA me dit qu'il n'accepte la valeur NULL.

Pour tous les deux, je joint le fichier Directeur3 qui est malheureusement un fichier en XLSM, car en, XLS il dépasse les 100 ko. C'est le fichier que j'utilise dans mon application, ôté de tout ce qui est superflu pour ma question.

Je ne peux envoyer ce fichier en XLS seulement si vous m'autorisez à vous le faire parvenir par mail (ou alors si celà fonctionne grâce à MP.)

Pour être plus exact dans l'intitulé de ma demande, en fait l'userform "plante", c'est à dire qu'EXCEL tente de le remplir en lisant toutes les lignes de la feuille "Proteges" seulement s'il n'y a pas d'enregistrement dans l'onglet "Proteges" ou alors s'il n'y en a qu'un seul. J'ai refait des essais, et normalement, à partir de 2 enregistrements, çà fonctionne correctement.

https://www.excel-pratique.com/~files/doc2/Directeur3.xlsm

Merci beaucoup.

Cordialement

Joseph

PS cet après-midi et demain, voire après demain, je fais dans l'activité déménagement pour des tiers en plus de mon boulot le matin. Si jamais vous m'écrivez et que je ne réponds pas le même jour, ne vous en offusquez pas. C'est tout simplement que je n'aurais pas eu le temps d'aller sur l'ordinateur.

Bonjour joseph,

Il y a un mot de passe VBA, on ne peut pas tester le code!

Essaie de résoudre ce problème pour qu'on puisse t'aider

Bonjour tous,

Bonjour vba-new,

Oups, désolé.

Mot de passe enlevé

Je re-joins le fichier (Directeur3bis)

https://www.excel-pratique.com/~files/doc2/Directeur3bis.xlsm

Merci beaucoup

Joseph

Bonjour,

J'ai peur d'avoir oublié l'une ou l'autre instruction "Protect" dans le fichier précédent.

Voici donc "Directeur5" qui devrait enfin le faire!

Pour voir, j'ai essayé d'ouvrir le fichier que j'ai envoyé précédemment en cliquant sur le lien. Comment faites vous pour vous en sortir ? Je n'ai strictement rien compris aux divers fichiers qui apparaissent !

Voici le nouveau fichier Directeur5

https://www.excel-pratique.com/~files/doc2/Directeur5.xlsm

Merci et bonne soirée.

Joseph

Bonjour à tous,

Bonjour Duboi, bonjour vba-new,

Le problème est résolu. Je vous en donne ici la solution :

Le code suivant

nblignes = Range("A6").End(xlDown).Address

est remplacé par celui ci :

nblignes = Cells(Rows.Count, 1).End(xlUp).Address

Merci pour la peine que vous vous êtes donnés et le temps que vous m'avez accordé.

Cordialement

Joseph

Rechercher des sujets similaires à "bug liste deroulante"