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 :

Test Procédure


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Par défaut Test Procédure
    Bonsoir, en général j'arrive facilement à faire mes procédures, mais manque de bol et je ne sais pas pourquoi je bloque souvent, très souvent même pour tester mes procédures sur mes algo test, donc j'aimerai avoir votre aide et vos conseils pour les réussir une bonne fois pour toute.
    Je ne pense pas que mon code soit faux, j'ai juste une erreur d'incompatibilité de type ref en guise d'erreur sur ma procédure test, je sais très bien que cela doit être une truc tout bête, donc j'aimerai vos conseils pour ne plus avoir ces erreurs-là, merci d'avance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Type chat
    n_ch As Integer
    nom_ch As String
    dn As Date
    race As String
    ville_e As String
    moy As Single
     End Type
    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
    Public Sub liretab(ByRef fich As Variant, ByVal feuil As String, ByRef cellule As Range, ByRef Tab1() As chat, ByRef n As Integer)
    Dim ligfin As Integer
    Dim i As Integer
    Dim j As Integer
    Dim ligdeb As Integer
    ligfin = cellule.End(xlDown).Row
    ligdeb = cellule.Row
    n = ligfin - ligdeb
    j = cellule.Column
     
       Cells(ligdeb, j).Value = "n_ch"
      Cells(ligdeb, j + 1).Value = "nom_ch"
       Cells(ligdeb, j + 2).Value = "dn"
       Cells(ligdeb, j + 3).Value = "race"
       Cells(ligdeb, j + 4).Value = "ville_e"
       Cells(ligdeb, j + 5).Value = "moy"
     
    Worksheets(feuil).Select
     
      For i = 1 To n
          Tab1(i).n_ch = Cells(ligfin - n + i, j).Value
          Tab1(i).nom_ch = Cells(ligfin - n + i, j + 1).Value
          Tab1(i).dn = Cells(ligfin - n + i, j + 2).Value
          Tab1(i).race = Cells(ligfin - n + i, j + 3).Value
          Tab1(i).ville_e = Cells(ligfin - n + i, j + 4).Value
          Tab1(i).moy = Cells(ligfin - n + i, j + 5).Value
        Next
     
    End Sub
    Ma procédure test (là où il y a l'erreur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub TestLireTab()
     
    Dim T(1 To 100) As Integer
    Dim nb As Integer, i As Integer
    Call liretab("Feuil1", Range("B3"), T(), nb)
    MsgBox (nb & " valeurs ont été lues")
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Cela fait bien longtemps que je n'ai pas joué avec un type En VBA. je n'ose pas trop m'avancer.

    Mais si mes souvenirs sont exacts, pour ramasser les données de 100 chats tu as besoin d'un tableau de 100 chats.

    Cela devrait être comme cela:

    et tu le remplirais comme cela: (en supposant que toutes tes adresses sont toujours exactes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i = 1 to 100
          Tab1(i).n_ch = Cells(ligfin - n + i, j).Value
          Tab1(i).nom_ch = Cells(ligfin - n + i, j + 1).Value
          Tab1(i).dn = Cells(ligfin - n + i, j + 2).Value
          Tab1(i).race = Cells(ligfin - n + i, j + 3).Value
          Tab1(i).ville_e = Cells(ligfin - n + i, j + 4).Value
          Tab1(i).moy = Cells(ligfin - n + i, j + 5).Value
        Next
    Ou bien tu peux les simplifier en utilisant offset



    Et entre nous deux , je me demande pourquoi tu as ces lignes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Cells(ligdeb, j).Value = "n_ch"
      Cells(ligdeb, j + 1).Value = "nom_ch"
       Cells(ligdeb, j + 2).Value = "dn"
       Cells(ligdeb, j + 3).Value = "race"
       Cells(ligdeb, j + 4).Value = "ville_e"
       Cells(ligdeb, j + 5).Value = "moy"

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Par défaut
    Bonjour,

    Dans l'appel de ta fonction liretab, il semblerait que tu aies omis de passer le paramètre fich.

    Ensuite, tu essayes de passer en paramètre un tableau de type Integer alors que ta fonction attend un tableau de type chat.

    Si tu corriges ces deux points, tu devrais pouvoir aller plus loin dans tes tests...

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Par défaut
    Merci pour vos réponses, mais je bloque toujours sur ces procédure test, même les plus faciles, et même avec l'aide du net je bloque de tout les côtés.
    J'ai donc repris des procédures relativement simple pour m’entraîner de nouveau et toujours les même problèmes. J'ai donc repris un exercice du net afin de m'exercer.
    Ça donne cela : (avec une matrice 4x5)
    La procédure :
    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
    Public Sub LireMatrice(ByVal Plage As Range, ByRef Matrice() As Double, ByVal n As Integer, ByRef k As Integer)
     
    Dim i As Integer
    Dim j As Integer
    n = Plage.Rows.Count
    k = Plage.Columns.Count
    ReDim Matrice(n, k)
     
    For i = 1 To n Step 1
        For j = 1 To k Step 1
            Plage(i, j).Interior.ColorIndex = 8
            Matrice(i, j) = Plage(i, j).Value
        Next j
    Next i
     
    End Sub
    La procédure test.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub Test_LireMatrice()
    Dim n1 As Integer
    Dim k1 As Integer
    Dim P1 As Range
    Dim M1() As Double
    Call LireMatrice(P1, M1, n1, k1)
    MsgBox ("Une matrice M1 de dimension (" & n1 & "," & k1 & ") a bien été chargée")
    End Sub
    J'aurais également une question concernant le sql Access, je sais que ce n'est pas le forum approprié, mais c'est pour éviter de surcherger les sujets donc si je peux me faire aider ici.
    J'ai donc un champ contenant pratiquement que des "0", je veux donc attribuer une valeur aléatoire à ce champ, une valeur aléatoire d'un nombre compris entre 1 et 5. Sauf que quand je lance mon code ci-dessous, elle marche bien, elle donc bien un chiffre aléatoire mais entre 0 et 5, il y a donc toujours des "0", savez-vous comment je peux faire pour empêcher qu'il y a des "0".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE MAGASIN SET cat = int(RND(cat+1)*5)
    WHERE cat = 0;

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu appelles LireMatrice(P1, M1, n1, k1) sans même avoir initialisé les variables.
    eric

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2018
    Messages : 11
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Bonjour,

    tu appelles LireMatrice(P1, M1, n1, k1) sans même avoir initialisé les variables.
    eric
    mes variables sont déclarés, donc je ne vois vraiment pas d'où vient l'erreur "erreur d'execution 91 variable objet ou variable de bloc with non définie"

Discussions similaires

  1. Test procédure source
    Par Trystan441 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/02/2019, 11h12
  2. Inclure un package dans une procédure de test
    Par pierrot2908 dans le forum Ada
    Réponses: 16
    Dernier message: 12/10/2007, 12h52
  3. Renommer base Oracle: procédure testé avec succès
    Par lecharcutierdelinux dans le forum Administration
    Réponses: 3
    Dernier message: 16/05/2007, 10h57
  4. Réponses: 1
    Dernier message: 09/03/2007, 13h04
  5. Faire un test dans une procédure
    Par PrinceMaster77 dans le forum SQL
    Réponses: 1
    Dernier message: 23/11/2004, 09h55

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