Appliquer une macro à toute une colonne

Bonjour tout le monde,

Je suis un noob (et je pèse mes mots) en Vba, désolé d'avance si le titre n'est pas explicite, je m'explique.

Le but de ma macro serait de déterminer un diamètre de conduite hydraulique, en fonction d'une valeur limite de pertes de charge (on notera R) à ne pas dépasser, valeur fixée par l'utilisateur.

Ceci est plutôt clair dans ma tête dans la façon de procéder. Sur chaque ligne, je dois tester plusieurs valeurs de diamètres jusqu'à ce que ma valeur R (colonne E) soit inférieure à 50. Une fois passé sous cette valeur, il faut renvoyer la valeur du diamètre dans la colonne des Diamètres (colonne B). À noter que pour calculer R il y a environ 3 formules intermédiaires.

Pour une ligne x, cela reviendrait à donner les instructions suivantes (les formules sont arbitraires, simplement pour illustrer la démarche) :

Pour D=107

Bx= Ax*3

Cx=Bx*Ax

...

Ex=Dx*360

Si Ex<50 alors Bx=D sinon

D=83

...

Et on continue avec les autres diamètres tant que R>50.

L'idée serait de pouvoir ensuite "etirer" ces instructions pour toutes les lignes de x=1 à ma dernière ligne de valeurs.

La finalité serait d'avoir le calcul automatique sur toutes les lignes pourvu que Ax ait une valeur non nulle.

J'espère avoir été clair, ce n'est jamais facile de vulgariser un problème, surtout quand on ne connaît pas grand chose au language en question.

Salut Yannouuu,

J'ose espérer que tu n'es pas noob au point de ne pas comprendre que nous avons besoin d'un fichier-exemple avec :
- des données réalistes dans une structure proche de la réalité ;
- d'un visuel des résultats voulus ;
- et tant qu'à faire, des formules intermédiaires correctes

Sauf à espérer qu'il y ait un plombier parmi nous...


A+

Bonsoir,

Je reviens vers vous avec des éléments qui pourraient en effet vous aider à comprendre le cheminement, en pièce jointe mon excel.

Prenons la ligne n°9. Les cellules que l'utilisateur doit rentrer sont en jaune. Il rentre donc en C9 une valeur de puissance.

Jusqu'à la cellule L9, les calculs intermédiaires que j'ai évoqué interviennent, à condition d'avoir une valeur du diamètre en F9.

Pour le moment, afin de déterminer ce diamètre et pouvoir passer aux autres calculs, je teste simplement la valeur du débit en D9 dans un intervalle, avec une chaine de SI().

Pour plus de précision, j'aimerais appliquer une macro à la cellule F9 afin que les diamètres soient tester dans un ordre croissant jusqu'à ce que la valeur en L9 soit inférieure à 50. (cette valeur est fixée en R2). La macro renvoit donc ensuite la valeur de diamètre correspondante.

Grossièrement il s'agirait de ça :

Sub testD()

Range("F9").Value = 16
If Range("M9").Value > 50 Then
Range("F9").Value = 21.6
If Range("M9").Value > 50 Then
Range("F9").Value = 27.2
If Range("M9").Value > 50 Then
Range("F9").Value = 37.2
If Range("M9").Value > 50 Then
Range("F9").Value = 43.1
If Range("M9").Value > 50 Then
Range("F9").Value = 54.5
If Range("M9").Value > 50 Then
Range("F9").Value = 70.3
If Range("M9").Value > 50 Then
Range("F9").Value = 82.5
If Range("M9").Value > 50 Then
Range("F9").Value = 107.1
If Range("M9").Value > 50 Then
Range("F9").Value = 131.7

End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub

Ici j'ai indiqué la valeur "50" mais il serait d'autant plus efficace que ce soit la cellule R2, afin que l'utilisateur puisse avoir un impact dessus.

Le code pouvant être largement simplifier je suppose, j'aimerais de plus faire en sorte que lorsque j'execute la macro, toutes les valeurs de la colonne F soit déterminées, j'ai illustré dans un 1er temps avec une seule cellule pour faire étape par étape.

Merci beaucoup par avance, j'espère avoir été plus clair.

Up

Salut curulis57, Yannouuu

peut tu me dire si toi qui a écrit les formule sur la classeur !

Bonjour,

Oui la quasi intégralité

pour le choix de diamètre "R" et les valeur associes, c’est un diagramme ou des résultat calculées par des formules

Si tu parles du diamètre en colonne "F", il s'agit de valeur répertoriées dans des tables usuelles, mais cela manque de précision. Je veux justement eviter de devoir supposer des valeurs. Et simplement renvoyer la valeur du diamètre lorsque R<50 en colonne "L". Cela passe évidemment par tester les valeurs de diamètres en ordre croissant.

Si j ai bien compris tu veux traduire la formule excel =SI(E9="1/2''";16;SI(E9="3/4''";21,6;SI(E9="1''";27,2;SI(E9="DN32";37,2;SI(E9="DN40";43,1;SI(E9="DN50";54,5;SI(E9="DN65";70,3;SI(E9="DN80";82,5;SI(E9="DN100";107,1;131,7)))))))))

en VBA

Ou STP essayer d envoyer un petit exemple de un ligne ou deux seulement

Alors je ne cherche pas a traduire les colonnes actuelles puisqu'elle ne sont pas précises.

L'idée serait de tester les valeurs comme suit :

Sub testD()

Range("F9").Value = 16

If Range("M9").Value > 50 Then
Range("F9").Value = 21.6

If Range("M9").Value > 50 Then
Range("F9").Value = 27.2


If Range("M9").Value > 50 Then
Range("F9").Value = 37.2


If Range("M9").Value > 50 Then
Range("F9").Value = 43.1


If Range("M9").Value > 50 Then
Range("F9").Value = 54.5


If Range("M9").Value > 50 Then
Range("F9").Value = 70.3


If Range("M9").Value > 50 Then
Range("F9").Value = 82.5


If Range("M9").Value > 50 Then
Range("F9").Value = 107.1

If Range("M9").Value > 50 Then
Range("F9").Value = 131.7

End If
...

End Sub

d ou vient 16 , 21.6 , 27.2 ..............

Ca se résume à dire :

tant que L(9: nombre de lignes)>50,

On incrémente la valeurs du diamètre F(9: nombre de lignes) avec les valeurs 16, 21, 27, 37 etc...

Cela correspond aux diamètres de tubes que l'on retrouve généralement, ce sont des tailles "standards". Comme on pourrait avoir XS, S, M etc pour les vêtements

Alors tu les incrémentent avec des tables usuelles ou un diagramme prédéfini

Je cherche juste à incrémenter les débits par les valeurs que tu mentionnais, 16, 21.6 etc...

Car jusqua maintenant si tu veux, je lisais mes valeurs de débits dans des tables usuelles et je regardais a quel diamètre ca correspondait pour avoir R<50.

La on oublie ces tables, on teste juste les valeurs de 16 jusqu'a 131.7 jusqu'a ce que les valeurs en colonne L soient inférieures à 50pa/m

Si tu veux voir comment évoluent les valeurs en L9 tu peux tester de rentrer différentes valeurs en F9, tu vas surement comprendre où je veux en venir

tu veux changer les F9 dans cette formule pour avoir R<50 =SI(K9=0;0;1000*J9*PUISSANCE(G9;2)*$G$4/(2*F9))

Exactement, et c'est pour cela que je voulais passer par le VBA.

Comme ca on teste les différentes valeurs, et des qu'on atteint la condition R<50, la valeur de diamètre est notée en F9

la valeur correct 16, 21.6 etc...sera inscrit ou ! (je pense dans F9)

Oui tout à fait, elle serait renvoyer à chaque ligne de la colonne F lors de l'exécution de la macro

Rechercher des sujets similaires à "appliquer macro toute colonne"