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 :

Probleme d'exécution de mon programme VBA sous excel [XL-2010]


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
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut Probleme d'exécution de mon programme VBA sous excel
    Bonjour à tous,
    Je suis nouveau sur le forum et je me demande si une âme charitable peut m'aider à résoudre les message d'erreur à répétition que j'ai, lorsque je lance mon programme VBA. voici le code:

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim t1, t2, t3, t4, t5
    Dim TBLO(9) As String
     
    TBLO(0) = 1
    TBLO(1) = 16
    TBLO(2) = 31
    TBLO(3) = 46
    TBLO(4) = 61
    TBLO(5) = 69
    TBLO(6) = 77
    TBLO(7) = 85
    TBLO(8) = 95
    TBLO(9) = 105
    t1 = Array(Worksheets("MATRICE").Range("a2:a14"))
    t2 = Array(Worksheets("MATRICE").Range("a17:a29"))
    t3 = Array(Worksheets("MATRICE").Range("a32:a44"))
    t4 = Array(Worksheets("MATRICE").Range("a47:a59"))
    t5 = Array(Worksheets("MATRICE").Range("a62:a67"))
    t6 = Array(Worksheets("MATRICE").Range("a70:a75"))
    t7 = Array(Worksheets("MATRICE").Range("a78:a83"))
    t8 = Array(Worksheets("MATRICE").Range("a86:a93"))
    t9 = Array(Worksheets("MATRICE").Range("a96:a103"))
    t10 = Array(Worksheets("MATRICE").Range("a106:a155"))
     
    For j = 1 To 10 'TABLEAU
        For k = 1 To 5 'CELLULE
    With Worksheets("MATRICE").Range("t" & j) 'PLAGE DE RECHERCHE ADAPTATIVE
    Set a = .Find(Worksheets("F1").Cells(3, k), LookIn:=xlValues, LookAt:=xlWhole) 'CHERCHER LES DIFFERENT CRIT DANS LA FEUIL1
    End With
     
    With Worksheets("MATRICE").Range("B" & a.Row & ":" & "CB" & a.Row) 'ON CHERCHE SUR LA LIGNE CORESPONDANTE AU CRITERE CHERCHE
    Set X = .Find(1, LookIn:=xlValues, LookAt:=xlWhole) 'ON CHERCHE LA VALEUR 1 DANS LES MATRICE CORRESPONDANTE
    E = Left(X.Address(ColumnAbsolute:=False), (X.Column < 27) + 2) 'ON DETERMINE LA LETTRE DE LA COLONNE OU SE TROUVE 1
     
    For l = 0 To 9
    t = Worksheets("MATRICE").Range(E & TBLO(l)) ' DETERMINE L'INTITULE DE LA COLONNE
    If Not X Is Nothing Then
    firstAddress = X.Address
     
    For m = 0 To 4
    Worksheets("Liste").Range("A3:A80").Offset(0, m) = t 'ECRIRE L'INTITULE DANS LA FEUIL LISTE
    Do
        Set X = .FindNext(X)
        z = X.Column
        E = Left(X.Address(ColumnAbsolute:=False), (X.Column < 27) + 2)
        t = Worksheets("MATRICE").Range(E & TBLO(l))
    Loop While Not X Is Nothing And X.Address <> firstAddress
     
     
    Next m
    End If
    Next l
    End With
    Next k
    Next j
     
    End Sub
    Sachez que je n'est jamais fait de programmation et que j'ai par miracle réussis à construire ce programme grâce à ce site. Donc soyez indulgent

    En vous souhaitant une agréable journée,
    Cyril LLANTIA.







  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Premièrement, tu n'es pas dans la bonne rubrique du forum.

    Citation Envoyé par cyril.llantia Voir le message
    résoudre les message d'erreur à répétition que j'ai
    Surtout n'indique pas de quels messages d'erreurs il s'agit et sur quelles lignes qui se produisent.

    Donc soyez indulgent
    Oui mais non.

    Petit conseil : commence par mettre un peu en forme ton programme et à faire des indentation pour repérer tes structures.
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i=1 to 100
        If i=10 Then
            X=3
        End If
    Next i
    Ca te mettra de repérer les fins de structure (quand elles existent) par rapport aux débuts de structures, donc de bien fermer tes structures et de vérifier qu'elles ne s’emmêlent pas entre elles.
    Parce que ton programme, tel qu'il est, ressemble à un gros plat de spaghettis dans lequel on n'a pas envie de mettre les doigts.
    Je pense que ça va te permettre de corriger plusieurs erreurs.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut
    Tout d'abord merci Menhir pour cette réponse constructive. Mon erreur se trouve à la ligne 29 la valeur de "a" est nothing. Du coup le reste du code me renvoi d'autre erreurs notamment avec les fonctions with. Ainsi je n'arrive pas à trouver pourquoi la fonction "find" ne me trouve pas la valeur souhaité alors que je les ai bien inscrit dans mon tableau Excel . Du coup je me suis demandé si vous pouviez y jeter un petit coup d'œil afin de savoir où se situe le problème. j'ai effectué les indentations afin que le code soit un peu plus lisible:
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim t1, t2, t3, t4, t5
    Dim TBLO(9) As String
     
    TBLO(0) = 1
    TBLO(1) = 16
    TBLO(2) = 31
    TBLO(3) = 46
    TBLO(4) = 61
    TBLO(5) = 69
    TBLO(6) = 77
    TBLO(7) = 85
    TBLO(8) = 95
    TBLO(9) = 105
    t1 = Array(Worksheets("MATRICE").Range("a2:a14"))
    t2 = Array(Worksheets("MATRICE").Range("a17:a29"))
    t3 = Array(Worksheets("MATRICE").Range("a32:a44"))
    t4 = Array(Worksheets("MATRICE").Range("a47:a59"))
    t5 = Array(Worksheets("MATRICE").Range("a62:a67"))
    t6 = Array(Worksheets("MATRICE").Range("a70:a75"))
    t7 = Array(Worksheets("MATRICE").Range("a78:a83"))
    t8 = Array(Worksheets("MATRICE").Range("a86:a93"))
    t9 = Array(Worksheets("MATRICE").Range("a96:a103"))
    t10 = Array(Worksheets("MATRICE").Range("a106:a155"))
     
     
    For j = 1 To 10 'TABLEAU
     
        For k = 1 To 5 'CELLULE
     
            With Worksheets("MATRICE").Range("t" & j) 'PLAGE DE RECHERCHE ADAPTATIVE
            Set a = .Find(Worksheets("F1").Cells(3, k), LookIn:=xlValues, LookAt:=xlWhole) 'CHERCHER LES DIFFERENT CRIT DANS LA FEUIL1
            End With
     
                With Worksheets("MATRICE").Range("B" & a.Row & ":" & "CB" & a.Row) 'ON CHERCHE SUR LA LIGNE CORESPONDANTE AU CRITERE CHERCHE
                Set X = .Find(1, LookIn:=xlValues, LookAt:=xlWhole) 'ON CHERCHE LA VALEUR 1 DANS LES MATRICE CORRESPONDANTE
                E = Left(X.Address(ColumnAbsolute:=False), (X.Column < 27) + 2) 'ON DETERMINE LA LETTRE DE LA COLONNE OU SE TROUVE 1
     
                    For l = 0 To 9
                    t = Worksheets("MATRICE").Range(E & TBLO(l)) ' DETERMINE L'INTITULE DE LA COLONNE
     
                        If Not X Is Nothing Then
                        firstAddress = X.Address
     
                            For m = 0 To 4
                            Worksheets("Liste").Range("A3:A80").Offset(0, m) = t 'ECRIRE L'INTITULE DANS LA FEUIL LISTE
     
                                Do
                                Set X = .FindNext(X)
                                E = Left(X.Address(ColumnAbsolute:=False), (X.Column < 27) + 2)
                                t = Worksheets("MATRICE").Range(E & TBLO(l))
                                Loop While Not X Is Nothing And X.Address <> firstAddress
                            Next m
                        End If
                    Next l
                End With
        Next k
    Next j
     
    End Sub
    Merci encore d'avoir répondu à ma requête.
    Bonne fin de journée

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    la fonction find te cherche la cellule avec le critére demandé et te renvoie 2 sorte de variables

    soit elle trouve et elle te donne la cellule et toute ces propriété
    soit elle te donne nothing(qui veut dire rien) inexistante si tu préfere

    alors quand tu fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set a=range(patincouffin).find("toto" arguments)
    avant de te servir de "a.rows " il faut t'assurer que find a bien trouvé a
    pour cela c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not a is nothing then
    donc pour toi c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if not a is nothing then
    With Worksheets("MATRICE").Range("B" & a.Row & ":" & "CB" & a.Row)    'ON CHERCHE SUR LA LIGNE CORESPONDANTE AU CRITERE CHERCHE
    'reste du code 
     
    end with
    end if
    en gros encore if imbriqué

    mais je n'ai pas ton classeur sous les yeux mais il est tres rare que des boucles imbriquées aussi nombreuses ne soient pas simplifiables
    je t'invite a reflechir sur la finalité afin de voir si tu t'es pas embrouiller les pinceaux
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par cyril.llantia Voir le message
    Mon erreur se trouve à la ligne 29 la valeur de "a" est nothing.
    Ainsi je n'arrive pas à trouver pourquoi la fonction "find" ne me trouve pas la valeur souhaité alors que je les ai bien inscrit dans mon tableau Excel.
    Es-tu sûr que cette valeur existe dans ta feuille ?
    Si c'est une valeur numérique, est-ce qu'il n'y aurait pas une différence rendue invisible par un arrondi ?
    Si c'est une valeur texte, est-ce qu'il n'y aurait pas des caractère "invisibles" en plus ?
    As-tu essayé de faire cette recherche "manuellement" avec la fonctin de recherche d'Excel ? Ou bien vérifié que ces valeurs sont bien identiques avec une petite formule SI ?

    Citation Envoyé par patricktoulon Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if not a is nothing then
    Ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If a is NOTHING then Exit Sub
    Ce qui permet de mettre fin à la macro sans avoir à ajouter un niveau supplémentaire à la structure.

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut
    bonsoir, merci de vos réponse

    patricktoulon: j'ai fait en sorte que le cas ou "a is nothing" n'existe pas est-ce du fait de la construction de ma base de donnée. Par conséquent, je ne souhaite en aucun cas que "a" est une valeur nulle puisque cette variable se trouve sur une base de donnée "fixe". Donc ici la fonction "find" est juste la pour trouver la valeur d'une cellule (car elle existe obligatoirement) est non chercher qu'il y est bien quelque chose dans la dite cellule.

    Menhir: oui j'ai bien vérifié que les valeurs à chercher existes, en fait le programme fonctionnait (du moins il n'y avait pas d'erreur) avant que je ne vienne rajouter du code. De plus j'ai essayer en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = .Find(Worksheets("F1").Cells(3, k), LookIn:=xlValues, LookAt:=xlWhole)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = .Find(blabla, LookIn:=xlValues, LookAt:=xlWhole)
    et la "a" n'avait plus de valeur nulle. j'ai egalement fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print Worksheets("F1").Cells(3, k)
    et la valeur indiqué était bonne du coup c'est peut-être une erreur de syntaxe du "find" ou bien de mon "range" situé juste au dessus?
    Voilà j'espère avoir été assez clair dans mes explications.
    Passez une bonne soirée.

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    essai d'effectuer cette recherche "manuellement" dans excel .. voir si tu trouve ta valeur...

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par cyril.llantia Voir le message
    oui j'ai bien vérifié que les valeurs à chercher existes,
    Quelle méthode as-tu utilisé pour cette vérification ? As-tu utilisé une des méthodes que je t'ai indiquées ?

    en fait le programme fonctionnait (du moins il n'y avait pas d'erreur) avant que je ne vienne rajouter du code.
    A nouveau, surtout ne prend pas la peine d'indiquer quel code tu as modifié entre le moment où ça marchait bien et celui où ça ne marchait plus...

    De plus j'ai essayer en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = .Find(Worksheets("F1").Cells(3, k), LookIn:=xlValues, LookAt:=xlWhole)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = .Find(blabla, LookIn:=xlValues, LookAt:=xlWhole)
    et la "a" n'avait plus de valeur nulle.
    Pour moi, c'est une preuve claire que ce que tu as dans la cellule ne correspond pas à ce que tu cherches.

    Essaye de mettre dans ta feuille F1 la formule :
    Fais de même pour les autres cellules de la ligne 3.
    Regarde si ça te renvoie VRAI ou FAUX.

    j'ai egalement fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print Worksheets("F1").Cells(3, k)
    et la valeur indiqué était bonne
    Ca ne veut rien dire. Il suffit qu'il y ait un espace en fin de chaine ou un caractère encore moins visible pour que ça n'apparaisse pas avec un debug.print.
    Je pose la question pour la seconde fois : QUELLE TYPE DE VALEUR SE TROUVE DANS CES CASES ?

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

Discussions similaires

  1. ouvrir un fichier dans un programme VBA sous excel
    Par bryan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/01/2008, 14h38
  2. Réponses: 3
    Dernier message: 12/07/2007, 02h40
  3. Réponses: 1
    Dernier message: 13/04/2007, 08h48
  4. Problemes avec grosseur de requete en VBA sous Access
    Par acheo dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 12/04/2007, 11h58
  5. Probleme d'éxécution de mon programme
    Par BigWill dans le forum C
    Réponses: 8
    Dernier message: 28/02/2007, 10h18

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