Programmation VBA - Problème
Résolu
MarcancooL
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 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
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - 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