For Each formula2

[Résolu]
Signaler
Messages postés
23
Date d'inscription
mardi 23 février 2021
Statut
Membre
Dernière intervention
25 juin 2021
-
Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
-
Bonjour,

J'ai utiliser l'enregistreur de macro qui m'a donné la formule IFERROR ci-dessous.

Mais quand je tente un code avec for each next, ça bug au niveau de la formule

Dim PlanPot_I As Range
Dim CellPlan As Range

Worksheets(1).Activate
Set PlanPot_I = Range("D7:D15")

For Each CellPlan In PlanPot_I

CellPlan.Select
Selection.Formula2R1C1 = _
"=IFERROR(INDEX(Tableau3[[Code_Spec]:[Code_Spec]],MATCH(1,(Tableau3[[Date1]:[Date1]]=MAXIFS(Tableau3[[Date Plant]:[Date Plant]],Tableau3[[Ref_Planche]:[Ref_Planche]],R[0]C[-1]))*(Tableau3[[Ref_parcelle]:[Ref_Planche]]=R[0]C[-1]),0)),"""")"

Next

NB. Tableau3 est dans une autre feuille. La formule Iferror est sur une seule ligne dans mon vba

Quelqu'un a une idée.

D'avance meci

Boris

Configuration: Windows / Chrome 91.0.4472.77

10 réponses

Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Bonjour,
Eh bien sans le fichier, difficile de trouver se qui cloche.
Pouvez-vous le mettre sur https://mon-partage.fr/ et poster le lien?
Si la formule fonctionne, merci le la mettre à disposition!
Merci d'insérer le code correctement en utilisant la balise "<>" exemple:
Sub moncode()
Worksheets(1).Activate
Set PlanPot_I = Range("D7:D15")
'''''
''''''
End Sub

Salutations.
Le Pingou
Messages postés
23
Date d'inscription
mardi 23 février 2021
Statut
Membre
Dernière intervention
25 juin 2021

Bonjour,

Voici le lien de téléchargement

https://mon-partage.fr/f/DNoQpTAp/


Je ne comprends pas l'histoire de la balise <>

Le code est dans le module RefreshPlan

L'idée est de remplir les cases de la feuille "Plan" avec les infos contenues dans la BDD de la feuille "Listing"

D'avance merci pour votre aide

Boris
Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Bonjour,
Histoire de la balise: vous cliquer sur balise code cercle rouge "<>" et ensuite vous coller le code au milieu comme image:

Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Bonjour,
J'ai parcouru votre fichier et si j'ai bien compris vous voulez reporter les valeurs (Qte_Plant) de Listing dans le tableau Plan et non pas la formule... est-ce bien cela?


Salutations.
Le Pingou
Messages postés
23
Date d'inscription
mardi 23 février 2021
Statut
Membre
Dernière intervention
25 juin 2021

Bonjour,

Je voudrais que via le bouton situé sur la feuille plan, chaque rectangle du plan soit rempli en fonction des données qui se situe dans le listing.

C'est un plan d'un potager. Chaque bande de culture est représentée par un rectangle de 3 cellules. Celle de gauche est le numéro de la bande de culture. La cellule du milieu la spéculation qui y est plantée et celle de droite, la qté de plants qui a été semé. Comme les bandes de cultures vont avoir différentes spéculation au cours du temps (ex. en juin on met des tomates, 12 semaines plus tard on les récolte et on replante des aubergines), il faut que la formule aille cherche la date la plus récente en ce qui concerne la plantation).

La macro devrait donc parcourir les cellule du centre et de droite de chaque bande pour aller chercher l'info la plus récente dans le listing en ce qui concerne la spéculation mise et sa qté.

Par exemple pour la bande I_11, la formule pour aller chercher la dernière spéculation qui y a été planté (donc en D7 sur la feuille plan) est :
=SIERREUR(INDEX(Tableau3[[Code_Spec]:[Code_Spec]];EQUIV(1;(Tableau3[[Date1]:[Date1]]=MAX.SI.ENS(Tableau3[[Date_Plant]:[Date_Plant]];Tableau3[[Ref Planche]:[Ref Planche]];C7))*(Tableau3[[Ref Planche]:[Ref Planche]]=Plan!C7);0));"")

En VBA (réalisé avec enregistreur de macro) cela donne :

Selection.Formula2R1C1 = _
"=IFERROR(INDEX(Tableau3[[Code_Spec]:[Code_Spec]],MATCH(1,(Tableau3[[Date1]:[Date1]]=MAXIFS(Tableau3[[Date Plant]:[Date Plant]],Tableau3[[Ref_Planche]:[Ref_Planche]],R[0]C[-1]))*(Tableau3[[Ref_parcelle]:[Ref_Planche]]=R[0]C[-1]),0)),"""")"



Mais ma boucle for each ..next ne marche pas....

J'espère avoir été plus clair.

Boris
Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Bonjour,
Merci du complément d'info.
Note: vous me mettez ce qui est correct d'après l'extrait...
Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Bonjour,
J'ai un peut d'avance, voici ma proposition, la procédure se déclenche depuis votre bouton 'Refresh Plan Spéculation'.
Cela prend un peu de temps si tout Ok pour vous je chercherai pour accélérer le traitement.
Votre fichier:https://mon-partage.fr/f/qfgvYB1e/
Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Bonjour,
En attendant votre retour, j'ai changé de procédure car en utilisant la fonction c'est trop long.
Je vous laisse la découverte (j'ai ajouté des données fictives dans le listing pour avoir plus de cas).
La nouvelle version: https://mon-partage.fr/f/oHJbK0zf/
Messages postés
23
Date d'inscription
mardi 23 février 2021
Statut
Membre
Dernière intervention
25 juin 2021

Super, un tout grand merci !

Je pensais bien que passer par un fonction aiderait mais je débute en autodidacte le VBA et je ne me suis pas encore attaquer aux fonctions.

Encore merci

Boris
Messages postés
10231
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
3 août 2021
1 173
Merci, content pour vous