XL 2010 Création bordereau de plan

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bodin44

XLDnaute Nouveau
Bonjour,
Je suis a créer un fichier excel afin de créer des bordereaux d'envoi de nos plans.
Mais je suis limité en excel. Pas les bases pour les formules. Je m'aide de chat GPT ou encore perplexity.
Mais la je bloque totalement.
J'ai dans un fichier excel un onglet liste de plan puis un onglet Bordereau.
Je voudrais dans une cellule, aller récupérer le code du plan "onglet Liste". Puis à partir du code du plan avoir le dernier indice ainsi que sa date qui se trouve aussi dans "onglet Liste".
A savoir que j'enregistre dans liste tout les indice et date du plan.
 

Pièces jointes

Oui, d'où ma question, à laquelle tu n'as pas répondu : tu ne vas pas créer une nouvelle feuille bordereau et garder toutes les anciennes pour faire la sauvegarde de ton historique ?
En fait si. Un nouvel onglet pour chacun des bordereaux. Mais nous en faisons pas non plus des centaines. En général on s'arrange pour faire une diffusion général de nos plans. Au maximum 10 bordereaux. Et certain de mes collègues peuvent aussi travailler sur le même projet ou encore lors de mes absences.
 
Par an ? Donc dans 5 ans, une quarantaine de feuilles dans le classeur ?
Non il faut pas voir cela ainsi 😀. En fait je parle de projet d'étude. Il faut pas chercher trop compliqué. Pour chacun des projets, nous faisons des bordereaux. Ceci ne dépasse pas en moyenne 10 bordereaux d'envoi. Sauf si gros projet de 1 Millions. Mais rarement le cas. 😉
 
Bonjour à tous,

Une solution VBA avec cette macro dans le code de la feuille "Bordereau" :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, mini$, tablo, i&, x$, n&, nn&, y$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With Sheets("Liste")
    tablo = .Range("A1:E" & .Range("B" & .Rows.Count).End(xlUp).Row)
End With
ReDim resu(1 To UBound(tablo), 1 To 17) 'A à Q
For i = 2 To UBound(tablo)
    x = tablo(i, 2)
    If x <> "" Then
        If Not d.exists(x) Then
            n = n + 1
            d(x) = n 'mémorise la ligne
            resu(n, 1) = x
            resu(n, 11) = "0"
            mini = "ZZZ"
        End If
        nn = d(x): y = UCase(tablo(i, 4))
        If y < mini Then mini = y: resu(nn, 6) = tablo(i, 5): resu(nn, 17) = tablo(i, 3)
        If y >= resu(nn, 11) Then resu(nn, 11) = y: resu(nn, 13) = tablo(i, 5): resu(nn, 17) = tablo(i, 3)
    End If
Next i
'---restitution---
With [A22]
    If n Then .Resize(n, 17) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 17) = "" 'RAZ en dessous
End With
End Sub
Elle se déclenche quand on active la feuille.

Tous les codes du plan sont listés sans doublon.

A+
 

Pièces jointes

Alors, voici la bonne formule :
VB:
=SIERREUR(INDEX($B$2:$B$8; EQUIV(0; NB.SI($K$1:K1; $B$2:$B$8); 0));"")
en K2 et tirée vers le bas
Merci, mais ça ne change rien. Le problème reste entier. 🙁

Lorsqu'il y a seulement deux codes différents dans la colonne "CODE DU PLAN", le Nom retourne une liste d'une seule ligne.
Au-delà de deux codes différents, il n'y a pas de problème, la liste est complète.
Sais-tu m'expliquer ce bug ?
 
Merci, mais ça ne change rien. Le problème reste entier. 🙁

Lorsqu'il y a seulement deux codes différents dans la colonne "CODE DU PLAN", le Nom retourne une liste d'une seule ligne.
Au-delà de deux codes différents, il n'y a pas de problème, la liste est complète.
Sais-tu m'expliquer ce bug ?
Ben non hein !
Vois la capture ci-dessous, en colonne K il y a la formule du post #8 et en colonne M celle du post #3
Capture d’écran 2025-09-16 001721.jpg
 
Vois la capture ci-dessous, en colonne K il y a la formule du post #8 et en colonne M celle du post #3
Et en colonne B il n'y a pas que deux codes différents... 😅

Comme dit précédemment, le problème n'est pas au niveau de la liste calculée, mais au niveau de la liste déroulante qui ne contient qu'une seule ligne au lieu de deux.
À mon avis ça ne peut venir que de la formule du Nom qui définit la liste déroulante. Mais ladite formule me semble bonne, et d'ailleurs elle fonctionne pour une valeur unique et aussi pour toute valeur supérieure à 2. 🤯
 
Dernière édition:
Bonjour le forum,

Concernant mini plutôt qu'un scalaire il est plus logique - et plus sûr - d'utiliser une variable tableau :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, tablo, resu(), mini(), i&, x$, n&, nn&, y$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With Sheets("Liste")
    tablo = .Range("A1:E" & .Range("B" & .Rows.Count).End(xlUp).Row)
End With
ReDim resu(1 To UBound(tablo), 1 To 17) 'A à Q
ReDim mini(1 To UBound(tablo)) 'tableau, plus logique
For i = 2 To UBound(tablo)
    x = tablo(i, 2)
    If x <> "" Then
        If Not d.exists(x) Then
            n = n + 1
            d(x) = n 'mémorise la ligne
            resu(n, 1) = x
            resu(n, 11) = "0"
            mini(n) = "ZZZ"
        End If
        nn = d(x): y = UCase(tablo(i, 4))
        If y < mini(nn) Then mini(nn) = y: resu(nn, 6) = tablo(i, 5): resu(nn, 17) = tablo(i, 3)
        If y >= resu(nn, 11) Then resu(nn, 11) = y: resu(nn, 13) = tablo(i, 5): resu(nn, 17) = tablo(i, 3)
    End If
Next i
'---restitution---
With [A22]
    If n Then .Resize(n, 17) = resu
    .Offset(n).Resize(Rows.Count - n - .Row + 1, 17) = "" 'RAZ en dessous
End With
End Sub
Cela ne modifie pas la durée d'exécution.

A+
 

Pièces jointes

Et en colonne B il n'y a pas que deux codes différents... 😅

Comme dit précédemment, le problème n'est pas au niveau de la liste calculée, mais au niveau de la liste déroulante qui ne contient qu'une seule ligne au lieu de deux.
À mon avis ça ne peut venir que de la formule du Nom qui définit la liste déroulante. Mais ladite formule me semble bonne, et d'ailleurs elle fonctionne pour une valeur unique et aussi pour toute valeur supérieure à 2. 🤯
Et en colonne B il n'y a pas que deux codes différents... 😅

Comme dit précédemment, le problème n'est pas au niveau de la liste calculée, mais au niveau de la liste déroulante qui ne contient qu'une seule ligne au lieu de deux.
À mon avis ça ne peut venir que de la formule du Nom qui définit la liste déroulante. Mais ladite formule me semble bonne, et d'ailleurs elle fonctionne pour une valeur unique et aussi pour toute valeur supérieure à 2. 🤯
Toujours pas.
Chez moi, j'ai bien IMP01 et Zaza dans la liste de validation.
 
Et en colonne B il n'y a pas que deux codes différents... 😅

Comme dit précédemment, le problème n'est pas au niveau de la liste calculée, mais au niveau de la liste déroulante qui ne contient qu'une seule ligne au lieu de deux.
À mon avis ça ne peut venir que de la formule du Nom qui définit la liste déroulante. Mais ladite formule me semble bonne, et d'ailleurs elle fonctionne pour une valeur unique et aussi pour toute valeur supérieure à 2. 🤯
Mais moi, j'utilise le champ nommé NewList qui fait référence à :
VB:
=DECALER(Liste!$M$2;;;NB.SI(Liste!$M$2:$M$500;"<>" & CAR(2)))
pour la liste de validation.
N'es-tu pas resté sur ton ancienne référence avec ListePlans ?
 
Et en colonne B il n'y a pas que deux codes différents... 😅

Comme dit précédemment, le problème n'est pas au niveau de la liste calculée, mais au niveau de la liste déroulante qui ne contient qu'une seule ligne au lieu de deux.
À mon avis ça ne peut venir que de la formule du Nom qui définit la liste déroulante. Mais ladite formule me semble bonne, et d'ailleurs elle fonctionne pour une valeur unique et aussi pour toute valeur supérieure à 2. 🤯
Marche aussi avec :
Code:
=DECALER(Liste!$K$2;;;NB.SI(Liste!$K$2:$K$500;"<>" & CAR(2)))
 
Ben si. C'est justement ma question : pourquoi la formule définissant ce nom ne fonctionne-t-elle pas lorsqu'il y a deux codes différents ???
tu parles bien de celle basée sur cette formule en J1 ?
VB:
=SOMMEPROD(1/NB.SI(t_Liste[CODE DU PLAN];t_Liste[CODE DU PLAN]))
Si c'est bien ça, ta formule renvoie (sur Office 365) une erreur '#DIV/0!' tant que la colonne 'CODE DU PLAN' contient une ou des lignes vides.
Donc, à mon avis, le problème vient peut-être de là.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
329
Retour