Programmation VBA - Problème
Résolu
MarcancooL
Messages postés
36
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
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:
*** 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"...
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"...
A voir également:
- Programmation VBA - Problème
- Application de programmation - Guide
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
2 réponses
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 :
Sans fichier difficile de tester...
eric
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
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:
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
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
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