UserfForm dans Fonction IF

Bonjour tout le monde,

est-il possible de commander l'execution d'un userform dans une boucle SI sous VBA.

Plus concrètement, j'applique à une cellule une fonction IF, avec 2 conditions : si la cellule visée égale 0, une valeur précise apparait (ici la valeur écrite en B2), si la cellule visée est égale à 1, un userform s'ouvre et l'utilisateur rentre une valeur dedans (qui est ensuite reportée dans la cellule).

La formule devrait ressembler à quelquechose comme ça je pense :

Range("B1").FormulaR1C1 = "=IF(RC[-1] = ""0"",R2C2,RC[-1] = ""1"",UserForm)"

Mais je ne sais pas comment écrire l'apparition de l'UserForm ... Quelqu'un sait-il s'il est possible de faire ça, et comment le faire?

Merci d'avance !

Bonjour

Essaie ce code à mettre dans la macro SUB en question

Select Case Range("A1")
Case Is = 0
Range("B1") = Range("B2")
Case Is = 1
UserForm1.Show
End Select

Amicalement

Dan

Bonjour Dan,

ton code fonctionne bien, mais dans mon cas il faudrait que se soit dans un code du type FormulaR1C1.

En fait je crée des lignes dans une boucle For, et j'attribue des formules à chaque cellule, si bien qu'une fois la boucle terminée les formules sont attribuées aux cellules et vont être utilisées lorsque l'on rentrera des valeurs par la suite.

Si je met ton code dans ma boucle, il ne se passera rien, et une fois la boucle terminée aucune formule ne sera "attachée" à ma cellule. Voila tout mon problème..

Voila, je sais pas trop si c'est possible et si j'en demande pas un peu trop... Si quelqu'un a une piste je suis bien sur preneur

Re,

Peux-tu mettre le code complet ou mieux un fichier ? Ce sera plus facile

A te relire

Dan

Bonjour Dan,

tu trouvera ci-joint un fichier représentatif de mon problème.

Tu rentres une valeur en A1. Il se crée autant de lignes en-dessous. Ensuite, pour chaque premiere cellule de lignes, tu rentres A ou B. Si tu rentres A, il apparait OK dans la 2eme cellule, si tu rentres B un userform apparait, dans lequel on rentre une valeur qui ira ensuite dans la 2 eme cellule.

C'est cette partie UserForm que je n'arrive pas à programmer...

J'espère que mon fichier t'aidera, n'hesites pas si tu as d'autres questions

Merci d'avance !

re,

Merci de ton fichier.

Juste avant END SUB, mets ceci :

If UCase(Target) = "B" Then UserForm1.Show

Avec Userform1 le nom de ton USF.

En debut de ta macro juste après PRIVATE SUB ..., il faut déclarer tes variables..

Dim nblig As Integer, lig As Integer

Au milieu de ta macro change le code par ceci :

With Rows(lig & ":" & lig + (CLng(nblig) - 1)) '.Select
        .Insert Shift:=xlDown
        .HorizontalAlignment = xlCenter
End With

Amicalement

Dan

Re,

j'ai essayé de faire comme tu m'as dit, mais il me met une erreur "incompatibilité de type"... Qu'est ce que la fonction UCase exactement, comment fait-elle pour s'appliquer uniquement aux 1eres cellules des lignes?

Sinon merci pour tes autres conseils, c'est cool

re,

Je n'ai aucune erreur dans la fichier que tu m'as donné.

Le message peut venir du nom de ton USF (fais gaffe aux espaces par exemple...).

Sur quelle instruction reçois-tu ce message ?

Le UCASE permet de contrôler la valeur Target en majuscule. Tu dois le laisser pour le cas où tu mélangerais les majuscules et minuscule ("b" ou "B") dans ta colonne A.

A te relire

Dan

Re,

je reçois ce message d'erreur sur l'instruction If UCase(Target) = "B" Then uniquement. Mon USF a bien le même nom, pas de problèmes d'espace.

J'ai placé l'instruction que tu m'as donné à la fin, entre le EndIf et le EndSub. Cela ne fonctionne pas.

Cela marche chez toi, le USF s'affiche? Si oui je ne vois pas ou est mon erreur, je n'ai absolument rien modifié au code du fichier initial entre-temps..

Re,

Vois le fichier joint puis tapes "b" ou "B" dans A4 ou A5

Dan

Bonjour Dan,

Ton fichier fonctionne bien, merci. Mais le problème est que le UserForm apparait si on met B dans n'import quelle cellule de la feuille (due à l'instruction Target). Y'a t-il possibilité de cantonner cela uniquement aux cellules créées? Dans le cas de notre exemple, les cellules A4 et A5.

Cordialement

Re,

Oui, c'est possible. Le tout est de voir comment tu fonctionnes dans le fichier car je suppose que tu ne complètes pas que dans A4 et A5. Tu peux avoir des lignes plus bas, non ?

D'autre part est-il possible que tu aies deux tableaux ou plus. Là par exemple, tu mets en A1 --> 2, cela crèe les cellules en jaune en ligne 4 et 5. Puis si tu remets en A1 --> 3, cela crèe 3 lignes (4, 5, 6) et fais dépalce les lignes 4 et 5 vers les lignes 9 et 10.

Dan

Re,

oui je peux avoir des lignes plus bas, comme tu l'a décris. Le but serait donc d'appliquer la formule UserForm lors de la création des cellules, et aux cellules concernées uniquement.

C'est ce que j'ai fait dans le fichier ci-joint pour une multiplication basique par exemple : les 5eme cellules des lignes créées se sont vu attribuer une formule qui multiplie les 2 valeurs précedentes. Et uniquement ces scellules. C'est ce que j'aimerai faire avec le UserForm. Je pense qu'il faut donc mettre la commande dans la boucle For (voir fichier). Mais cela malheuresement, je ne sais pas comment le faire...

Cordialement.

re,

Ton nouveau fichier est différent du premier ... pas de USERFORM présente et ta macro ne comporte aucune des modif que je t'ai donnée..

la formule UserForm lors de la création des cellules

Que veux tu dire ?? une USERFORM est un objet par une formule...

Sinon, remplace l'instruction que je t'avais dit de placer avant le END IF et le END SUB par celles ci-dessous :

If Not Intersect(Target, Range("A4:A" & Range("A65536").End(xlUp).Row)) Is Nothing Then
If Target.Interior.ColorIndex = 27 Then If UCase(Target) = "B" Then UserForm1.Show
End If

Dan

Rechercher des sujets similaires à "userfform fonction"