Bonjour à tous,
Avant tout de chose, les tableaux croisés dynamiques ne sont pas adaptés dans mon cas car l'outil que j'ai créé est un outil de calcul utilisant des tableaux à taille et nombre variable selon les inputs de l'utilisateur qui réalise ensuite des calculs itératifs pour optimiser certaines variables.
Comme c'est un peu compliqué je vais illustrer avec un exemple simple même si ce ne correspond pas exactement au but recherché mais la structure sera la même que celle de l'outil.
Prenons le cas d'une concession automobile vendant X modèles de voitures et où Y vendeurs y travaillent.
Le nombre de ventes mensuelles de chaque voiture est rangé dans tableaux par modèle comme ceci
Il y a donc X tableaux de ce type.
| | Voiture 1 | |
|---|
| jan | fev | mars |
marc | voiture 1 | voiture 4 | voiture 8 |
jean | voiture 1 | voiture 3 | voiture 9 |
paul | voiture 2 | voiture 1 | voiture 5 |
Afin de réaliser des statistiques l'utilisateur renseigne un tableau de ce type où chaque case est une liste déroulante avec le nom des modèles de voiture
| jan | fev | mars |
marc | voiture 1 | voiture 4 | voiture 8 |
jean | voiture 1 | voiture 3 | voiture 9 |
paul | voiture 2 | voiture 1 | voiture 5 |
Le tableau suivant est obtenu à côté.
| jan | fev | mars |
marc | 10 | 4 | 8 |
jean | 12 | 2 | 6 |
paul | 5 | 7 | 3 |
Je sais que cela ne semble pas du tout optimisé pour l'exemple mais moi j'ai vraiment besoin que cela fonctionne comme ceci pour mon besoin.
Je n'ai pas trouvé meilleur exemple pour illustrer désolé.
J'ai joint un fichier exemple pour que vous vous fassiez une meilleur idée du rendu.
Mon problème vient du VBA, tous ces tableaux sont générés correctement sauf le dernier avec les résultats.
La formule qui affiche le résultat est un enchainement de SI, ou en fonction du modèle renseigné dans le deuxième tableau, la recherche (via INDEX/EQUIV) ne se fait pas dans le même tableau (car il y a X tableaux 1).
Ainsi cette formule a une taille qui varie en fonction du nombre de modèle et donc je la construis avec une boucle For :
For r = 1 To 12
formule = ""
For u = 1 To NBMODEL
cellule_model = Cells(,).Address
nom_model = Cells(,).Address
tableau_vente = Range(Cells(,), Cells(,)).Address
colonne_vendeur = Range(Cells(,),Cells(,)).Address
ligne_mois = Range(Cells(,), Cells(,)).Address
vendeur = Cells(,).Address
mois= Cells(,).Address(True, False)
formule = formule + "IF(" & cellule_model & "=" & nom_model & ",INDEX(" & tableau_vente & ",EQUIV(" & vendeur & "," & colonne_vendeur & ",0),EQUIV(" & mois & "," & ligne_mois & ",0)),"
Next
formule = formule + "0"
For u = 1 To NBMODEL
formule = formule + ")"
Next
Cells(,).Formula = "=" & formule & ""
Next
Le problème que lorsque la formule est écrite, je me retrouve avec @ devant chaque SI et chaque EQUIV et les cases ne se calculent pas (erreur #NOM?). Apparemment, ce serait une réaction de sécurité d'Excel pour je ne sais quelle raison.
Si je fais ctrl H sur les tableaux pour les enlever à la main ça fonctionne parfaitement mais si je fais un ctrl H via VBA :
Range().Select
Selection.Replace What:="@", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Et là toutes les cases sont en erreur #NOM? encore et je suis obligé de rentrer manuellement dans chaque case, faire entrer pour que cela fonctionne.
Et cela même si l'option de calcul de la feuille est en automatique. (faire Calculer maintenant et Calculer la feuille ne fonctionnent pas).
Comment faire pour se débarrasser automatique des @ sans que cela ne vienne perturber la recherche de la formule ?
Merci d'avance pour votre aide,