automatiser fonction si

alex67800

XLDnaute Impliqué
Bonjour tout le monde,

Me revoilà.
Encore une petite question, cette fois avec la fonction si dans une macro worksheet.:confused:

Je souhaiterai que SI la plage de cellule B1:B est une date, A1:A m'indique le numéro de semaine correspondant avec la formule suivnate:
=ENT(MOD(ENT((B1-2)/7)+0,6;52+5/28))+1
Donc à chaque fois qu'une cellule en B en renseigné par une date A indique l'équivalent.
Si B1:B vide alors A1:A="".

Ensuite toujours dans le même esprit, avec la fonction suivante pour D1: D
SI(C1:C="Pannes";"pa";SI(C1:C="Autres";""au";"mar")), en fait ce sont des fonctions si imbriquer il y en a 4 en tout.

Les plages de cellules B1:B et C1:C sont remplis par un USF.

Donc à chaque ligne renseigné par l'USF, je souhaite que la même ligne applique les fonctions SI, concerné.

Biensur les colonnes sitées ne sont que des exemples.
C'est assez avec les fonctions dans une cellule mais de là à la répéter pour toute une colonne c'est lourd.
Merci d'avance pour votre aide.

Je suppose qu'il faut mettre la macro directement dans worksheet, mais en activate? Change?Click? la je suis perdut.

Bonne journée à toutes et à tous.
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : automatiser fonction si

Bonjour Alex

comprends pas trop, si tes colonnes B et C sont alimentées via un USF, pourquoi ne pas renseigner les colonnes A et D directement via le code de l'usf, et ce en fonction des informations saisies. Cela te permettrait de renvoyer le résultat dans les cellules plutôt qu'une fonction.

bonne journée
@+
 

alex67800

XLDnaute Impliqué
Re : automatiser fonction si

Bonjour Alex

comprends pas trop, si tes colonnes B et C sont alimentées via un USF, pourquoi ne pas renseigner les colonnes A et D directement via le code de l'usf, et ce en fonction des informations saisies. Cela te permettrait de renvoyer le résultat dans les cellules plutôt qu'une fonction.

bonne journée
@+

Bonjour Pierrot93,
Heureux de recroiser sur le forum.
Il ne s'agit pas simplement de reproduire les même valeurs avec les mêmes formes.
Mais un format en fonction de celle-ci justement.
En clair si avec l'usf je fait:
With Sheets ("blabla")
Nl = .Range("A65536").End(xlUp).Row + 1
.range ("A" & N1).value = Datebox1.value
.range ("B" & N1).value = Datebox1.value

Comment je donne la forme =ENT(MOD(ENT((B1-2)/7)+0,6;52+5/28))+1
à A1:A?

De même que pour D1:D:
With Sheets ("blabla")
Nl = .Range("A65536").End(xlUp).Row + 1
.range ("C" & N1).value = combobox4.value
.range ("D" & N1).value = combobox4.value

à moins pour cette dernière de faire du genre:
If combox4.value = "Pannes"
Then .range ("C" & N1).value = "pa"
End If
If combox4.value = "Autres"
Then .range ("C" & N1).value = "au"
End If
etc.... pour les 3 autres cas de figure.

Je ne suis pas sur de mon coup là.:eek:

je reste ouvert à toute suggestion effectivement, avec un peitit coup de pouce pour le code.
Je progresse un peu chaque jour en vba, mais suis loin d'être une lumière:rolleyes:

Merci Pierrot de t'interesser à mon fil.

A moins de nommer les colonnes et d'y inclure les fonctions?!?
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : automatiser fonction si

Bonjour Alex

Regarde les codes ci-dessous, le 1er pour renvoyer le résultat dans la cellule :

Code:
.Range("A" & N1).Value = DatePart("ww", CDate(Datebox1.Value), 2, 2)

le 2ème pour renvoyer la formule :

Code:
.Range("A" & N1).FormulaLocal = "=ENT(MOD(ENT((B1-2)/7)+0,6;52+5/28))+1"

tu as le choix...

bonne journée
@+
 

alex67800

XLDnaute Impliqué
Re : automatiser fonction si

Re,
tu as bien raison.
J'ai fait un essai de la mainière suivante:
J'ai nommé une colonne et mis la fonction suivante:
=ENT(MOD(ENT((B1-2)/7)+0,6;52+5/28))+1

Quand j' tape en B1 une date 12/11/08 cela fonctionne.
Par contre quand je passe par la datebox de l'usf la aucun effet.

La seule différence que je constate dans la cellule est que la date n'est pas écrit de al même taille.
Sinon j'ai bien 12/11/08?
La mise en forme de ma datebox est la suivante dans l'initialize:

DateBox1.Value = Format(Now(), "dd/mm/yyyy") 'met sous format français la date du jour dans le textbox date.

Ce serait pourtant la forme date qui pose problème pour ma formule.

J'ai bricolé un petit bout de code de se que je souhauterai. Il est pas génial mais cela donne une idée de ce que je souhaiterai obtenir.

Merci d'avance.
 

Pièces jointes

  • testdate.xls
    39 KB · Affichages: 70
  • testdate.xls
    39 KB · Affichages: 74
  • testdate.xls
    39 KB · Affichages: 74

Pierrot93

XLDnaute Barbatruc
Re : automatiser fonction si

Bonjour Alex,

j'ai modifié le code de ton bouton validé comme suit, chez moi cela à l'air de fonctionner :

Code:
Private Sub cmdValider_Click()
Dim Nl As Integer
If ComboBox1.ListIndex = -1 Then MsgBox "saisie invalide!!!": Exit Sub
With Sheets("TRS")
    Nl = .Range("A65536").End(xlUp).Row + 1    'Dans quelle ligne je vais écrire
    .Range("B" & Nl).Value = CDate(DateBox1.Value) 'Date
    .Range("A" & Nl).Value = "S" & DatePart("ww", CDate(DateBox1.Value), 2, 2)
    .Range("D" & Nl).Value = ComboBox1.Value 'item
    If ComboBox1.Value = "autres" Then
        .Range("E" & Nl).Value = "au"
        ElseIf ComboBox1.Value = "divers" Then .Range("E" & Nl).Value = "div"
        ElseIf ComboBox1.Value = "pannes" Then .Range("E" & Nl).Value = "pa"
        'A noter tu peux rajouter d'autres conditions ElseIf
    Else
        .Range("E" & Nl).Value = "ERR"
    End If
End With
ComboBox1.Value = ""
End Sub

bonne journée
@+
 

alex67800

XLDnaute Impliqué
Re : automatiser fonction si

Super,
C'est simplement génial.
Peus-tu m'expliquerpourquoi cela ne focntionnait pas alors que le format date était le bon?
La j'avoue que je ne saisie pas. La mise en forme pas reconnut?

En tout cas merci encore pour ton aide précieuse.
 

alex67800

XLDnaute Impliqué
Re : automatiser fonction si

Bonjour Pierrot,
J'ai à nouveau besoin de ton aide, et toujours dans le même esprit.

Je voulais utiliser la formule que tu m'avais concocté:
If ComboBox1.Value = "autres" Then
.Range("E" & Nl).Value = "au"
ElseIf ComboBox1.Value = "divers" Then .Range("E" & Nl).Value = "div"

Mais cette fois pour effectuer une multiplication du genre:
If ComboBox3.Value = "LIGNE1" Then
.Range("E" & N1).Value = .Range("F" & N1) * 220
ElseIf ComboBox3.Value = "LIGNE2" Then
.Range("F" & N1).Value = .Range("F" & N1) * 555
Donc que F se multiplie par 220 ou 555 selon combo3,
et ainsi de suite il y aura pas mal de ElseIF.

Apparement cette méthode ne fonctionne pas dans ce cas, bizarre!
Je dois sûrement me tromper dans la casse.

Merci d'avance et désolé de t'embêter encore une fois.
 

Pierrot93

XLDnaute Barbatruc
Re : automatiser fonction si

bonjour Alex

il ne doit pas y avoir de saut de ligne dans la condition "elseif", essaiyes comme ci-dessous :

Code:
ElseIf ComboBox3.Value = "LIGNE2" Then _
 .Range("F" & N1).Value = .Range("F" & N1) * 555
bon après midi.
@+
 
Dernière édition:

alex67800

XLDnaute Impliqué
Re : automatiser fonction si

Bonjour Pierrot,
Toujours aussi rapide à répondre merci.
Dans ma macro il ni a pas de retour à la ligne avec mon ElseIf, c'est lors de mon c/c ici que je l'ai mis erreur de ma part pour une bonne compréhension et t'a induit en erreur.

Toutefois j'ai trouvé d'ou venais l'erreur et remplacé:
ElseIf ComboBox3.Value = "LIGNE2" Then .Range("F" & N1).Value = .Range("F" & N1) * 555
par
If ComboBox3.Value = "LIGNE1" Then
.Range("i" & Nl).Value = TextBox2.value * 220
ElseIf ComboBox3.Value = "LIGNE2" Then .Range("i" & Nl).Value = TextBox2.Value * 555
End If

Sa ne pouvais pas fonctionner car c'est mon cvalider qui valide les données en .Range F.

Donc quand If et Else If se lance la cellule est encore Vide!!! Suis bête.
 

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 113
Membres
103 474
dernier inscrit
taha1995