OVH Cloud OVH Cloud

Formule sous conditions

4 réponses
Avatar
Txl
Bonjour,

Je voudrais assigner une formule a une cellule mais seulement quand certaines conditons sont remplies, par exemple

Si A1 est <>"" alors la formule de B1 serait A1*2, sinon pas de formule en B1, donc un truc en B1 =si((A1)<>"";A1*2;"")ne marche pas, il faut que B1 n'aie pas de formule si la condition n'est pas remplie.

Merci de votre aide



--
Email contact

http://cerbermail.com/?ltQ8eCFmRa

4 réponses

Avatar
SL
Bonjour
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric([A1]) And [A1] <> "" Then
[B1].Formula = "¡*2"
Else
[B1] = ""
End If
End Sub

Stéphane

"Txl" a écrit dans le message de news:

Bonjour,

Je voudrais assigner une formule a une cellule mais seulement quand
certaines conditons sont remplies, par exemple

Si A1 est <>"" alors la formule de B1 serait A1*2, sinon pas de formule en
B1, donc un truc en B1 =si((A1)<>"";A1*2;"")ne marche pas, il faut que B1
n'aie pas de formule si la condition n'est pas remplie.

Merci de votre aide



--
Email contact

http://cerbermail.com/?ltQ8eCFmRa


Avatar
Txl
Bonjour,

Merci du tuyau, je me doutais bien que ca devrait etre du VBA, aie aie aie...

Par contre est-ce possible d'utiliser des variables dans le coide ?

Je m'explique mieux :

Je veux mettre des formules "optionelles" dans TOUTE un colonne, en fait je veux que les calculs soient fait quand je rentre la valeur initiale dans la colonne A et pour lme moment j'ai j'ai du ctrl+c et ctrl+v pour avoir les formules correspondantes partout, mais le fichier xls résultant fait 16 Mo !!!

Donc je ne voudrais ajouter les formules qu'au moment ou j'en aurai besoin, c'est idiot d'avoir une formule sur la ligne 25000 quand je n'ai que 1500 lignes "actives" au départ, par contre quand j'arrive à la ligne 25000 je ne veux pas etre embété et rajouter des formules...

Donc je voudrais faire un code tel que le tien mais sans préciser de cellule, en fait je voulais faire quelque chose du genre "on exit" sous access pour que dire que dès que je sors de la cellule "Ax" il faut mettre la formule dans la cellule "Bx", en plus de cela évidemment la formule change en fonction de la ligne, donc il faudrait aussi calculer ca....

Ci-joint des exemples de formules que j'ai ai à rajouter automatiquement :

En B23 (mais valable pour toute la colonne B sauf B1)

=SI(A23="";"";SI(B23="";AUJOURDHUI();B23))

En C23 (mais pour tout C sauf C1)

=SI(A23="";"";SI(C23="";MAINTENANT();C23))

En D23 (mais pour D sauf D1)

=SI(A23<>"";(SI((TEXTE(B22;0)=TEXTE(B23;0));C23-C22;C23+(24-C22)));"")

Et en E23 pareil que le reste :-)

=SI(A23<>"";(SI((TEXTE(B22;0)=TEXTE(B23;0));E22+A23;A23));"")

Voila, si tu pouvais me faire le code pour en intégrer une, je me débrouille avec les autres, peut etre ca serait plus facile de faire ca avec des références de cellules relatives ?

MErci de ton aide car en VBA je suis ENCORE plus nul qu'en excel "normal"...



Bonjour
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric([A1]) And [A1] <> "" Then
[B1].Formula = "¡*2"
Else
[B1] = ""
End If
End Sub

Stéphane

"Txl" a écrit dans le message de news:

Bonjour,

Je voudrais assigner une formule a une cellule mais seulement quand
certaines conditons sont remplies, par exemple

Si A1 est <>"" alors la formule de B1 serait A1*2, sinon pas de formule en
B1, donc un truc en B1 =si((A1)<>"";A1*2;"")ne marche pas, il faut que B1
n'aie pas de formule si la condition n'est pas remplie.

Merci de votre aide



--
Email contact

http://cerbermail.com/?ltQ8eCFmRa








--
Email contact

http://cerbermail.com/?ltQ8eCFmRa


Avatar
SL
Re-bonjour
En C23 (mais pour tout C sauf C1)
=SI(A23="";"";SI(C23="";MAINTENANT();C23))
Attention, tes formules te génèreront des références circulaires


de plus si la colonne B sont des dates, (TEXTE(B22;0)=TEXTE(B23;0) équivaut
à B22²3.

plutôt que de rentrer des formules en VBA, mieux vaut rentrer les valeurs :
si j'ai bien compris ce que tu souhaitais voici un début de code :

Private Sub Worksheet_Change(ByVal zz As Range)
If zz <> "" And Not Intersect(zz, Range("A2:A1000")) Is Nothing Then
If zz.Offset(0, 1) = "" Then zz.Offset(0, 1) = Date
If zz.Offset(0, 2) = "" Then zz.Offset(0, 2) = Time
If zz.Offset(-1, 1) = zz.Offset(0, 1) Then
zz.Offset(0, 3) = zz.Offset(0, 2) - zz.Offset(-1, 2)
Else
zz.Offset(0, 3) = 24 - zz.Offset(0, 2) + zz.Offset(-1, 2)
End If
'...
End If
End Sub

Autre possibilité, entrer tes données en A, copier les formules puis
copier/collage spécial les valeurs.

Met l'enregistreur de macro en route, fait tes manips et essaie de
comprendre la macro, de la simplifier, de l'adapter.
C'est comme cela que l'on débute en VBA.
Stéphane

"Txl" a écrit dans le message de news:

Bonjour,

Merci du tuyau, je me doutais bien que ca devrait etre du VBA, aie aie
aie...

Par contre est-ce possible d'utiliser des variables dans le coide ?

Je m'explique mieux :

Je veux mettre des formules "optionelles" dans TOUTE un colonne, en fait
je veux que les calculs soient fait quand je rentre la valeur initiale
dans la colonne A et pour lme moment j'ai j'ai du ctrl+c et ctrl+v pour
avoir les formules correspondantes partout, mais le fichier xls résultant
fait 16 Mo !!!

Donc je ne voudrais ajouter les formules qu'au moment ou j'en aurai
besoin, c'est idiot d'avoir une formule sur la ligne 25000 quand je n'ai
que 1500 lignes "actives" au départ, par contre quand j'arrive à la ligne
25000 je ne veux pas etre embété et rajouter des formules...

Donc je voudrais faire un code tel que le tien mais sans préciser de
cellule, en fait je voulais faire quelque chose du genre "on exit" sous
access pour que dire que dès que je sors de la cellule "Ax" il faut mettre
la formule dans la cellule "Bx", en plus de cela évidemment la formule
change en fonction de la ligne, donc il faudrait aussi calculer ca....

Ci-joint des exemples de formules que j'ai ai à rajouter automatiquement :

En B23 (mais valable pour toute la colonne B sauf B1)

=SI(A23="";"";SI(B23="";AUJOURDHUI();B23))

En C23 (mais pour tout C sauf C1)

=SI(A23="";"";SI(C23="";MAINTENANT();C23))

En D23 (mais pour D sauf D1)

=SI(A23<>"";(SI((TEXTE(B22;0)=TEXTE(B23;0));C23-C22;C23+(24-C22)));"")

Et en E23 pareil que le reste :-)

=SI(A23<>"";(SI((TEXTE(B22;0)=TEXTE(B23;0));E22+A23;A23));"")

Voila, si tu pouvais me faire le code pour en intégrer une, je me
débrouille avec les autres, peut etre ca serait plus facile de faire ca
avec des références de cellules relatives ?

MErci de ton aide car en VBA je suis ENCORE plus nul qu'en excel
"normal"...



Bonjour
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric([A1]) And [A1] <> "" Then
[B1].Formula = "¡*2"
Else
[B1] = ""
End If
End Sub

Stéphane

"Txl" a écrit dans le message de news:

Bonjour,

Je voudrais assigner une formule a une cellule mais seulement quand
certaines conditons sont remplies, par exemple

Si A1 est <>"" alors la formule de B1 serait A1*2, sinon pas de formule
en
B1, donc un truc en B1 =si((A1)<>"";A1*2;"")ne marche pas, il faut que
B1
n'aie pas de formule si la condition n'est pas remplie.

Merci de votre aide



--
Email contact

http://cerbermail.com/?ltQ8eCFmRa








--
Email contact

http://cerbermail.com/?ltQ8eCFmRa




Avatar
Txl
Le Fri, 14 Oct 2005 14:36:43 +0200, SL a écrit:

Re-bonjour
En C23 (mais pour tout C sauf C1)
=SI(A23="";"";SI(C23="";MAINTENANT();C23))
Attention, tes formules te génèreront des références circulaires



Oui, je sais, mais j'ai coché la case des itérations et ca marche nickel, en fait quand je rentre une valeur dans la colonne A ca me rentre la date en B, l'heure en C, la différence entre les 2 dernières valeurs entrées en heures.minutes en D et le cumul journalier des valeurs de A en E.

Par contre ensuite je traite ces valeurs pour avoir un graphique donc je ne voudrais pas trop modifer mes formats existants...et j'ai pezur que si je rentre en VBA ensuite les valeurs seront "fausses" par rapport au calculs que je fais dessus notamment pour le cumul journalier ou il me faut la date et pour la différence en temps ou il me faut l'heure, j'en ai tellement chié pour avoir ces champs qui marchent que j'ai peur de modifier ca en VBA.

On peut pas faire un truc du genre

"Lis la ligne ou on vient de rentrer une valeur dans la colonne A et met des formules dans les colonnes B, C, D et E sur la meme ligne" ?

Merci de ton aide, en attendant je regarde déja ta macro...






de plus si la colonne B sont des dates, (TEXTE(B22;0)=TEXTE(B23;0) équivaut
à B22²3.

plutôt que de rentrer des formules en VBA, mieux vaut rentrer les valeurs :
si j'ai bien compris ce que tu souhaitais voici un début de code :

Private Sub Worksheet_Change(ByVal zz As Range)
If zz <> "" And Not Intersect(zz, Range("A2:A1000")) Is Nothing Then
If zz.Offset(0, 1) = "" Then zz.Offset(0, 1) = Date
If zz.Offset(0, 2) = "" Then zz.Offset(0, 2) = Time
If zz.Offset(-1, 1) = zz.Offset(0, 1) Then
zz.Offset(0, 3) = zz.Offset(0, 2) - zz.Offset(-1, 2)
Else
zz.Offset(0, 3) = 24 - zz.Offset(0, 2) + zz.Offset(-1, 2)
End If
'...
End If
End Sub

Autre possibilité, entrer tes données en A, copier les formules puis
copier/collage spécial les valeurs.

Met l'enregistreur de macro en route, fait tes manips et essaie de
comprendre la macro, de la simplifier, de l'adapter.
C'est comme cela que l'on débute en VBA.
Stéphane

"Txl" a écrit dans le message de news:

Bonjour,

Merci du tuyau, je me doutais bien que ca devrait etre du VBA, aie aie
aie...

Par contre est-ce possible d'utiliser des variables dans le coide ?

Je m'explique mieux :

Je veux mettre des formules "optionelles" dans TOUTE un colonne, en fait
je veux que les calculs soient fait quand je rentre la valeur initiale
dans la colonne A et pour lme moment j'ai j'ai du ctrl+c et ctrl+v pour
avoir les formules correspondantes partout, mais le fichier xls résultant
fait 16 Mo !!!

Donc je ne voudrais ajouter les formules qu'au moment ou j'en aurai
besoin, c'est idiot d'avoir une formule sur la ligne 25000 quand je n'ai
que 1500 lignes "actives" au départ, par contre quand j'arrive à la ligne
25000 je ne veux pas etre embété et rajouter des formules...

Donc je voudrais faire un code tel que le tien mais sans préciser de
cellule, en fait je voulais faire quelque chose du genre "on exit" sous
access pour que dire que dès que je sors de la cellule "Ax" il faut mettre
la formule dans la cellule "Bx", en plus de cela évidemment la formule
change en fonction de la ligne, donc il faudrait aussi calculer ca....

Ci-joint des exemples de formules que j'ai ai à rajouter automatiquement :

En B23 (mais valable pour toute la colonne B sauf B1)

=SI(A23="";"";SI(B23="";AUJOURDHUI();B23))

En C23 (mais pour tout C sauf C1)

=SI(A23="";"";SI(C23="";MAINTENANT();C23))

En D23 (mais pour D sauf D1)

=SI(A23<>"";(SI((TEXTE(B22;0)=TEXTE(B23;0));C23-C22;C23+(24-C22)));"")

Et en E23 pareil que le reste :-)

=SI(A23<>"";(SI((TEXTE(B22;0)=TEXTE(B23;0));E22+A23;A23));"")

Voila, si tu pouvais me faire le code pour en intégrer une, je me
débrouille avec les autres, peut etre ca serait plus facile de faire ca
avec des références de cellules relatives ?

MErci de ton aide car en VBA je suis ENCORE plus nul qu'en excel
"normal"...



Bonjour
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric([A1]) And [A1] <> "" Then
[B1].Formula = "¡*2"
Else
[B1] = ""
End If
End Sub

Stéphane

"Txl" a écrit dans le message de news:

Bonjour,

Je voudrais assigner une formule a une cellule mais seulement quand
certaines conditons sont remplies, par exemple

Si A1 est <>"" alors la formule de B1 serait A1*2, sinon pas de formule
en
B1, donc un truc en B1 =si((A1)<>"";A1*2;"")ne marche pas, il faut que
B1
n'aie pas de formule si la condition n'est pas remplie.

Merci de votre aide



--
Email contact

http://cerbermail.com/?ltQ8eCFmRa








--
Email contact

http://cerbermail.com/?ltQ8eCFmRa








--
Email contact

http://cerbermail.com/?ltQ8eCFmRa