[VBA] Problème de programmation

Fermé
Cassie - 21 avril 2006 à 16:26
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 - 22 avril 2006 à 11:51
Bonjour tout le monde.

J'aimerais savoir si quelqu'un, par hasard, pourrait m'aider à résoudre un problème avec une programmation en Visual Basic sur Excel (je suis actuellement sous Windows XP).

Voilà la situation :

Je travaille sur un dossier scolaire, dans une situation où on doit programmer une facture pour que, d'après un numéro de client, le montant total de son dû soit calculé automatiquement.

J'ai trois feuilles Excel. Une pour la facture, une autre pour les données des clients (affichés sur un tableau de 8 colonnes) et la troisième pour les tarifs applicables (affichés sur un tableau de 5 colonnes).

La programmation que j'ai faite, une fois lancée, bloque totalement les feuilles et il m'est obligatoire de tout fermer sans pouvoir enregister de quelconque modification.

Elle est présentée ainsi :

Option Explicit
Dim Nom_client(30), Adresse_client(30), CP_client(30), Ville_client(30), Num_sej, Num_séjour, numfact As String
Dim i, Nbre_pers(30), Prix_jour_pers(30), TotalHT_1, Nbjour As Integer
Dim Date_séjour, datefact As Date

Sub facture()

Sheets("Modèle").Select
numfact = InputBox("Entrer le numéro de la facture")
Cells(2, 3) = numfact
datefact = InputBox("Entrer la date de la facture")
Cells(3, "d") = datefact
Num_séjour = InputBox("Entrer le numéro du séjour")
Cells(5, "b") = Num_séjour

Sheets("Réservation_séjour").Select
i = 2
Num_sej = Cells(i, "a")
While Num_sej <> Num_séjour
i = i + 1
Num_sej = Num_sej + 1
Wend
Nom_client(Num_sej) = Cells(i, "b")
Adresse_client(Num_sej) = Cells(i, "c")
CP_client(Num_sej) = Cells(i, "d")
Ville_client(Num_sej) = Cells(i, "e")
Date_séjour(Num_sej) = Cells(i, "f")
Nbre_pers(Num_sej) = Cells(i, "g")
Prix_jour_pers(Num_sej) = Cells(i, "h")

Sheets("Modèle").Select
Cells(7, "c") = Nom_client(Num_sej)
Cells(8, "c") = Adresse_client(Num_sej)
Cells(9, "c") = CP_client(Num_sej)
Cells(9, "d") = Ville_client(Num_sej)
Nbjour = datefact - Date_séjour
TotalHT_1 = Nbjour * Nbre_pers(Num_sej) * Prix_jour_pers(Num_sej)
Cells(13, "e") = TotalHT_1

Call Sport

End Sub

Sub Sport()
Dim Num_séjour, Num_sport, Nom_sport, Num_sej1 As String
Dim Prix_unité, Nbre_unité, TotalHT_1, TotalHT_2, TVA, Montant_total As Integer

Sheets("Réservation_sport").Select
j = 2
k = 18
Num_sej1 = Cells(j, "a")
Do
While Num_sej1 <> Num_séjour
j = j + 1
Num_sej1 = Num_sej1 + 1
Wend
Num_sport(Num_sej1) = Cells(j, "b")
Nom_sport(Num_sej1) = Cells(j, "c")
Prix_unité(Num_sej1) = Cells(j, "d")
Nbre_unité(Num_sej1) = Cells(j, "e")
TotalHT_1 = Cells(13, "e")
Prix_séjour = Prix_unité(Num_sej1) * Nbre_unité(Num_sej1)
TotalHT_2 = TotalHT_2 + Prix_séjour
Sheets("Modèle").Select
Cells(k, "a") = Num_sport(Num_sej1)
Cells(k, "b") = Nom_sport(Num_sej1)
Cells(k, "c") = Nbre_unité(Num_sej1)
Cells(k, "d") = Prix_unité(Num_sej1)
Cells(k, "e") = Prix_séjour
Cells(23, "e") = somme(Prix_séjour)
Montant_total = TotalHT_1 + TotalHT_2
Cells(24, "e") = Montant_total
TVA = Montant_total * 19.6 / 100
Cells(25, "e") = TVA
Cells(26, "e") = TVA + Montant_total

End Sub


Est-ce que, par hasard, quelqu'un verrait où se trouve mon erreur et pourrait m'aider, s'il vous plait ?

J'ai deux semaines pour terminer ce travail, et je ne verrai pas mon professeur avant ces deux semaines.

Je vous remercie par avance pour toute aide que vous pouriez m'apporter.

5 réponses

Lust Messages postés 243 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 12 septembre 2007 123
21 avril 2006 à 18:14
Commence déjà par allez dans le menu débogage... compiler... y a un tas d'erreur au niveau des variables non déclarée...je me suis arreter à 3 mais je suis sur qu'apres les correction de variable non déclarée il va peut etre te trouver d'autres erreur .

Poour éviter ces probleme la, fais tjr compiler avant de tester ton codeet vérifer les erreurs.
0
Merci pour ta réponse.

Après vérification, j'ai ajouté les variables et corrigé les erreurs (à l'origine, je n'avais pas ajouté la partie "sport", elle je ne l'avais préparé que sur bloc note en attendant d'avoir trouvé le problème de la partie première).

Malheureusement, j'ai encore le problème du blocage... J'ai fait "compiler" comme tu m'as conseillé, mais ça n'a rien donné de plus... L'erreur vient donc surtout de la première partie, et j'ai passé tant de temps dessus que je vois plus rien...

En tout cas, merci beaucoup pour ta réponse (me répète lol)
0
Utilisateur anonyme
21 avril 2006 à 19:42
Bonjour,

ici : Dim Date_séjour, datefact As Date
et : Date_séjour(Num_sej) = Cells(i, "f")

la variable est un tableau ou pas ?

de plus, comme me rappelait un talentueux CCMiste, les déclaration sont incomplète.

Dim Nom_client(30), Adresse_client(30), CP_client(30), Ville_client(30), Num_sej, Num_séjour, numfact As String
Dim i, Nbre_pers(30), Prix_jour_pers(30), TotalHT_1, Nbjour As Integer
Dim Date_séjour, datefact As Date

devrait se faire :

Dim Nom_client(30) As String, Adresse_client(30) As String
Dim CP_client(30) As String, Ville_client(30) As String
Dim Num_sej As String, Num_séjour As String, numfact As String

Dim i As Integer, Nbre_pers(30) As Integer
Dim Prix_jour_pers(30) As Integer, TotalHT_1 As Integer
Dim Nbjour As Integer


Lupin
0
blux Messages postés 26756 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 1 avril 2025 3 332
21 avril 2006 à 21:37
Salut,

tout à fait d'accord pour les déclarations :

Dim A, B as String

déclare B comme string mais A comme variant...

On peut cependant tout mettre dans un variant, mais on parfois des effets de bord...
0
Utilisateur anonyme
21 avril 2006 à 23:14
Bonjour,

j'ai probablement fait trop de VBS depuis quelques temps
j'en avais oublié la déclaration de chaque variable.

ceci dit, je crois qu'il y aurait beaucoup de ménage à faire :

lors de l'encapsulation la déclaration des variables aurait
du apparaitre avec sa structure, voici ce que cela me donne :

de ceci qui a été soumis en dernière instance :

Dim Nom_client(30) As String, Adresse_client(30) As String
Dim CP_client(30) As String, Ville_client(30) As String
Dim Num_sej As String, Num_séjour As String, numfact As String

Dim i As Integer, Nbre_pers(30) As Integer
Dim Prix_jour_pers(30) As Integer, TotalHT_1 As Integer
Dim Nbjour As Integer


En fait devrait ressembler à ceci :
Type Enregistrement
        Nom_Client As String
        Adresse_Client As String
        CP_Client As String
        Ville_Client As String
        Nbre_Pers As Integer
        Prix_Jour_Pers As Integer
End Type

Type Sejournement
        Num_Sej As String
        Num_Sejour As String
        NumFact As String
End Type

Dim Compteur As Integer
Dim TotalHT_1 As Integer
Dim Nbjour As Integer
Dim Sejour As Sejournement 
Dim Facture(30) As Enregistrement


et tu adresse ainsi :

MaVariable = Facture(Compteur).Nom_Client

autre recommandation, évite les caractères accentués dans
le code lui-même, nom de variables, nom d'objets, etc...

Lupin
0

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

Posez votre question
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
22 avril 2006 à 11:51
Hello,

Sans être entré dans le vif du code, il y a une petite malfaçon dans la boucle de la procédure Sport.

C'est soit :
While
.../...
Wend


soit
Do While
.../...
Loop
0