Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Fonction Decaler

kikililou

XLDnaute Nouveau
Help Help Help !!!
Depuis ce matin je n'arrive pas à utiliser cette fonction si pratique !!
Je souhaiterai que mes stocks et besoins s'inscrivent automatiquement en fonction de l’unité que je choisie en cellule B1....
Je m'arrache les cheveux ...

Je sais que je vais bien trouver une âme charitable pour m'expliquer mon erreur ....
 

Pièces jointes

  • STOCK.xlsx
    41.3 KB · Affichages: 13

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Kikililou,
Essayer avec en B3 :
VB:
=DECALER(B28;EQUIV($B$1;$A:$A;0)-27;0)
L' Equiv sert à indexer le tableau sur la valeur de la liste déroulante.
Comme votre référence est en 28, le décalage de ligne pour HP doit être de 0.
 

Pièces jointes

  • STOCK (1).xlsx
    41.2 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Mais si le but était dans Folha1 de recopier les tableaux des feuilles en fonction de la liste déroulante alors il y a plus simple avec INDIRECT.
VB:
=INDIRECT($B$1&"!B"&LIGNE()+1)
Indirect reconstruit l'adresse de la cellule.
Ainsi si B1=HP alors =INDIRECT($B$1&"!B"&LIGNE()+1) devient =HP!B4.
 

Pièces jointes

  • STOCK (2).xlsx
    30 KB · Affichages: 12

kikililou

XLDnaute Nouveau
C'est exactement ça que je souhaitais faire...
Par contre, dès que je renomme les feuilles, il s'inscrit dans la cellule #REF !
 

job75

XLDnaute Barbatruc
Bojour kikililou, sylvanu, soan,
Mais tu vois quand je modifies le nom des feuilles certaines dellules sont idiquées #REF !
Pour l'éviter il faut du VBA, voyez le fichier joint et cette macro dans le code de la 1ère feuille :
VB:
Private Sub Worksheet_Calculate()
If Worksheets.Count = 1 Then Exit Sub
Dim a$(), i%
ReDim a(1 To Worksheets.Count - 1, 1 To 1)
For i = 2 To Worksheets.Count
    a(i - 1, 1) = Worksheets(i).Name
Next
Application.EnableEvents = False
With [L2]
    .Resize(i - 2) = a
    .Resize(i - 2).Name = "Liste"
    .Offset(i - 2).Resize(Rows.Count - i - .Row + 3).ClearContents
End With
If IsError(Application.Match([B1], [Liste], 0)) Then [B1] = [Liste].Cells(1) '1ère valeur
Application.EnableEvents = True
End Sub
Grâce aux formules avec INDIRECT qui sont volatiles la macro se déclenche chaque fois que des cellules se recalculent.

Pour tester modifiez le nom des feuilles.

A+
 

Pièces jointes

  • STOCK VBA(1).xlsm
    39.5 KB · Affichages: 8

kikililou

XLDnaute Nouveau
Merci mais je ne comprends pas pourquoi certaines fois cela ne fonctionne pas...
J'ai mis en jaune les unités qui ne fonctionnent pas... Merci d'avance de votre réponse
 

Pièces jointes

  • STOCK 3.xlsx
    28.2 KB · Affichages: 4

Discussions similaires

Réponses
5
Affichages
331
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…