IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Buggage sous Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Par défaut Buggage sous Excel
    Bonjour mon code permet de faire des recherche dans la feuille Excel et d'affecter des valeurs des textbox du userform sous VBA à la feuille EExcel correspondante. Cependant lorsque j'exécute Excel ne répond pas. Quelqu'un peut-il me dire d'où vient le problème car à priori le code marche puisque lorsque je lance l'application il n'y a pas d'erreur. Voici le code : (un peu noob car je suis noob)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    Private Sub btn_valider_Click()
     
    Dim i As Integer, j As Integer
    Dim testNomFeuille As Boolean, testDate As Boolean, testTypeRecette As Boolean
    Dim LigneDate As Integer
    Dim colTypeRecette As Integer, colNbPatients As Integer, colNbCMU As Integer
    Dim varSelectCase As Integer
    Const NbLigne = 38 'Nombre de ligne servant à parcourir la premiere grille
    Const NbColonne = 15
     
    testNomFeuille = False
    testDate = False
    testTypeRecette = False
    varSelectCase = 0
    'test si le mois entrer correspond avec celui du classeur Excel et active la feuille correspondante au mois saisie
    For i = 1 To Sheets.Count
    If Sheets(i).Name = Et_Mois.Text Then
    Sheets(i).Activate
    testNomFeuille = True
    End If
    Next i
     
    'si test reussi on parcours la grille pour trouver la ligne correspondant à la date saisi
    If (testNomFeuille = True) Then
       While (testDate = False)
          For i = 1 To NbLigne
             For j = 1 To NbColonne
                If (Cells(i, j) = Val(Et_Date.Text)) Then
                   testDate = True
                End If
             Next j
          Next i
          LigneDate = i
       Wend
       If op_Cheques.Value = True Then
          varSelectCase = 1
       Else
          If op_Virements.Value = True Then
             varSelectCase = 2
          Else
             If op_CB.Value = True Then
                varSelectCase = 3
             Else
                varSelectCase = 4
             End If
          End If
       End If
       Select Case varSelectCase
          Case 1
          'recherche de la colonne chèques
            Do
            For i = 1 To NbLigne
               For j = 1 To NbColonne
               Next j
            Next i
            Loop Until (Cells(i, j) = op_Cheques.Caption)
            colTypeRecette = j
          Case 2
          'recherche de la colonne virements
            Do
            For i = 1 To NbLigne
               For j = 1 To NbColonne
               Next j
            Next i
            Loop Until (Cells(i, j) = op_Virements.Caption)
            colTypeRecette = j
          Case 3
          'recherche de la colonne cb
            Do
            For i = 1 To NbLigne
               For j = 1 To NbColonne
               Next j
            Next i
            Loop Until (Cells(i, j) = op_CB.Caption)
            colTypeRecette = j
          Case 4
          'recherche de la colonne espèces
            Do
            For i = 1 To NbLigne
               For j = 1 To NbColonne
               Next j
            Next i
            Loop Until (Cells(i, j) = op_Especes.Caption)
            colTypeRecette = j
        End Select
        'recherche de la colonne où on doit saisir le nombre de patients
        Do
            For i = 1 To NbLigne
               For j = 1 To NbColonne
               Next j
            Next i
            Loop Until (Cells(i, j) = "Nb patients")
            colNbPatients = j
        'recherche de la colonne où on doit saisir le nombre de CMU
        Do
            For i = 1 To NbLigne
               For j = 1 To NbColonne
               Next j
            Next i
            Loop Until (Cells(i, j) = "Nb CMU")
            colNbCMU = j
    'Affectation des valeurs du userform à la feuille Excel
       Cells(LigneDate, colTypeRecette) = Val(Et_Montant.Text)
       Cells(LigneDate, colNbPatients) = Val(Et_Nbpatients.Text)
       Cells(LigneDate, colNbCMU) = Val(Et_NbCMU.Text)
    Else
    MsgBox ("Saisissez correctement le mois, il doit correspondre au nom de votre feuille Excel")
    End If
     
    End Sub
    Merci d'avance

  2. #2
    Membre éprouvé
    Homme Profil pro
    Contrôleur des Systèmes d'Information
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Contrôleur des Systèmes d'Information
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Cher Vuong1,
    Avant d'aller plus loin, en lisant cette portion de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Const NbLigne = 38 'Nombre de ligne servant à parcourir la premiere grille
    ...
    While (testDate = False)
        For i = 1 To NbLigne
           For j = 1 To NbColonne
              If (Cells(i, j) = Val(Et_Date.Text)) Then
                 testDate = True
              End If
           Next j
        Next i
        LigneDate = i
     Wend
    on s'apperçoit que dans tous les cas, LigneDate sera toujours égal à 39, car les boucles for ... to ... sont imbriquées dans la condition while. De plus la conversion val(Et_Date.Text) pour avoir une date n'est pas appropriée. Il faudrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DateT = DateValue(Et_Date.Text)
    While (testDate = False)
         For i = 1 To NbLigne
              For j = 1 To NbColonne
                   If (Cells(i, j) = DateT) Then
                        testDate = True
                        LigneDate = i
                        i=NbLigne+1
                        j=NbColonne+1
                   End If
              Next j
         Next i
    Wend
    Vous avez repetez cette même erreur partout, par exemple dans cette portion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Do 
         For i = 1 To NbLigne
              For j = 1 To NbColonne
              Next j
         Next i
    Loop Until (Cells(i, j) = op_CB.Caption)
    colTypeRecette = j
    il est plus indiqué d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Do 
         For i = 1 To NbLigne
              For j = 1 To NbColonne
                   if (Cells(i, j) = op_CB.Caption) then 
                        colTypeRecette = j
                        j=NbColonne+1
                        i = NbLigne+1
                   end if
              Next j
         Next i
    Loop
    Merci d'essayer ces modifications.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Par défaut
    Et j'ajouterais que :
    Citation Envoyé par jkodio
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    While (testDate = False)
         For i = 1 To NbLigne
              For j = 1 To NbColonne
                   If (Cells(i, j) = DateT) Then
                        testDate = True
                        LigneDate = i
                        i=NbLigne+1
                        j=NbColonne+1
                   End If
              Next j
         Next i
    Wend
    Même avec cette boucle, si testDate n'est pas True après le 1er passage dans la boucle While (càd Et_Mois.Text n'est pas trouvé dans la plage), la boucle sera toujours infinie... et il ne sert à rien de repasser une seconde fois dans la boucle... Ainsi, quoiqu'il arrive, le While ne sert à rien.

  4. #4
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Rien à voir avec le sujet mais j'en reste coi !

    Si tous les posts de ce forum étaient aussi agréables à lire, je serai le plus heureux des responsables

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Par défaut
    Vous avez raison g essayer votre code et sa marche en enlevant le qui fait bugger excel et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     j = NbColonne+1 'et i = NbLigne +1
    qui est facultatif. Je vous remercie pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Doc pour créer requetes SQL via ODBC sous EXCEL
    Par satanas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/01/2005, 08h33
  2. grouper/créer un plan sous Excel
    Par EFCAugure dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 06/10/2004, 16h46
  3. Pb de séparateur lors du chargement sous excel
    Par mickael777 dans le forum C++Builder
    Réponses: 5
    Dernier message: 25/06/2004, 09h52
  4. [VBA-E] Sélection feuilles sous excel
    Par Mystic eyes dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/02/2004, 13h27
  5. Sauvegarde problématique sous excel par OLE
    Par ulysse66x dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/04/2003, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo