Programmation VBA - Problème

Résolu/Fermé
MarcancooL Messages postés 34 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 4 juin 2015 - 17 oct. 2012 à 22:52
eriiic Messages postés 24494 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 29 janvier 2023 - 18 oct. 2012 à 07:11
Bonjour,

Bonsoir à vous!

En exercice, on me demande de créer un petit programme de conversion d'unités avec VBA.

La question contient les restrictions suivantes:

Lorsque le fichier ouvre, il est prêt pour une conversion. Il contient 3 colonnes: À convertir, Unité et Converti. La première contient les valeurs à convertir. La seconde les unités de conversion (j'ai mis le menu déroulant) et la 3e est l'espace ou le chiffre converti apparaît. La conversion est faite en cliquant sur le bouton convertir. Elle se fait pour toutes les valeurs entrées; on arrête de prendre les valeurs lorsqu'on tombe sur une case vide. On utilise les unités de conversion de la liste.

Pour convertir, on fait une recherche dans le chiffrier (rechercheV - vlookup pour retrouver l'unité de conversion correspondante et on applique le calcul. Au moins 1 boucle de la fonction VBA doit être utilisée. Les cellules de la colonne À convertir doivent seulement contenir des nombres réels.


En gros, j'ai commencé à taper mon code. Malheureusement, on me donne l'erreur "Erreur de compilation: Fonction ou Sub non définie". Or je crois avoir tout défini? Ou dois-je définir le tableau que j'ai nommé Unite?

Voici mon code actuel:

Sub Convertir_Bouton()
Dim intConvertir As Integer
Dim strUnite As String
Dim intConverti As Integer
Dim i As Integer
i = 2
Do While Cells(i, 1) <> ("")
If Not IsNumeric(Range("i,1").Value) Then
    Range("i,1").Value = "Vous n'avez pas saisi un chiffre!"
Else
    intConvertir = Range("i,1").Value
    strUnite = Range("i,2").Value
    intConverti = VLookup(strUnite, Unite, 2, FAUX) * intConvertir
End If
i = i + 1
Loop
End Sub


*** Ma 2e colonne (Unité) contient une liste déroulante avec toutes les conversions demandées, et j'ai mis la conversion ainsi que son taux dans un tableau que j'ai nommé "Unite"...

2 réponses

eriiic Messages postés 24494 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 29 janvier 2023 7 156
18 oct. 2012 à 01:36
Bonsoir,

Chez moi il dit plutôt variable non définie sur : Unité.
Si j'ai bien compris ça doit être une plage de feuille nommée Unite.
De plus tu ne peux pas appeler une fonction de feuille comme ça.

à tester :
intConverti = WorksheetFunction.VLookup(strUnite, [Feuil2!Unite], 2, FAUX) * intConvertir 


Sans fichier difficile de tester...

eric
0
MarcancooL Messages postés 34 Date d'inscription lundi 8 décembre 2008 Statut Membre Dernière intervention 4 juin 2015
18 oct. 2012 à 04:03
Bon j'ai réglé 1 des problèmes, merci Eric! Maintenant, on me dit qu'il est impossible de lire la propriété VLookup de WorksheetFunction...

Voici le code maintenant:

Sub Convertir_Bouton()
Dim sngConvertir As Single
Dim varUnite As Variant
Dim sngConverti As Single
Dim i As Integer
i = 2
Do While (Worksheets(1).Cells(i, 1).Value <> "")
If Not IsNumeric(Cells(i, 1).Value) Then
    Cells(i, 1).Value = "Vous n'avez pas saisi un chiffre!"
Else
    sngConvertir = Cells(i, 1).Value
    varUnite = Application.WorksheetFunction.VLookup(varUnite, "F2:G15", 2, FAUX)
    sngConverti = varUnite * intConvertir
End If
i = i + 1
Loop
End Sub
0
eriiic Messages postés 24494 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 29 janvier 2023 7 156
18 oct. 2012 à 07:11
Re,

C'est un Range qu'il attend.
Donc soit [F2:G15] qui est la façon raccourcie de l'écrire, soit Range("F2:G15").

Mais de la feuille active puisque tu ne spécifies pas le nom du worksheet. Ce qui sera le cas si appelé par le bouton de la feuille.
Si on veut être puriste tu devrais mettre Private Sub Convertir_Bouton() que la procédure n'apparaisse pas dans la liste du menu macros du classeur, et ne puisse pas être exécutée d'une autre feuille.

eric
0