NB.SI.ENS + nom de feuille variable
Bonjour à tous,
ceci est mon 1er post sur ce forum et j'ai grandement besoin de vous pour m'aider sur Excel.
Je réalise un fichier pour compter des nombres de pièces dans un fichier Excel et je galère pour générer un code VBA évolutif.
Je m'explique :
- dans la feuille "Accueil", dans la cellule Z1, il y a le nom de la semaine en cours (par ex S1328 pour la semaine 28 en 2013)
cette cellule évolue donc chaque semaine (hé oui !)
- des feuilles dont les noms sont les numéros des semaines jusqu'a la semaine courante (par ex : S1301 à S1328)
- dans une feuille "Extraction", j'ai un tableau à 2 entrées (une colonne et une ligne) :
- ligne 1 , j'ai une liste de périmètre (periA, periB, ...)
j'aimerais donc faire une calcul croisé avec la fonction nb.si.ens qui va calculer pour chaque valeur de la colonne A et de la ligne 1, le nombre d'occurrences de l'entête de la colonne et de l'entete de ligne dans la feuille (dont le nom est marqué dans la cellule Z1 de la feuille "Accueil") respectivement dans les colonne R et T (de la feuille de la semaine)
Je vous soumets une partie du code mis en place, qui fonctionne mais n'évolue pas si l'on change la valeur de la cellule Z1 (de la feuille Accueil)
semaineAc = Sheets("Accueil").Range("Z1").Value 'nom de la semaine contenue dans le cellule Z1 de la feuille Accueil
For i = 2 To 10 'nombre de lignes
For j = 2 To 5 'nombre de colonnes
Cells(i, j).Select
ActiveCell.Formula = "=COUNTIFS(" & semaineAc & "!R3:170R"," & """" & Sheets("Extraction").Cells(i, 1).Value & """" & "," & semaineAc & "!T3:T130"," & """" & Sheets("Extraction").Cells(1, j).Value & """" & ")"
End If
Next
NextCela me renvoie le bon code dans les cellules; des formules Excel, ca me donne ca ;
=NB.SI.ENS('S1328'!R3:R170;"pieceA";'S1328'!T3:T170;"periA")ou encore dans une autre cellule :
=NB.SI.ENS('S1328'!R3:R170;"pieceG";'S1328'!T3:T170;"periG")Cette fonction est donc générée par un code VBA. Par contre, si je change la fameuse valeur de la cellule Z1 de la feuille Accueil, bah mes formules ne sont pas recalculées puisque le nom de la feuille est généré entre ' ' .
Ma question est donc la suivante :
comment pointer la formule :
=NB.SI.ENS('S1328'!R3:R170;"pieceA";'S1328'!T3:T170;"periA")dont le nom est :
eet st contenu dans une cellule de la 1ere feuille.S1328
Autrement dit; pouvoir effectuer des calculs avec la fonction nb.si.ens sur une feuille dont le nom est variable (le numéro de semaine variant chaque semaine) et est contenu sur une feuille principale.
J'espère avoir été clair, je pense que le problème est solvable, c'est juste qu'il me manque les outils nécessaires a sa bonne réalisation.
Je compte sur votre aide
PS; pour précisions, le numéro de semaine concerné sur la première feuille n'est pas forcément celui de la semaine en cours.
Merci à vous
Bonjour
=NB.SI.ENS(INDIRECT("'"&Z1&"'!R3:R170");"pieceA";INDIRECT("'"&Z1&"'!T3:T170");"periA")Cordialement
Bonjour rouday,
Bonjour Amadéus,
D’après ce que je crois comprendre, la semaine est identifiée dans Accueil !Z1
La formule est donc
=NB.SI.ENS(INDIRECT("'" & Accueil!Z1 & "'!R3:R170");"pieceA";INDIRECT("'" & Accueil!Z1 & "'!T3:T170");"periA")Et dans VBA
ActiveCell.Formula = "=COUNTIFS(INDIRECT(""'"" & Accueil!Z1 & ""'!R3:R170""),""pieceA"",INDIRECT(""'"" & Accueil!Z1 & ""'!T3:T170""),""periA"")"A+
Merci Amadeus pour ta réponse mais ce que je cherchais, c'est frangy qui l'a trouvé. Je te remercie, j'ai passé un temps fou à essayer de trouver la formule adéquate. Merci de ta rapidité et ton code marche parfaitement