VBA : Saisir formules renvoyant vers d'autres feuilles
Fermé
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
-
25 juil. 2014 à 14:25
xuorel Messages postés 254 Date d'inscription samedi 24 novembre 2012 Statut Membre Dernière intervention 11 mai 2023 - 28 juil. 2014 à 23:10
xuorel Messages postés 254 Date d'inscription samedi 24 novembre 2012 Statut Membre Dernière intervention 11 mai 2023 - 28 juil. 2014 à 23:10
A voir également:
- VBA : Saisir formules renvoyant vers d'autres feuilles
- Incompatibilité de type vba ✓ - Forum Programmation
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba dernière colonne non vide ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
14 réponses
Le Pingou
Messages postés
12045
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 avril 2024
1 426
25 juil. 2014 à 23:21
25 juil. 2014 à 23:21
Bonjour,
J'ai stocké chaque feuille de mon fichier dans un tableau en VBA....
Que doit-on comprendre... ?
Pas simple de déchiffrer... le mélange entre VBA et des formules ...!
Pouvez-vous reformuler la question.... ?
J'ai stocké chaque feuille de mon fichier dans un tableau en VBA....
Que doit-on comprendre... ?
Pas simple de déchiffrer... le mélange entre VBA et des formules ...!
Pouvez-vous reformuler la question.... ?
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
25 juil. 2014 à 23:36
25 juil. 2014 à 23:36
mon fichier sert à suivre les heures des ouvriers d'une société qu'ils effectuent sur un chantier donné.
Pour cela je créer une feuille par mois, contenant une grille ou je note les heures. La colonne B fait la somme dans chaque feuille des heures du mois de chaque salarié.
Comme le nombre de mois d'un chantier est variable, pour créer et gérer mes mois je passe par un tableau
dim Tmois () as worksheet
Par ailleurs, j'ai une feuille "synthèse qui reprend la liste des ouvrier et fait la somme de leurs heures pour chaque mois.
j'aimerais automatiser ce calcul.
Ma contrainte, je ne veux pas que ce soit la valeur de la somme qui arrive dans chaque case (par exemple 143h pour Monsieur X).
je veux que la formule apparaissent, comme si j'avais fait à la main dans la base B3 de la feuille Synthèse, la somme de la case B3 des autres feuilles.
(quelque chose du style B3 = 'mois1'!B3+'mois2'!B3 etc
j'espère que j'ai été plus clair
Pour cela je créer une feuille par mois, contenant une grille ou je note les heures. La colonne B fait la somme dans chaque feuille des heures du mois de chaque salarié.
Comme le nombre de mois d'un chantier est variable, pour créer et gérer mes mois je passe par un tableau
dim Tmois () as worksheet
Par ailleurs, j'ai une feuille "synthèse qui reprend la liste des ouvrier et fait la somme de leurs heures pour chaque mois.
j'aimerais automatiser ce calcul.
Ma contrainte, je ne veux pas que ce soit la valeur de la somme qui arrive dans chaque case (par exemple 143h pour Monsieur X).
je veux que la formule apparaissent, comme si j'avais fait à la main dans la base B3 de la feuille Synthèse, la somme de la case B3 des autres feuilles.
(quelque chose du style B3 = 'mois1'!B3+'mois2'!B3 etc
j'espère que j'ai été plus clair
Le Pingou
Messages postés
12045
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 avril 2024
1 426
25 juil. 2014 à 23:53
25 juil. 2014 à 23:53
Bonjour,
Merci pour les informations.
Pour aider à la compréhension, ne serait-il pas plus simple d'avoir un extrait de votre fichier avec les notes directement sur la feuille... ? Le mettre sur https://www.cjoint.com/ et poster le lien dans cette discussion !
Merci pour les informations.
Pour aider à la compréhension, ne serait-il pas plus simple d'avoir un extrait de votre fichier avec les notes directement sur la feuille... ? Le mettre sur https://www.cjoint.com/ et poster le lien dans cette discussion !
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
Modifié par xuorel le 26/07/2014 à 11:06
Modifié par xuorel le 26/07/2014 à 11:06
voici : https://www.cjoint.com/?DGAlfgkeZQ8
ce fichier est le que mon client m'a soumis. Il à lui même créé chaque mois un par un. Et dans la feuille SYNTHESE, dans la colonne B il à lui même fait toutes les sommes à la main.
Pour lui éviter ce travail lourd dans le temps (quand il faudra ajouter les mois nouveaux au fur et a mesure), j'ai déjà automatisé la création de tous les mois (avec du code plus ou moins optimal, mais ca marche bien). Je me suis basé sur la création de 12 mois pour un chantier (mon client m'a dit que ça n'allait jamais au dela).
L'objet de notre échange concerne donc la manière de compléter les cases B7:B23 de la feuille Synthèse (qui est pour chaque case la somme de cette même case sur les autres feuilles)
Comme je le disais précédemment, je ne veux pas que les calcul se fassent de manière invisible au travers du code et que les cases ne récupère que le montant d'heures totales. Je veux qu'il final, les cases de la colonne B fassent apparaître les formules comme c'est le cas pour l'instant.
ce fichier est le que mon client m'a soumis. Il à lui même créé chaque mois un par un. Et dans la feuille SYNTHESE, dans la colonne B il à lui même fait toutes les sommes à la main.
Pour lui éviter ce travail lourd dans le temps (quand il faudra ajouter les mois nouveaux au fur et a mesure), j'ai déjà automatisé la création de tous les mois (avec du code plus ou moins optimal, mais ca marche bien). Je me suis basé sur la création de 12 mois pour un chantier (mon client m'a dit que ça n'allait jamais au dela).
L'objet de notre échange concerne donc la manière de compléter les cases B7:B23 de la feuille Synthèse (qui est pour chaque case la somme de cette même case sur les autres feuilles)
Comme je le disais précédemment, je ne veux pas que les calcul se fassent de manière invisible au travers du code et que les cases ne récupère que le montant d'heures totales. Je veux qu'il final, les cases de la colonne B fassent apparaître les formules comme c'est le cas pour l'instant.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
26 juil. 2014 à 13:03
26 juil. 2014 à 13:03
bonjour xuorel
As-tu pensé à l'enregistreur de macro qui dans ce cas devrait de donner des idées pour compléter ta macro?
Cordialement
As-tu pensé à l'enregistreur de macro qui dans ce cas devrait de donner des idées pour compléter ta macro?
Cordialement
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
26 juil. 2014 à 13:51
26 juil. 2014 à 13:51
Bonjour,
Et si tu donnais suite à tes autres questions ?
Comme ici : https://forums.commentcamarche.net/forum/affich-30555713-vba-probleme-avec-la-methode-range-find
eric
Et si tu donnais suite à tes autres questions ?
Comme ici : https://forums.commentcamarche.net/forum/affich-30555713-vba-probleme-avec-la-methode-range-find
eric
Le Pingou
Messages postés
12045
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 avril 2024
1 426
26 juil. 2014 à 22:56
26 juil. 2014 à 22:56
Bonjour xuorel,
J'ai regardé le fichier, concernant : manière de compléter les cases B7:B23 de la feuille Synthèse
Vous le faite une fois et c'est tout. De cette manière :
Pour chaque feuille mensuelle vous nommez la plage [B9 :B26] par exemple pour janvier 2014 : [cumul_janvier] pour février [cumul_fevrier] etc. jusqu'à, décembre.
Dans la feuille synthèse sélectionnez la plage [B9 :B26] et entrer la formule :
Pour l'année suivante vous copier le classeur et vous changer uniquement l'année des noms des feuilles et c'est tout.
Pas besoin de procédure VBA.
Note : la remarque d'eriiic est très pertinente .... (amicales salutations à toi eriiic)
J'ai regardé le fichier, concernant : manière de compléter les cases B7:B23 de la feuille Synthèse
Vous le faite une fois et c'est tout. De cette manière :
Pour chaque feuille mensuelle vous nommez la plage [B9 :B26] par exemple pour janvier 2014 : [cumul_janvier] pour février [cumul_fevrier] etc. jusqu'à, décembre.
Dans la feuille synthèse sélectionnez la plage [B9 :B26] et entrer la formule :
=cumul_janvier+cumul_fevrier+.......+cumul_decembreet vous valider comme formule matricielle : par Ctrl+Shift+Enter
Pour l'année suivante vous copier le classeur et vous changer uniquement l'année des noms des feuilles et c'est tout.
Pas besoin de procédure VBA.
Note : la remarque d'eriiic est très pertinente .... (amicales salutations à toi eriiic)
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
27 juil. 2014 à 00:40
27 juil. 2014 à 00:40
Merci pingouin pour votre piste.
Cependant certaines contraintes me poussent à prendre du recul sur votre proposition :
- le fait que les feuilles correspondent au 12 mois de 2014 est un hasard pour l'exemple. Dans les faites les chantiers ont une durée variable, et le temps passant, ils vont progressivement avancer sur 201. Mon idée est donc de demander à l'utilisateur le mosi de début du chantier, et de créer de manière automatique 12 mois à partir de la.
- De même le nombre d'ouvriers sur un chantier est variable. Au moment de la création du chantier, je compte donc demander à l'utilisateur de valider une liste sur une feuille ad'hoc. Les mois se completeront alors automatiquement avec cette liste d'ouvrier.
Dans l'idée de tout automatiser, je pense ne pas avoir d'autre choix que de recourir au VBA.
Dans cette optique, pourriez-vous me dire comment utiliser en VBA les formules matricielles ?
merci
Cependant certaines contraintes me poussent à prendre du recul sur votre proposition :
- le fait que les feuilles correspondent au 12 mois de 2014 est un hasard pour l'exemple. Dans les faites les chantiers ont une durée variable, et le temps passant, ils vont progressivement avancer sur 201. Mon idée est donc de demander à l'utilisateur le mosi de début du chantier, et de créer de manière automatique 12 mois à partir de la.
- De même le nombre d'ouvriers sur un chantier est variable. Au moment de la création du chantier, je compte donc demander à l'utilisateur de valider une liste sur une feuille ad'hoc. Les mois se completeront alors automatiquement avec cette liste d'ouvrier.
Dans l'idée de tout automatiser, je pense ne pas avoir d'autre choix que de recourir au VBA.
Dans cette optique, pourriez-vous me dire comment utiliser en VBA les formules matricielles ?
merci
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
27 juil. 2014 à 12:45
27 juil. 2014 à 12:45
Rebonjour xuorel
Bien que apparemment, tu as négliger la piste que je te conseillai,
je te propose de tester ceci:
Private Sub Charger_Formule()
'Réalisation de la formule de cumul
Dim caL As String
Dim f As Worksheet
Dim nB As Single 'nombre de noms
Sheets("SYNTHESE").Select
nB = Cells(9, 1).End(xlDown).Row
Cells(9, 2).Select ' Première cellule des cumuls
caL = "="
For Each f In ActiveWorkbook.Sheets
If f.Name <> "SYNTHESE" Then
caL = caL & "+'" & f.Name & "'!RC"
End If
Next f
ActiveCell.FormulaR1C1 = caL
Selection.AutoFill Destination:=Range(Cells(9, 2), Cells(nB, 2)), Type:=xlFillDefault
End Sub
Bien que apparemment, tu as négliger la piste que je te conseillai,
je te propose de tester ceci:
Private Sub Charger_Formule()
'Réalisation de la formule de cumul
Dim caL As String
Dim f As Worksheet
Dim nB As Single 'nombre de noms
Sheets("SYNTHESE").Select
nB = Cells(9, 1).End(xlDown).Row
Cells(9, 2).Select ' Première cellule des cumuls
caL = "="
For Each f In ActiveWorkbook.Sheets
If f.Name <> "SYNTHESE" Then
caL = caL & "+'" & f.Name & "'!RC"
End If
Next f
ActiveCell.FormulaR1C1 = caL
Selection.AutoFill Destination:=Range(Cells(9, 2), Cells(nB, 2)), Type:=xlFillDefault
End Sub
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 776
27 juil. 2014 à 13:52
27 juil. 2014 à 13:52
Bonjour à tous
Excusez l'incrust,
Je voulais simplement rappeler d'Excel met à disposition une commande parfaitement adaptée à ce problème et relativement simple à mettre en oeuvre (et sans VBA) : La Consolidation des données.
Excusez l'incrust,
Je voulais simplement rappeler d'Excel met à disposition une commande parfaitement adaptée à ce problème et relativement simple à mettre en oeuvre (et sans VBA) : La Consolidation des données.
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
28 juil. 2014 à 08:53
28 juil. 2014 à 08:53
Bonjours Patrice
Je n'ai pour m'a part jamais utilisé cette commande.
As-tu des précisions que je potasse?
Cordialement
Je n'ai pour m'a part jamais utilisé cette commande.
As-tu des précisions que je potasse?
Cordialement
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 776
Modifié par Patrice33740 le 28/07/2014 à 19:27
Modifié par Patrice33740 le 28/07/2014 à 19:27
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
28 juil. 2014 à 19:39
28 juil. 2014 à 19:39
Re,
Merci c'est simple et clair
Merci c'est simple et clair
Le Pingou
Messages postés
12045
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 avril 2024
1 426
27 juil. 2014 à 14:38
27 juil. 2014 à 14:38
Bonjour xuorel,
Ma proposition est indépendante des mois effectifs mentionnés dans l'onglet des feuilles ce qui veut dire que vous commencez au mois que vous voulez. Concernant le nombre de personnes par projet, elle est valable de 1 à 17 personnes sans modification si que 4 personnes vous aurez les totaux et les autres seront [0].pour ces)
Avez-vous simplement essayé la proposition ..... ?
Ma proposition est indépendante des mois effectifs mentionnés dans l'onglet des feuilles ce qui veut dire que vous commencez au mois que vous voulez. Concernant le nombre de personnes par projet, elle est valable de 1 à 17 personnes sans modification si que 4 personnes vous aurez les totaux et les autres seront [0].pour ces)
Avez-vous simplement essayé la proposition ..... ?
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
27 juil. 2014 à 17:39
27 juil. 2014 à 17:39
Pingou,
peux tu préciser ton propos lorsque tu dis "Ma proposition est indépendante des mois effectifs mentionnés dans l'onglet des feuilles ce qui veut dire que vous commencez au mois que vous voulez. " ?
merci
peux tu préciser ton propos lorsque tu dis "Ma proposition est indépendante des mois effectifs mentionnés dans l'onglet des feuilles ce qui veut dire que vous commencez au mois que vous voulez. " ?
merci
Le Pingou
Messages postés
12045
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 avril 2024
1 426
27 juil. 2014 à 22:16
27 juil. 2014 à 22:16
Bonjour,
Eh bien je ne vais pas imposer une solution qui visiblement, selon vos réponses, vous n'avez pas essayé.
Désolé, je quitte le poste.
Salutations.
Le Pingou
Eh bien je ne vais pas imposer une solution qui visiblement, selon vos réponses, vous n'avez pas essayé.
Désolé, je quitte le poste.
Salutations.
Le Pingou
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
28 juil. 2014 à 23:10
28 juil. 2014 à 23:10
je pense qu'il y a eu un quiproquo sur mes propos. Je te remercie tout de même pour tes conseils qui ont été constructifs pour moi quoi tu tu en penses
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
Modifié par xuorel le 27/07/2014 à 17:44
Modifié par xuorel le 27/07/2014 à 17:44
Iama, deux remarques :
- dans la ligne suivante
caL = caL & "+'" & f.Name & "'!RC"
à quoi sert le "RC" en fin de ligne ?
- dans ton autofill
Selection.AutoFill Destination:=Range(Cells(9, 2), Cells(nB, 2)), Type:=xlFillDefault
n'est-ce pas plutôt ceci qu'il faudrait mettre
Selection.AutoFill Destination:=Range(Cells(9, 2), Cells(nB+9, 2)), Type:=xlFillDefault
- dans la ligne suivante
caL = caL & "+'" & f.Name & "'!RC"
à quoi sert le "RC" en fin de ligne ?
- dans ton autofill
Selection.AutoFill Destination:=Range(Cells(9, 2), Cells(nB, 2)), Type:=xlFillDefault
n'est-ce pas plutôt ceci qu'il faudrait mettre
Selection.AutoFill Destination:=Range(Cells(9, 2), Cells(nB+9, 2)), Type:=xlFillDefault
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
27 juil. 2014 à 20:15
27 juil. 2014 à 20:15
Bonjour xurer
La première ligne RC représente "Row-Column".
Dans ce cas Excel utilise la référence relative de la cellule par rapport à la cellule d'origine
(cellule A9 dans notre cas).
Il faut comprendre R[0]C[0]. =>zéro déplacement en ligne et en colonne.
Je fait donc réfernec de la cellule A9 d'une autre feuille (f.Name).
Dans l'autofill
la valeur de nB utilisé est obtenu avec le fonction :Cells(9, 1).End(xlDown).Row.
Je part toujours de ma cellule de référence A9 et je vais chercher la dernière ligne de la liste des noms. (ici 25 puisque la 26éme est vide).
Est-ce assez clair?
Si tu as d'autre question, n'hésite pas
cordialement
La première ligne RC représente "Row-Column".
Dans ce cas Excel utilise la référence relative de la cellule par rapport à la cellule d'origine
(cellule A9 dans notre cas).
Il faut comprendre R[0]C[0]. =>zéro déplacement en ligne et en colonne.
Je fait donc réfernec de la cellule A9 d'une autre feuille (f.Name).
Dans l'autofill
la valeur de nB utilisé est obtenu avec le fonction :Cells(9, 1).End(xlDown).Row.
Je part toujours de ma cellule de référence A9 et je vais chercher la dernière ligne de la liste des noms. (ici 25 puisque la 26éme est vide).
Est-ce assez clair?
Si tu as d'autre question, n'hésite pas
cordialement
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
27 juil. 2014 à 20:17
27 juil. 2014 à 20:17
erratum
(cellule B9 dans notre cas).
(cellule B9 dans notre cas).
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
27 juil. 2014 à 20:19
27 juil. 2014 à 20:19
Je fait donc référence à la cellule B9 d'une autre feuille (f.Name).
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
28 juil. 2014 à 00:15
28 juil. 2014 à 00:15
Donc si tu mets RC sans nombre avec, ca sous entent R[0]C[0] ? Un truc que j'apprends merci.
Iama
Messages postés
319
Date d'inscription
mercredi 13 janvier 2010
Statut
Membre
Dernière intervention
27 mars 2020
14
28 juil. 2014 à 08:49
28 juil. 2014 à 08:49
En fait ce n'est pas moi, c'est l'enregistreur de macro.
Je n'ai fais que modifier le code qu'il à enregistrés, personnellement je l'ai aurai mis si j'avais.
Je n'ai fais que modifier le code qu'il à enregistrés, personnellement je l'ai aurai mis si j'avais.
xuorel
Messages postés
254
Date d'inscription
samedi 24 novembre 2012
Statut
Membre
Dernière intervention
11 mai 2023
Modifié par xuorel le 28/07/2014 à 00:19
Modifié par xuorel le 28/07/2014 à 00:19
Comment on déclare des formules matricielles en VBA (faire l'équivalent de ctrl+maj+entrer) ? Est-ce bien en utilisant formulaarray ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
28 juil. 2014 à 14:06
28 juil. 2014 à 14:06
Bonjour
Il faut utiliser la fonction Evaluate
Mais comme tu ne sais pas dire " merci pour le temps passé" quelque soit la pertinence d'une proposition de solution voir par exemple
https://forums.commentcamarche.net/forum/affich-30555713-vba-probleme-avec-la-methode-range-find#p30565329
Cherche par toi-m^me dans la documentation
Il faut utiliser la fonction Evaluate
Mais comme tu ne sais pas dire " merci pour le temps passé" quelque soit la pertinence d'une proposition de solution voir par exemple
https://forums.commentcamarche.net/forum/affich-30555713-vba-probleme-avec-la-methode-range-find#p30565329
Cherche par toi-m^me dans la documentation