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
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
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
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
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.
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
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
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
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