[VBA] Problème de programmation

Cassie -  
Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Lust Messages postés 243 Statut Membre 123
     
    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
    1. Cassie
       
      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
  2. Utilisateur anonyme
     
    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
  3. blux Messages postés 5043 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  4. Utilisateur anonyme
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Armojax Messages postés 1863 Date d'inscription   Statut Membre Dernière intervention   1 529
     
    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