Macro automatique

Bonjour

J'ai fait ce bout de code pour un calcul automatique. Il ne fonctionne que si je fais executer sub. Pourtant il est dans l'objet de la feuille. Est ce qu'il manque quelque chose ?

PS : il y a déjà un autre code dans cet objet

Sub tarif()
Dim i As Integer
For i = 2 To 64

If Range("Z" & i) = "Oui" And Range("AS" & i) <> "" And Range("AE" & i) = "Mois" Then Range("AG" & i) = "10" Else
If Range("Z" & i) = "Oui" And Range("AS" & i) <> "" And Range("AE" & i) = "Trimestre" Then Range("AG" & i) = "22,25" Else

If Range("Z" & i) = "Oui" And Range("AS" & i) = "" And Range("AE" & i) = "Mois" Then Range("AG" & i) = "15,45" Else
If Range("Z" & i) = "Oui" And Range("AS" & i) = "" And Range("AE" & i) = "Trimestre" Then Range("AG" & i) = "Erreur" Else

If Range("Z" & i) = "Non" And Range("AS" & i) <> "" And Range("AE" & i) = "Mois" Then Range("AG" & i) = "20" Else
If Range("Z" & i) = "Non" And Range("AS" & i) <> "" And Range("AE" & i) = "Trimestre" Then Range("AG" & i) = "44,50" Else

If Range("Z" & i) = "Non" And Range("AS" & i) = "" And Range("AE" & i) = "Mois" Then Range("AG" & i) = "30,90" Else
If Range("Z" & i) = "Non" And Range("AS" & i) = "" And Range("AE" & i) = "Trimestre" Then Range("AG" & i) = "Erreur" Else

Next i

End Sub

Bonjour

Remplace Sub Tarif() par

Private Sub Worksheet_Change(ByVal Target As Range)

Crdlt

Bonjour

il est normal que le code ne s’exécute que lorsque tu le lance... car comme tu l'a dit c'est une sub...

Donc la question est plutôt, quand veux tu que ce code soit lancé ?? a l'activation de la feuille ?? au changement d'une cellule particulière,.....

Fred

Au changement des cellules Z ou AS ou AE

Là, excel plante automatiquement si je change une valeur

Je ne connais pas le fichier...

mais il me parait une perte de temps de refaire le calcul sur 64 lignes à chaque fois que tu modifie une valeur sur une seule ligne.....

je voudrais tu pas plutôt faire le calcul de la ligne lorsqu'il y a un changement sur la ligne en question (entre la la ligne 2 et 65) ???

Fred

SI, bien sur, mais je n'ai pas les compétences pour cela.

C'est donc possible...

pour cela

Fred

Voici, mais il devient une pièce montée de VBA et autre...

On est d'accord que l'on parle de la feuille "Effectif" ??

Fred

Re

ci joint une proposition

Fred

Je viens de jeter un œil à la fonction présente aussi sur la feuille "Effectif"

où tu as :

If Not Application.Intersect(Target, Range("AX2:AX67")) Is Nothing Then

Pour moi c'est pas le bonne méthode... car si je comprend bien c'est une liste de personne qui va bouger, le fait le mettre en dur la ligne 67 implique qu'à chaque fois qu'il y a l'ajout d'une nouvelle ligne, il faudra revoir le code pour modifier cela.....

Je peux te proposer une solution si tu veux pour cela...

Fred

Super, mais pourquoi parfois la cellule n'est plus au format nombre et doit être alors convertie ?

Hummmm

j'ai pas compris la question....

la cellule n'est plus au format nombre

De quelle cellule parle tu ?? dans quel cas tu dois la convertir en nombre ??

Fred

Les cellules dont la valeur change (cellules AF) indiquent à chaque changement une erreur nombre stocké sous forme de texte. Du coup dans mes autres calcules, ne sont pas pris en charge

Je ne sais pas ce que tu met dans la colonne AF, ni comment (écriture directe dans la cellule ? copie d'une autre cellule ? autre ?? )

toujours est-il que le format actuel de cette colonne est un format Date

Fred

Heu, je voulais dire AG.

Sur ma feuille de stat, je comptabilise les abonnement mensuels et trimestriels. Si les cellules ne sont pas en format nombre, ca ne compte pas.

Bonsoir

Normal dans ton code du mettais du texte dans la cellule

j'ai corrigé le problème en mettant la fonction Val("20") par exemple ...

attention en VBA le séparateur des décimales n'est pas la virgule mais le point..

Ton fichier en retour

Fred

Merci beaucoup pour ton aide.

Si je veux que mes cellules aient comme valeur non pas un nombre mais une cellule d une autre feuille, dois je déclarer cette feuille ?

Si tu veux utiliser une cellule la feuille "paramètre" par exemple tu peux utiliser une des trois solutions suivantes, sachant que j'ai pris la cellule H56 pour l'exemple mais a adapter évidemment

Range("AG" & i) = Sheets("Paramètres").[H56]
Range("AG" & i) = Sheets("Paramètres").Range("H56")
Range("AG" & i) = Sheets("Paramètres").Cells(56, "H")

Cela fait le même resultat

Fred

Rechercher des sujets similaires à "macro automatique"