For Each formula2

Résolu
BoJav Messages postés 49 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

10 réponses

Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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

0
BoJav Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Histoire de la balise: vous cliquer sur balise code cercle rouge "<>" et ensuite vous coller le code au milieu comme image:

0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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?


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BoJav Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Merci du complément d'info.
Note: vous me mettez ce qui est correct d'après l'extrait...
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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/
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
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/
0
BoJav Messages postés 49 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Merci, content pour vous
0