VBA

Résolu/Fermé
rafi382 - 10 mars 2014 à 17:06
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 13 mars 2014 à 13:27
Bonjour,

Je suis un débutant en vba et un code ne marche pas, le voilà:

If country = "UK" Then UK()
ElseIf country = "Austria" Then Austria()
... (avec d'autres pays)
End if


ici UK est une sous routine que j'ai défini par ailleurs et country provient d'une inputbox donc c'est l'utilisateur qui est censé choisir sont pays.


Quelqu'un a t-il une idée ? Merci d'avance à vous.

8 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 mars 2014 à 09:37
Bonjour,

excusez l'incruste

plutôt que d'utiliser des elseif utilise plutôt select case

Select Case country
Case "uk"
Call UK
Case "austria"
Call Austria
'etc...
End Select

d'autre part et au passage:
Dim salesnmrmri, salessg, saless, salesfo, volumenmrmri, volumesg, volumes, volumefo, aspnmrmri, aspsg, asps, aspfo As Double 
seul aspfo est du type double, les autres sont du type variant/ Il faudrait énumérer le type de chaque variable d'où le pensum
dim machin as double, truc as double...

enfin ton code me parait bien compliqué: dès que j'aurai un moment je te proposerai autre chose si tu le désires (uniquement). a propos les macro appelées exécutent elles des actions similaires ?
1
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 mars 2014 à 17:18
Bonjour,

Tu peux faire ce test
Sub Test()
Dim Country As String
Country = InputBox("Veuillez saisir le nom du pays.", "CHOIX DU PAYS", "UK")
If Country = "UK" Then
UK
ElseIf Country = "Austria" Then
Austria
End If
End Sub
Sub UK()
MsgBox "Tu as choisi UK"
End Sub
Sub Austria()
MsgBox "Tu as choisi Austria"
End Sub

A+
0
Bonsoir Gyrus, Merci pour ta réponse!
Alors enfait jai déjà le code globale qui ressemble beaucoup a ce que tu as mis mais mon problème est que lorsque j'ouvre mon document la procédure commence comme ça, je choisis le pays et là message d'erreur sur le bloc if. Comme si juste le UK alors que c'est le nom de ma sous-routine ne suffisait pas ou n'est pas correcte pour la lancer.
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
10 mars 2014 à 17:42
As-tu essayé d'écrire et de placer le bloc if comme je te l'ai indiqué ?

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oui j'ai essayé mais j'ais un message d'erreur: Else sans if
Voilà mon code:

Sub Workbook_Open()
Dim country As String
Dim salesnmrmri, salessg, saless, salesfo, volumenmrmri, volumesg, volumes, volumefo, aspnmrmri, aspsg, asps, aspfo As Double
Dim growth As Single

country = InputBox("Choose your country in the following list:" & Chr(10) & "UK" & Chr(10) & "Austria" & Chr(10) & "Poland" & Chr(10) & "Greece" & Chr(10) & "Japan" & Chr(10) & "China" & Chr(10) & "Taiwan" & Chr(10) & "Korea" & Chr(10) & "Singapore" & Chr(10) & "The Philippines" & Chr(10) & "Malaysia" & Chr(10) & "Vietnam" & Chr(10) & "Indonesia" & Chr(10) & "U.S." & Chr(10) & "Canada" & Chr(10) & "Mexico" & Chr(10) & "UAE" & Chr(10) & "Egypt" & Chr(10) & "Saudi Arabia" & Chr(10) & "India" & Chr(10) & "Gabon" & Chr(10) & "South Africa" & Chr(10) & "Brazil" & Chr(10) & "Argentina" & Chr(10) & "French Guyanna", "Country")

Do Until country = "UK" Or country = "Austria" Or country = "Poland" Or country = "Greece" Or country = "Japan" Or country = "China" Or country = "Taiwan" Or country = "Korea" Or country = "Singapore" Or country = "The Philippines" Or country = "Malaysia" Or country = "Vietnam" Or country = "Indonesia" Or country = "U.S." Or country = "Canada" Or country = "Mexico" Or country = "UAE" Or country = "Egypt" Or country = "Saudi Arabia" Or country = "India" Or country = "Gabon" Or country = "South Africa" Or country = "Brazil" Or country = "Argentina" Or country = "French Guyanna"

MsgBox "Your country is not in the list: try again by paying attention to the given list or quit the document. We may send this to you by error"
country = InputBox("Choose your country in the following list:" & Chr(10) & "UK" & Chr(10) & "Austria" & Chr(10) & "Poland" & Chr(10) & "Greece" & Chr(10) & "Japan" & Chr(10) & "China" & Chr(10) & "Taiwan" & Chr(10) & "Korea" & Chr(10) & "Singapore" & Chr(10) & "The Philippines" & Chr(10) & "Malaysia" & Chr(10) & "Vietnam" & Chr(10) & "Indonesia" & Chr(10) & "U.S." & Chr(10) & "Canada" & Chr(10) & "Mexico" & Chr(10) & "UAE" & Chr(10) & "Egypt" & Chr(10) & "Saudi Arabia" & Chr(10) & "India" & Chr(10) & "Gabon" & Chr(10) & "South Africa" & Chr(10) & "Brazil" & Chr(10) & "Argentina" & Chr(10) & "French Guyanna", "Country")

Loop

ElseIf country = "Austria" Then Application .Austria
ElseIf country = "Poland" Then Application .Poland
ElseIf country = "Greece" Then Application .Greece
ElseIf country = "Japan" Then Application .Japan
ElseIf country = "China" Then Application .China
ElseIf country = "Taiwan" Then Application .Taiwan
ElseIf country = "Korea" Then Application .Korea
ElseIf country = "Singapore" Then Application .Singapore
ElseIf country = "The Philippines" Then Application .The_Philippines
ElseIf country = "Malaysia" Then Application .Malaysia
ElseIf country = "Vietnam" Then Application .Vietnam
ElseIf country = "Indonesia" Then Application .Indonesia
ElseIf country = "U.S." Then Application .US
ElseIf country = "Mexico" Then Application .Mexico
ElseIf country = "UAE" Then Application .UAE
ElseIf country = "South Africa" Then Application .South_Africa
ElseIf country = "Saudi Arabia" Then Application .Saudi_Arabia
ElseIf country = "India" Then Application .India
ElseIf country = "Gabon" Then Call .Gabon
ElseIf country = "Brazil" Then Call .Brazil
ElseIf country = "Argentina" Then Call .Argentina
ElseIf country = "French Guyanna" Then Call .French_Guyanna

End sub

Bon c'est un peu long mais c'est exactement le m^me principe que ce que tu me conseilles non ? (j'ai essayé avec ou sans le "Application" avant la sous routine mais ça ne marche pas)
0
Merci Michel oui ça marche en fait le message d'erreur que j'avais se résout simplement en revenant à la ligne après la première ligne:
if country="UK" then
UK
Else if country...

ET merci ça marche aussi avec le select. Pour les variables ok je croyais que toute la ligne prenait la dernière définition.

J'accepte évidemment avec plaisir si vous me proposez quelque chose de moins grossier. Et enfin oui les actions sont similaires seul les cases d'enregistrement des résultats demandés changent.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 11/03/2014 à 10:11
OK, je regarde...

Montre moi le code d'une ou deux sous macro (UK et Austria par ex) pour étudier une simplification par macro paramétrée...
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
0
Ok je vous mets ça dès que j'ai fini mon code pour ces sous routines car je bloque encore sur certaines choses que je veux rajouter.
Merci Michel
0
Est-ce que vous savez Michel comment faire pour imposer ce type de condition:
si la valeur rentrée dans la input box est numerique ok, sinon réafficher le même message (ça ok je sais faire mais c'est après)
si l'utilisateur clique sur ok après avoir rempli la case, on continue, s'il clique sur annuler on sort de tt le processus.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 mars 2014 à 10:52
dans ce que je vais te proposer on ne passa pas par un inputbox mais par un formulaire(userform) et un combobox: plus de saisie par l'utilisateur donc plus de faute de frappe(ca je sais faire)
0
ok mais l'utilisateur est obligé de saisir des choses car c'est un document qu'on lui envoie pour qu'il rende compte de son activité
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 mars 2014 à 11:35
Ci joint maquette "pays"

sans saisie de l'utilisateur on lance la sousmacro du pays

codes dans thisworkbook (workbook_open), userform1,et module1

après l'utilisateur peut ^tre amener à faire des saisies ce qui sort de mon intervention mais le choix du pays est obligatoirement fait dans la liste déroulante

tu as aussi le principe des macros paramétrées certainement à modifier suivant tes prescriptions (pas d'appel par "call" avec les paramétrées)

https://www.cjoint.com/?3CllHJaThl7

0
Je vois ton message maintenant car je n'étais pas là hier après midi. Il faut que je déchiffre tout ça parce que là vous m'avez laché Michel. Mais merci beaucoup de m'aider Michel.Je reviens quand j'en saurai un peu plus.
0
C'est quoi les ssmacro Michel ?
0
Pardon pour les ssmacro je n'avais pas vu la procédure. Voici mon code pour une procédure d'un pays et seules les cellules dans lesquelles je range les résultats changent d'un pays à l'autre.
Sub UK()

salesnmrmri = InputBox("What are your sales (in k€) for ...?", "NMR/MRI")

Do Until IsNumeric(salesnmrmri) = True And salesnmrmri <> ""

MsgBox "Be careful, a numeric value is expected"
salesnmrmri = InputBox("What are your sales (in k€) for ...?", "NMR/MRI")

Loop

'Là j'aimerais faire dépendre la suite du bouton cliqué (si annuler on sort de la procédure, si ok on poursuit)

Range("C11").Value = salesnmrmri

growth = InputBox("What is the growth of your sales (in %) for ...? ", "NMR/MRI")

'même principe que ci dessus ici
Range("D11").Value = growth

End Sub
Voilà a quoi ressemble la procédure pour chaque pays
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 mars 2014 à 10:49
Bonjour,

C'est l'adresse des range C11 et D11 qui varie ?
0
oui par exemple pour l'UK j'aurai C11 et D11 et pour Poland j'aurai C12 et D12
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/03/2014 à 14:44
et voilà
https://www.cjoint.com/?3CmoLw07TK4

les macros
module thisworkbook
Option Explicit
'-------
'Michel_M sur forum CCM 12 Mars 2014 Version 2
Private Sub Workbook_Open()
UserForm1.Show
End Sub
userform
Option Explicit
'Michel_M sur forum CCM 12 Mars 2014 Version 2
'-----
Private Sub UserForm_Initialize()
Cbx_country.RowSource = "B11:B33"
End Sub
'------
Private Sub Cbx_country_Change()
Dim Country As String
Country = Cbx_country
Unload UserForm1
report Country
End Sub

module1
Option Explicit
'Michel_M sur forum CCM 12 Mars 2014 Version 2
Sub report(state)
Dim Sales, Growth, rep As Byte
Dim Lig As Byte

'saisies et vérification si nombre
1: On Error GoTo erreur1
Sales = InputBox("What are your sales (in k€) for ...?", "NMR/MRI")
If Not IsNumeric(Sales) Or IsEmpty(Sales) Then GoTo erreur1

2: On Error GoTo erreur2
Growth = InputBox("What is the growth of your sales (in %) for ...?", "NMR/MRI")
If Not IsNumeric(Growth) Or IsEmpty(Growth) Then GoTo erreur2

'incriptions dans Excel
With Sheets(1) 'A ADAPTER AU NOM DE LA FEUILLE
Lig = .Columns("B").Find(state, .Range("B10"), xlValues).Row
.Cells(Lig, "C") = CDbl(Sales) 'cdbl pour tenir compte nombre décimal
.Cells(Lig, "D") = CDbl(Growth) / 100
End With
Exit Sub

'gestionnaire erreurs
erreur1:
rep = MsgBox("Be careful, a numeric value is expected,retry ?", vbYesNo, "NMR/MRI")
If rep = 6 Then GoTo 1
Exit Sub

erreur2:
rep = MsgBox("Be careful, a numeric value is expected,retry ?", vbYesNo, "NMR/MRI")
If rep = 6 Then GoTo 2
End Sub
Michel
0
merci beaucoup Michel je vais regarder ça et je reviens te dire si ça a marché
0
ça marche nickel michel merci encore pout ton aide
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 mars 2014 à 13:27
content pour toi !
peut-^tre à bientôt pour de nouvelles z'avantuuures...
0