Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Valeur Cible en Boucle

Jordan02

XLDnaute Nouveau
Grand nouveau sur ce site, je vous adresse à tous mes salutations!

Un grand merci par avance à ceux et celle qui prendront le temps de me lire, et de me répondre (grand niais que je suis).

Je vais très probablement passer pour un novice, mais voici mon problème actuel :

- Vous trouverez en PJ un fichier contenant un tableur excel, et mon problème est sans doute assez simple. On retrouve en colonne CZ, une colonne nommée "Différence". Dans cette colonne, je dois tout simplement faire ligne par ligne -> Valeur cible -> Cellule à définir (CZ) -> valeur à atteindre : 0 - Cellule à modifier : DA (la case juste à coté).

Je sais qu'une macro existe pour créer une "loop", problème étant que je ne m'y connais pas assez pour réaliser cette macro... (finalement je souhaite que la valeur cible avec 0 à atteindre se répète systématiquement sur toutes lignes de mon classeur en colonne CZ, et modifie la colonne DA)

Si une âme charitable pourrait m'aider dans l'établissement de cette macro, je lui en serais extrêmement reconnaissant !

Merci à vous,!
 

Pièces jointes

  • Valeur Cible test.xlsx
    318.4 KB · Affichages: 7
Solution
Bonsoir,
Un essai en PJ avec :
VB:
Sub CalculTAR()
    ' Penser à activer Références/Solver
    Dim DL%, L%
    DL = Range("A65500").End(xlUp).Row
    For L = 9 To DL
        If Cells(L, "B") <> "" And Cells(L, "B") <> 0 Then
            On Error Resume Next
            SolverOk SetCell:=Range("$CZ$" & L), MaxMinVal:=3, ValueOf:="0", ByChange:=Range("$DA$" & L)
            SolverSolve userfinish:=True
            [DC2] = L & " / " & DL
        End If
    Next L
End Sub
Le solver cherche CZ=0 en jouant sur DA.
Le clignotement est juste du à l'affichage de la progression.
Pourra être facilement masqué par l'utilisation d'un userform de progression. mais il faut déjà que la macro marche.

Jordan02

XLDnaute Nouveau
Un grand merci ! ça marche déjà très bien ! après étant totalement novice dans le domaine, je ne sais pas trop ce que veut dire optimisé (exécution plus rapide ? / code plus court ?)

Dans tous les cas merci du temps que tu m'accordes (tu m'évites des journées de repeat valeur cible une par une!)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oui, pour accélérer, par ex si CZ a déjà converger on passe au suivant.
Si DA est dans les choux, alors CZ est en erreur, il faut corriger. ( cas de la PJ dans les premières lignes )
Plus un progressbar qui ne ralentit pas les calculs. (De mémoire Copyright Patricktoulon)
Avec :
VB:
Sub CalculTAR()
    ' Penser à activer Références/Solver
    Dim DL%, L%
    Application.ScreenUpdating = False
    DL = Range("A65500").End(xlUp).Row
    For L = 9 To DL
        If Cells(L, "B") <> "" And Cells(L, "B") <> 0 Then
            If IsError(Cells(L, "CZ")) Then Cells(L, "DA") = 1      ' cas où CZ serait dans les choux
            If Cells(L, "CZ") > 0.000001 Then                       ' Si 0 alors TAR déjà calculé
                Cells(L, "DA") = 1                                  ' Pour aider le solver à converger
                On Error Resume Next
                SolverOk SetCell:=Range("$CZ$" & L), MaxMinVal:=3, ValueOf:="0", ByChange:=Range("$DA$" & L)
                SolverSolve userfinish:=True
            End If
            BarreProgression DL, L                                  ' Affichage de la progression
        End If
    Next L
End Sub
 

Pièces jointes

  • Valeur Cible test (2).xlsm
    806.6 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Si je veux la modifier (admettons si le taux n'est pas en DA mais en EF) j'ai juste à changer le nom de la colonne dans ton code ??
Exact, il faut changer DA en EF dans les lignes de codes :
VB:
If IsError(Cells(L, "CZ")) Then Cells(L, "DA") = 1
Cells(L, "DA") = 1 
SolverOk SetCell:=Range("$CZ$" & L), MaxMinVal:=3, ValueOf:="0", ByChange:=Range("$DA$" & L)

deviendront alors

If IsError(Cells(L, "CZ")) Then Cells(L, "EF") = 1
Cells(L, "EF") = 1 
SolverOk SetCell:=Range("$CZ$" & L), MaxMinVal:=3, ValueOf:="0", ByChange:=Range("$EF$" & L)
 

Jordan02

XLDnaute Nouveau
Hello à tous,

Je fais un update sur ce post (Un grand merci à Sylvanu encore d'ailleurs) car je rencontre un problème lors de la modification des colonnes qui doivent être traitées.

En respectant scrupuleusement le script du post précèdent, et en modifiant les 2 colonnes que je souhaite modifier, ce message s'affiche : (screen joint à ce post)

Quelqu'un aurait une idée de la provenance de l'erreur? Et comment la corriger ?

Merci pour vos retours !

Les screens :
 

Pièces jointes

  • Screen1.jpg
    326 KB · Affichages: 21
  • Screen2.jpg
    375.5 KB · Affichages: 22

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…