XL 2019 Optimisation d'un code VBA pour liste

im_Guillaume

XLDnaute Nouveau
Bonjour le forum,

J'ai actuellement un code qui permet de :
- Dans l'onglet liste : avoir un tableau de données (il va être dynamique, des lignes vont être ajoutées et enlevées dans la version finale)
- dans l'onglet choix : avoir le "catalogue" de chacune des colonnes et pouvoir choisir parmi ces options.

Malheureusement, dans mon document original, le tableau de données dépasse les 500 lignes. Cela m'affiche le message d'erreur suivant :
1645606076684.png

1645606083913.png

Puis quand je regarde le fichier journal :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error104600_01.xml</logFileName><summary>Des erreurs ont été détectées dans le fichier « D:\mailing partenaires 2022 evolve6.xlsm »</summary><removedFeatures><removedFeature>Fonction supprimée: Validation des données dans la partie /xl/worksheets/sheet2.xml</removedFeature></removedFeatures></recoveryLog>

Comme si excel rencontrait un problème avec la validation des données dans l'onglet "choix"...

Je cherche donc à optimiser ce code pour qu'il fonctionne sur de grands tableaux. (Les fonctions doivent rester les mêmes au final)
Il fonctionne actuellement mais uniquement sur les "petits" tableaux.


La version actuelle du code est jointe ci-dessous.

Merci pour toute l'aide que vous pourrez m'apporter!
 

Pièces jointes

  • ex_forum.xlsm
    27.3 KB · Affichages: 8

im_Guillaume

XLDnaute Nouveau
Ça devrait aller 😌

J'ai une question concernant ton fichier :
Actuellement, il y a des listes sur toutes les lignes des colonnes B, C, D, E :
1645619927643.png

Idéalement je souhaiterais avoir des liste uniquement dans les cases B5, C5, D5 et E5 :
1645620018686.png

Y a-t-il un moyen de modifier ton code pour correspondre à ça?

Encore merci pour temps!
 

patricktoulon

XLDnaute Barbatruc
et ben c'est simple
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    invisible
    If Not Intersect(Target, [B5:E5]) Is Nothing Then
        Select Case Target.Column
        Case 2: With ComboNum: .Top = Target.Top: .Visible = True: End With
        Case 3: With ComboPays: .Top = Target.Top: .Visible = True: End With
        Case 4: With ComboFonction: .Top = Target.Top: .Visible = True: End With
        Case 5: With ComboNom: .Top = Target.Top: .Visible = True: End With
        End Select
    Else
        invisible
    End If
End Sub
 

Dranreb

XLDnaute Barbatruc
Pourquoi n'avoir pas joint un classeur avec la véritable structure du tableau à mettre à jour ?
Je pense que vous n'aviez pas bien compris ma question, et que les colonnes sont bien liées.
Je joins donc la version avec un ComboBoxLiées. La question des doublons de combinaisons de 4 n'est toujours pas réglée, alors je ne peut pas encore y adjoindre les fonctions de mise à jour.
 

Pièces jointes

  • CBxLiéesIm_Guillaume.xlsm
    102.1 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
@Dranreb les listes ne sont pas liées c'est la question que j'ai posé au départ quand je disais que c’était incohérent il a répondu que non
je cite
Merci pour ton message Patrick,

Oui, le fichier fonctionne bien actuellement, mais je cherche à l'optimiser ou à passer par une autre méthode.

Il ne sont pas dépendant les uns des autres. Nous devons pouvoir choisir parmi toutes les listes à chaque fois, c'est normal
 

Dranreb

XLDnaute Barbatruc
Pourtant, il a sorti au poste #13 une structure de titres complètement différente, (pourquoi ne l'a-t-il pas fait dès le début ?) où vraiment, là, tout a l'air lié !
Je crois qu'il ne parle que des Llistes présentées dans les ComboBox, où il croit que si c'est lié il va y avoir des répétitions ?! …
 

patricktoulon

XLDnaute Barbatruc
re
je cite du post #13
Pour répondre donc à votre question :
- les doublons ne doivent apparaître qu'une fois dans la liste proposée dans le moteur de recherche
- les listes ne sont pas liées : je dois pouvoir effectuer n'importe quelle recherche et si rien ne correspond dans la base donnée, alors le résultat affiché sera vide.
je suppose que la validation de la ligne B5:E5 se fait après 🤔
 

Dranreb

XLDnaute Barbatruc
Oui mais il n'a peut être pas compris qu'il aurait dû dire si la COMBINAISON de tous les choix dans les listes ne correspond à aucune ligne … Mais on parle dans le vide car c'est justement cette combinaison qui n'est pas unique dans son tableau Liste donné en exemple, et il n'a toujours pas dit quoi faire si les 4 choix aboutissent à une de ces combinaisons.
 

im_Guillaume

XLDnaute Nouveau
Désolé pour le labs de temps, j'essais d'implanter les versions en parallèle!
Merci pour l'adaptation Patrick, ça fonctionne vraiment bien! :)

Merci pour votre patience à tous les deux!


En effet; les listes ne sont pas liées : ça fonctionne comme un consultant de base de données :

L'utilisateur recherche "une personne" (liste 4) avec "un numéro" (liste 1), dans "un pays" (liste 2) et "une fonction" (liste 3).

Puis il appuie sur le bouton recherche qui va ensuite trier la baase de données.

Si ces critères sont remplis par des lignes de la BDD, alors le résultat s'affiche. Si rien ne correspond : pas de résultat.

Est-ce peut être plus clair? :)
 

patricktoulon

XLDnaute Barbatruc
@Dranreb normalement il ne peut avoir 4 choix possible puisque les liste sont remplies sans doublons
maintenant si la ligne choix! B5:E5 correspond a x lignes dans liste ca c'est un autre problème qui n'est pas un d'ailleurs a moins que cette liste ne fasse pas que 4 colonnes au quel cas c'est toute la conception à revoir de la BDD liste
 

Statistiques des forums

Discussions
298 863
Messages
1 972 356
Membres
203 676
dernier inscrit
Henry22