remplacer par une valeur conditionnelle dans une VBA

Bigro

XLDnaute Nouveau
Bonjour a tous,

L'utilisateur de ma feuille excel sera amené a écrire un mois dans une textbox. De la j'aimerai qu'il puisse utiliser un bouton de commande qui lui permettrai de changer le mot "template" en "le mois rentré dans le textbox" ET le mot "temp" en "l'abbreviation du mois rentré dans le textbox"

pour le moment j'ai du faire deux textbox ou l'utilisateur rentre le mois puis l'abbreviation et clique sur un bouton dont voici le code :

Code:
Range("B3").Select
    Cells.Replace What:="template", Replacement:=TextBox1, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Range("B3").Select
    Cells.Replace What:="temp", Replacement:=TextBox3, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

je ne sais pas comment ecrire du genre:
Replacement:=if(TextBox1=Janvier,Jan,if(Textbox1=Fevrier,Fevrier,.....)))

Ce sont mes premiers codes VBA, et je me contente en gros d'enregistrer une macro et de regarder ce que je peux faire avec le code enregistré...

Merci a tous,

Bigro
 

vbacrumble

XLDnaute Accro
Re : remplacer par une valeur conditionnelle dans une VBA

Bonjour



Ce sont mes premiers codes VBA, et je me contente en gros d'enregistrer une macro et de regarder ce que je peux faire avec le code enregistré...


Bravo. c'est une très bonne méthode pour commencer le VBA.

Voici une macro qui pourrait t'aider
Code:
Sub macrotest()
Dim abrv(12), mois(12), i&
For i = 0 To 11
mois(i) = Format(30 * (i + 1), "mmmm")
abrv(i) = Format(30 * (i + 1), "mmm")
Next
MsgBox mois(0) & "  " & abrv(0)
End Sub
 
Dernière édition:

Bigro

XLDnaute Nouveau
Re : remplacer par une valeur conditionnelle dans une VBA

:eek:dediou, je comprends pas tout hahaha ^^ :D

je ne sais pas comment utiliser tout ca...

En tout cas merci, je vais me prendre une pause dejeuner et j'essai d'ici une heure donc...

pfiou, j'ai deja 50 000 questions (donc la plus basic se rapproche du "comment on s'en sert ^^")...

Bon, j'arrete de me plaindre et d'ici une heure ou deux je te fais un comte rendu de ce que j'ai compris (ou pas)
 

vbacrumble

XLDnaute Accro
Re : remplacer par une valeur conditionnelle dans une VBA

Re


La macro permet de créer deux tableaus (ou array) :
Le tableau nommé mois contient la liste des mois de janvier à décembre
Le tableau nommé abrv contient le nom des mois abrégés de janv à déc
 

Bigro

XLDnaute Nouveau
Re : remplacer par une valeur conditionnelle dans une VBA

Alors, j'en déduis plus ou mois ceci:

Code:
Dim abrv(12), mois(12), i&
For i = 0 To 11
mois(i) = Format(30 * (i + 1), "mmmm")
abrv(i) = Format(30 * (i + 1), "mmm")
Next

Range("B3").Select
    Cells.Replace What:="template", Replacement:=mois(TextBox1), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Range("B3").Select
    Cells.Replace What:="temp", Replacement:=abrv(TextBox1), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Mais quel que soit le numero dans la textbox, ca me sors le mois janvier et l'abréviation janv...
Je suis un peu bloqué, si tu peux me redonner un coup de main...

Modification : Heu, finalement ca marche...j'avais copier le code sur une macro pour faire quelques test sur une feuille plus legere et ca ne marchait pas.... et sur le bouton ca marche...
Enfin, je vais modifier un brin, parce que j'aime pas que Janvier = 0, je prefererais Janvier = 1.
Je te tiens au courant

Modification 2: Bon ben ca a l'air de marcher avec ca, tu en pense quoi?


Code:
Dim abrv(12), mois(12), i&
For i = 1 To 12
mois(i) = Format(30 * (i), "mmmm")
abrv(i) = Format(30 * (i), "mmm")
Next

Range("B3").Select
    Cells.Replace What:="template", Replacement:=mois(TextBox1), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Range("B3").Select
    Cells.Replace What:="temp", Replacement:=abrv(TextBox1), LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

Et j'en oubliais le plus important : Merci! Thank you so much comme on dit ici!
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : remplacer par une valeur conditionnelle dans une VBA

Re



Essaye de t'inspirer de cette macro
Code:
sub testmacro()
Dim a(12), mois(12), i&, aa$, b$
b = InputBox("Saisir le nom d'un mois, svp" & Chr(13) & " (en respectant l'orthographe naccents inclus)")
For i = 0 To 11
    mois(i) = Format(30 * (i + 1), "mmmm")
    a(i) = Format(30 * (i + 1), "mmm")
Next

aa = _
        Switch(b = "janvier", a(0), b = "février", a(1), b = "mars", a(2), b = "avril", a(3), _
        b = "mai", a(4), b = "juin", a(5), b = "juillet", a(6), b = "août", a(7), _
        b = "septembre", a(9), b = "octobre", a(9), b = "novembre", a(10), b = "décembre", a(11))

Cells.Replace "template", b, xlPart, xlByRows, False
Cells.Replace "temp", aa, xlPart, xlByRows, False
end sub
 

Bigro

XLDnaute Nouveau
Re : remplacer par une valeur conditionnelle dans une VBA

Super!!!
Donc la tu as carrement viré la textbox pour afficher une boite de dialogue: C'est absolument extraordinaire!

Je suis super content hahahaha:D

J'ai modifié 2-3 trucs juste parce que je prefere que les mois soient en 1-12 et parce que ici ils parlent tous anglais ^^

on arrive donc a
Code:
Private Sub CommandButton1_Click()

Dim a(12), mois(12), i&, aa$, b$
b = InputBox("type month name please" & Chr(13) & " (case sensitive)")
For i = 1 To 12
mois(i) = Format(30 * (i), "mmmm")
a(i) = Format(30 * (i), "mmm")

Next

aa = _
        Switch(b = "January", a(1), b = "February", a(2), b = "March", a(3), b = "April", a(4), _
        b = "May", a(5), b = "June", a(6), b = "July", a(7), b = "August", a(8), _
        b = "September", a(9), b = "October", a(10), b = "November", a(11), b = "December", a(12))

Cells.Replace "template", b, xlPart, xlByRows, False
Cells.Replace "temp", aa, xlPart, xlByRows, False

End Sub

Tu as de la chance de pas etre a coté de moi sinon je te ferais un bisous mouhahahaha

Mais sinon, qu'est-ce qui fait qu'une fenetre s'est ouverte? c'est le b=inputbox?

Je garde ce code pour le reutilisé en piece detaché :D, car le copier/colelr comme je le fait est une chose mais pour l'ecrire comme toi :eek:

Encore merci!

ps: je fais comment pour que lorsaque je clic sur annuler je ne fasse pas buger le prog? :D
 
Dernière édition:

Bigro

XLDnaute Nouveau
Re : remplacer par une valeur conditionnelle dans une VBA

J'ai trouvé quelque chose sur le forum:

Code:
If b = "" Then Exit Sub

Et j'y pense d'ailleurs, y'a t'il un moyen de mettre un message d'erreur maison en cas de faute de frappe?
Par exemple si l'utilisateur tape "Janaury" au lieu de "January", qu'il ai un message type "mois non reconnu, veuillez ré-essayer" ?

Merci

Bigro


Modification:
ps: J'en ai deduis ce code:
Code:
If b <> "January" And b <> "February" And b <> "March" And b <> "April" And b <> "May" And b <> "June" And b <> "July" And b <> "August" And b <> "September" And b <> "October" And b <> "November" And b <> "December" Then MsgBox "error, please try again"
If b <> "January" And b <> "February" And b <> "March" And b <> "April" And b <> "May" And b <> "June" And b <> "July" And b <> "August" And b <> "September" And b <> "October" And b <> "November" And b <> "December" Then Exit Sub

Rien de très exitant quoi, voir un peu moche, mais ca a l'air de marcher ^^
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
137

Statistiques des forums

Discussions
312 490
Messages
2 088 879
Membres
103 981
dernier inscrit
vinsalcatraz