Aide sur les Formules " liste déroulante"

Bonjour,

Je vous envoie le tableau pour une meilleur compréhension.

J'ai effectuer un tableau excell avec des menus déroulants.

Il me faudrait une formule pour le tableau K25,K27,U1000 etc...

Je m'explique :

Il y a différents onglets (base K25, base K27 etc...) qui correspondent aux différentes informations.

En sélectionnant le menu déroulant tableau K25, je choisis un câble ex: 1 x 35mm2, je voudrais dans la cellule B13 et B14 voir apparaître les longueurs estimative du câble soit (1x35mm2 =2,00 m et 1x35mm2=10,00m) se trouvant dans l'onglet Base K25 .

En colonne C13 et C14 (utilisation) voir apparaître la somme (B13-B14).

Il faudra mettre la même formule pour tous les tableaux en E,F;H,I;K,L; et N,O

J’espère avoir été compris sur le déroulement du tableau.

Merci de votre aide.

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Bye !

Bonjour,

Ça me va très bien. C'est super!!!

Sauf pour les colonnes C,F,I,L, il faudrait enlever le résultat car à la place c'est l'utilisateur qui mettra la quantité utilise - la quantité affiché restante.

Pouvez-vous m'expliquer la fonction car j'aime bien savoir le pourquoi du comment.

Vraiment merci pour votre aide.

Bonjour gmb et nico745... ,

Intéressant ce probléme, je vais t'expliquer ce que j'ai compris.

Je passe pour la liste déroulante donc.

voici le code avec mes commentaires et question.

Private Sub Worksheet_Change(ByVal Target As Range)

'target.adress est en ligne 11 alors que target est en ligne 8

'les listes déroulantes sont en ligne 11
' on nomme leur cellule dans la feuille
    If Target.Address = "$B$11" Or Target.Address = "$E$11" _
                Or Target.Address = "$H$11" Or Target.Address = "$K$11" _
                Or Target.Address = "$N$11" Then

        'on efface les entrées précédentes lignes 13 et 14
        If Target = Cells(8, Target.Column) Then
            Range(Cells(13, Target.Column), Cells(14, Target.Column + 1)).ClearContents
            Exit Sub
       End If
         'on définit les feuilles f avec les mêmes cellules de la ligne 8 en page accueil)
        Set f = Sheets("base " & Cells(8, Target.Column).Value)

          'on définit cell comme la variable de recherche de la colonne A de la page concernée.
        Set cell = f.Range("A:A").Find(Target.Value)
        '"""""""""""""""""""""""""""""""
         'çà désactive quoi çà ?
        Application.EnableEvents = False
        '"""""""""""""""""""""""""""""""
          'çà doit vouloir dire que s'il y a qqchose dans la cellule
        If Not cell Is Nothing Then
            'alors on copie les valeurs en col B sur 2 rangs
                f.Range("B" & cell.Row & ":B" & cell.Row + 1).Copy
            'on colle on copie spécial valeur
                Cells(13, Target.Column).PasteSpecial xlPasteValues
            'çà je vois pas, mais çà à l'air d'aditionner les 2 valeurs de gauche à tort
                'Cells(13, Target.Column).Offset(0, 1).Resize(2, 1) _
                 '       = Cells(13, Target.Column) + Cells(14, Target.Column)
        End If
    End If
    Application.EnableEvents = True
End Sub

du coup j'ai résolu ton probléme des quantités en enlevant l'avant derniére ligne

a+

fronck

Bonjour,

Vous êtes au top!!!!!

C'est super compliqué le VBA.

Merci à toutes les personnes de m'avoir aidé.

Bonjour,

Je viens de m'apercevoir une petite erreur dans le code VBA.

Il ne prends pas les colonnes et longueurs sur 3 et 4 lignes voir plus ex: Câbles K27 1 x 25mm2 il y a 8 lignes à prendre.

Il y a plusieurs lignes sur " U1000 1x6mm2,1x35mm2" "K27 1x25mm2,1x50mm2,1x95mm2,12g1.5mm2""K25 3G10mm2,5G16mm2,

Pouvez-vous modifier le code VBA, j'ai essaye de comprendre mais je suis une truffe.

Merci de votre aide.

Salut nico77410, le fil

Modifie ton code comme suit, évite les cellules fusionnées quand tu travailles en VBA

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Integer, debut: i = 12
    If Target.Address = "$B$11" Or Target.Address = "$E$11" _
       Or Target.Address = "$H$11" Or Target.Address = "$K$11" _
       Or Target.Address = "$N$11" Then
    'Si valeur = "K25" alors on quitte
        If Target = Cells(8, Target.Column) Then Exit Sub
    'On efface les plages "B13:B25"
        Range(Cells(13, Target.Column), Cells(25, Target.Column + 1)).ClearContents
    'On affecte f
        Set f = Sheets("base " & Cells(8, Target.Column).Value)
    'On travaille sur la plage de cellules  "A4:A30"
        With f.Range("A4:A30")
    'On recherche la valeur de "B11"
            Set cell = .Find(Target.Value, LookIn:=xlValues)

    'Si on trouve
            If Not cell Is Nothing Then
    'On note l'adresse de la première cellule trouvée
                debut = cell.Address
                Do
    'On empêche Excel de calculer et de mettre à jour la feuille, pour éviter de revenir dans la sub récursif infini...
                    Application.EnableEvents = False
    'On incrémente un compteur pour passer d'une ligne à l'autre
                    i = i + 1
    'On copie les valeurs trouvées
                    Cells(i, Target.Column) = f.Range("B" & cell.Row)
    'On recherche la prochaine occurence
                    Set cell = .FindNext(cell)
    'Là on remet à jour
                    Application.EnableEvents = True
    'On boucle tant que l'on trouve un résultat et que l'adresse trouvée n'est pas la même que la première

                Loop While Not cell Is Nothing And cell.Address <> debut
            End If
        End With
    End If

End Sub

Bonjour,

C'est très bien, par contre quand on clic sur L'ascenseur K27 ou U1000 etc..le résultat ne revient pas à zéro.

Pouvez-vous rectifier?

Ce que vous avez déjà effectuer est très bien.

Merci de votre aide

Salut niko, le fil

J'ai pas tout compris, de quel résultat tu parles...Si c'est les tableaux dans accueil change comme ça.

C'est une manière comme une autre doit y avoir mieux, mais fait à la va vite....

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Integer, debut, c: i = 12
   Application.EnableEvents = False
    If Target.Address = "$B$11" Or Target.Address = "$E$11" _
       Or Target.Address = "$H$11" Or Target.Address = "$K$11" _
       Or Target.Address = "$N$11" Then
    'Si valeur = "K25" alors on quitte
        If Target = Cells(8, Target.Column) Then Exit Sub
    'On efface les plages "X13:X25" de tous les tableaux
        For Each c In Array("B13:B25", "E13:E25", "H13:H25", "K13:K25", "N13:N25")
            Range(c).Value = ""
        Next c
    'On affecte f
        Set f = Sheets("base " & Cells(8, Target.Column).Value)
    'On travaille sur la plage de cellules  "A4:A30"
        With f.Range("A4:A30")
    'On recherche la valeur de "B11"
            Set cell = .Find(Target.Value, LookIn:=xlValues)

    'Si on trouve
            If Not cell Is Nothing Then
    'On note l'adresse de la première cellule trouvée
                debut = cell.Address
                Do
    'On empêche Excel de calculer et de mettre à jour la feuille, pour éviter de revenir dans la sub récursif infini...

    'On incrémente un compteur pour passer d'une ligne à l'autre
                    i = i + 1
    'On copie les valeurs trouvées
                    Cells(i, Target.Column) = f.Range("B" & cell.Row)
    'On recherche la prochaine occurence
                    Set cell = .FindNext(cell)
    'Là on remet à jour
                    Application.EnableEvents = True
    'On boucle tant que l'on trouve un résultat et que l'adresse trouvée n'est pas la même que la première

                Loop While Not cell Is Nothing And cell.Address <> debut
            End If
        End With
    End If
 Application.EnableEvents = True
End Sub

Bonjour,

Je m'explique.

Quand on clique sur le tableau K25 et l'on choisis le câble 1 x35mm2. On a le résultat qui apparaît.

Très bien.C'est le but du résultat.

Ensuite, on choisis de revenir en position initiale K25, le résultat devrait s’effacer mais les chiffres restent dans la colonne "longueur estimative".

Pouvez vous rectifier le petit défaut

Salut le fil

Oui faut peut-être se creuser la tête un tout petit peu....

Changes ton code comme suit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Integer, debut: i = 12
    'On empêche Excel de calculer et de mettre à jour la feuille, pour éviter de revenir dans la sub récursif infini...
    Application.EnableEvents = False
    If Target.Address = "$B$11" Or Target.Address = "$E$11" _
       Or Target.Address = "$H$11" Or Target.Address = "$K$11" _
       Or Target.Address = "$N$11" Then
    'Si valeur = "K25" alors on quitte
        If Target = Cells(8, Target.Column) Then Target.Offset(2, 0).Resize(13).Value = "": Exit Sub

    'On efface les plages "B13:B25"
        Range(Cells(13, Target.Column), Cells(25, Target.Column + 1)).ClearContents
    'On affecte f
        Set f = Sheets("base " & Cells(8, Target.Column).Value)
    'On travaille sur la plage de cellules  "A4:A30"
        With f.Range("A4:A30")
    'On recherche la valeur de "B11"
            Set cell = .Find(Target.Value, LookIn:=xlValues)

    'Si on trouve
            If Not cell Is Nothing Then
    'On note l'adresse de la première cellule trouvée
                debut = cell.Address
                Do
   'On incrémente un compteur pour passer d'une ligne à l'autre
                    i = i + 1
    'On copie les valeurs trouvées
                    Cells(i, Target.Column) = f.Range("B" & cell.Row)
    'On recherche la prochaine occurence
                    Set cell = .FindNext(cell)
        'On boucle tant que l'on trouve un résultat et que l'adresse trouvée n'est pas la même que la première

                Loop While Not cell Is Nothing And cell.Address <> debut
            End If
        End With
    End If
'Là on remet à jour
Application.EnableEvents = True

End Sub

Bonjour,

Par contre, peux-t-on faire une formule pour supprimer la quantité prise par une personne.

Je m' explique :

Je veux prendre une longueur estimative

- K25 5G6mm2 long: 4M si possible faire la soustraction dans la case UTILISATION

Longueur estimative= 4 utilisation : 4 restant 0 mètre.

J'ai voulu supprimer dans l'onglet K25 5G6mm2 = 4,00m et tout le paramétrage ne fonctionne plus.

Pouvez-vous modifier la formule.

J’espère vous avoir bien expliqué .

Rechercher des sujets similaires à "aide formules liste deroulante"