Formule avec Variable

Bonjour,

Je suis en train de créer un tableau qui gère des effectifs par mois, en fonction du service, de la qualification, du type de contrat et du sexe :

image

Ce tableau est le tableau global, il y a une feuille (et donc tableau) pour chaque mois avec les données sous cette forme :

image

Pour le moment, je n'ai qu'à compter de cette manière et adapter pour chaque colonne de mon tableau global :

=SOMME.SI.ENS(TableauJanvier[Colonne1];TableauJanvier[Services];"BRASSAGE ET FILTRATION";TableauJanvier[Nature qualification];"Cadre";TableauJanvier[Sexe];"m")

Mais voilà, ça va me prendre un temps monstre.. donc j'ai eu l'idée de le faire en VBA grâce à cette formule (je n'ai encore rien adapté) :

Range("B2:B" & Range("A" & Cells.Rows.Count).End(xlUp).Row).FormulaR1C1 = "=RC[-1]+1"

Mais le problème c'est que je en peux pas mettre de variable dans la formule comme elle est entre parenthèse, il prendra que du texte.

Est-ce que quelqu'un a une idée ? Je m'y prends mal ?

Merci d'avance,

Jérôme

Bonjour jeromeDD,

Avec un fichier (anonymisé) ce serait plus facile pour te répondre.

Une question : Pourquoi avoir un tableau d'effectif par mois et pas un seul tableau avec des dates de début et de fin ? Ce qui te permettrait de rajouter un test sur les dates dans la fonction SOMME.SI.ENS et d'avoir une formule qui fonctionne quel que soit le mois.

Sinon par rapport au problème, je n'ai pas compris le lien entre la formule avec SOMME.SI.ENS et ce que tu veux faire en VBA.

Cdlt,

Cylfo

Bonjour Cylfo,

Merci pour ta réponse !

Je joins le fichier.

En gros ce que je veux faire c'est mettre mes formules en =SOMME.SI.ENS dans toutes les cellules de mon tableau global, sans avoir à modifier la formule à la main pour chaque cellule et donc en utilisant VBA pour mettre des conditions et des variable, je pourrais aller beaucoup plus vite.

Il y a de fortes chance que je m'y prenne mal ou qu'il y ait une méthode beaucoup plus simple mais pour le moment je ne trouve pas..

Merci d'avance,

Jérôme

Je viens d'avoir une idée,

Il est possible de couper la formule avec des "&" et de mettre mes fameuses variables à ce moment là ? Puis de finir la formule, par exemple :

"A2 +" & MaVariableVBA & "+ C2 " ?

Bonjour,

Es-ce que tu ne peux pas insérer deux lignes masquées avec ces infos qui te permettent de n'avoir qu'une cellule :

capture d ecran 2024 02 07 132247

Ou j'ai mal compris le problème ?

Daniel

Re,

Pour la question sur le VB, la réponse est oui mais je ne pense pas que cela solutionne ton problème.

Pour avoir un modèle VBA d'une formule :

  • Inscrit ta formule dans une cellule et sélectionne cette cellule
  • Dans l'éditeur VB, affiche la fenêtre exécution (CTRL + G) et tapes la commande suivante : ? Activecell.Formula tu obtiendras la syntaxe dont le nom de la fonction utilisable en VB. Exemple avec la cellule [CT10] du fichier joint : la cellule contient =SOMME.SI.ENS($B10:$CS10;$B$9:$CS$9;"F") et dans la fenêtre exécution tu auras =SUMIFS($B10:$CS10,$B$9:$CS$9,"F")
  • Avec cette exemple si tu voulais paramétrer l'écriture des formules en faisant varier les plages et la valeur du code sexe, tu aurais une instruction du type MaCellule.Formula = "=SUMIFS(" & MaPlageDeTot & "," & MaPlageSexe & "," & cValSexe & ")" A noter => le séparateur des paramètres ; est à remplacer par la virgule.

Sinon (voir fichier joint), tu n'as pas besoin de recourir à VB, il suffit de définir les formules des cellule B10 à M10 avec le fonction INDIRECT et de la copier ensuite sur tout ton tableau.

Il faut faire quelques aménagements mais qui seront aussi nécessaires si tu veux créer tes formules en VBA car il n'y a pas systématiquement correspondance entre les intitulés du tableau récap et les tableaux par mois pour les rubriques service, qualification et sexe. A titre d'exemples, j'ai fait une transpo pour les qualifications avec SI.MULTIPLE et le sexe avec un simple SI. Pour les services, j'ai supprimé le retour à la ligne et pour conditionnement je l'ai aligné sur le nom qui figure dans le tableau de janvier.

Cdlt,

Cylfo

Bonjour Cylfo,

Merci pour la réponse.

Effectivement je n'ai pas besoin de passer par du VB, je ne connaissais pas les formules que tu as utilisé, c'est bien pratique merci.

Il me reste un petit point a régler pour que ce soit parfait mais je sèche un peu..

En gros dans cette partie de la formule :

SI.MULTIPLE(BJ$7;"Cadre";"Cadre";"Agent Maîtrise";"Agent de maîtrise";"Ouvrier Employé";"Ouvrier qualifié")

Tu testes le nom d'une cellule et tu en fais une correspondance, mais "Ouvrier Employé" peut correspondre à la fois à "Ouvrier qualifié" et "Employé qualifié", comment je peux gérer ce cas ? J'ai essayé avec la formule OU mais j'ai vite compris que ce n'était pas fait pour ça. J'ai également essayé en mettant 2 fois la correspondance mais il s'arrête à la 1ere (logique puisqu'il trouve quelque chose).

Merci d'avance,

Jérôme

Bonjour jeromeDD,

Si les seules catégories contenant le mot "qualifié" sont celles des "Ouvrier qualifié" et "Employé qualifié" tu peux modifier les formules par

SI.MULTIPLE(BJ$7;"Cadre";"Cadre";"Agent Maîtrise";"Agent de maîtrise";"Ouvrier Employé";"* qualifié")

sinon indiques moi la liste complète des catégories (Employé qualifié n'était pas dans le fichier exemple).

Cdlt,

Cylfo

Bonjour Cylfo,

Merci en retard pour ta réponse, ça fonctionne parfaitement !

Cordialement,

Jérôme

Rechercher des sujets similaires à "formule variable"