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

VBA Access Discussion :

BackColor suivant procédure IF,THEN,ELSE


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut BackColor suivant procédure IF,THEN,ELSE
    Tout est dit dans l'Intitulé de ce post:

    Selon la certification d'un produit (normes BS EN ISO) j'aimerais changer la couleur de fond en rouge ou en vert.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Certification_AfterUpdate()
    
    'Condition(s) à respectée(s), utilisation de IF...THEN...ELSE
    If [BS EN Specification].Value = "EN 1600" Or "EN ISO 3580" Or "EN ISO 14172" Or "EN ISO 14343" _
    Or "EN ISO 17633" Or "EN ISO 17634" Or "EN ISO 18274" Or "EN ISO 21952" Then
    Me![BS EN Specification].BackColor = 65280
    Else
    Me![BS EN Specification].BackColor = 255
    'Fermeture de la condition IF
    End If
    
    'Cloture de la SUB
    End Sub
    Ce code est en "Procédure événementielle " sur " Après MaJ" pour le champ BS EN Specification du sous-formulaire SF_CELabelling.
    Ma macro de miseà jour se situe dans mon formulaire principal (celui contenant SF_CELabelling ) sur un bouton commande.

    Aucune couleur ne s'affiche en fond. Il y a t-il un manquement à mon code ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Premièrement, ton code n'est pas bon. Tu ne peux pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If maVariable = X Or Y Or Z Then...
    Il faut que l'expression Y ou Z renvoie un booléen.
    Dans ce cas il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select Case maVariable
        Case X
            ' Instructions si maVariable=X
        Case Y
            'Instructions si maVariable=Y
        Case Z
            'Instructions si maVariable=Z
        Case Else
            'Instructions dans tous les autres cas
    End Select

    Deuxièmement, tu ne peux pas modifier la couleur d'une section ou d'un contrôle de formulaire s'il s'agit d'un formulaire en mode continu : ça change la couleur de fond pour tous les enregistrements.

    NB : Pour Info tu as aussi la fonction RGB(X, Y, Z) qui permet de récupérer une couleur par son code RVB. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MonContrôle.Backcolor = RGB(255, 0, 0)
    rendra ton contrôle rouge
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Merci, j'avais pensé à utiliser le Select Case mais je ne savais pas comment appeler tous les autres cas et tu me l'a marqué noir sur blanc et Case Else merci bien

    Concernant la couleur le RGB marche, mais je crois quel'on peut également prendre le code couleur ,non ?

    Par exemple le rouge =255 le vert =65280 etc... ??
    Ou alors utiliser la bibliothèque préexistante pour le rouge prendre =vbRed ??

    Donc je dois utiliser la mise en forme conditionnelle pour un formulaire en continu ??

    Merci de ton aide en tout cas

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par Alexbreizhst Voir le message
    mais je crois quel'on peut également prendre le code couleur ,non ?

    Par exemple le rouge =255 le vert =65280 etc... ??
    Ou alors utiliser la bibliothèque préexistante pour le rouge prendre =vbRed ??
    Oui tu as tout à fait raison : les constantes vbRed, vbBlack, etc. stockent des valeurs numériques équivalentes aux codes couleur. La fonction RGB est pratique dans le sens où la plupart des logiciels de dessin (Photoshop, Paint, etc.) peuvent te donner les composantes RVB des couleurs d'une image. Pratique pour reprendre la charte graphique d'une entreprise par exemple

    La mise en forme conditionnelle est une solution mais a ses limites (ducoup je ne l'utilise depuis longtemps. Voici un article sur la MFC

    Sinon j'utilise plutôt ce genre de méthodes maintenant : MFC illimitée grâce aux spreadsheets
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Sans avoir encore regardé tes liens, j'ai omis de dire que je suis un néophyte en VBA et ne parlons même pas des autres langage mais je vais m'accrocher !

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Ne t'inquiète pas j'ai commencé à partir de zéro alors que j'étais en formation. Tu as toutes les ressources qu'il te faut sur ce site que tu peux compléter avec d'autres sites connus (ou à connaître si tu débutes en programmation).
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Ton tutoriel sur la mise en forme illimitée est génial et très bien expliqué bien que je déchiffre pas encore tout à fait les codes VBA !

    Merci

    Disons que dans pleins d'entreprises les bases de données seraient très utiles pour des suivis de production par exemple mais certaine PME n'ont pas les moyens de se procurer ce genre de service donc elle restent sur leur acquis.
    Le faire par soi-même peut indéniablement à long terme n'être que bénéfique pour l'entreprise

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par Alexbreizhst Voir le message
    Merci, j'avais pensé à utiliser le Select Case mais je ne savais pas comment appeler tous les autres cas et tu me l'a marqué noir sur blanc et Case Else merci bien
    A savoir : Si tu places ton curseur sur un mot-clé dans le VBE (éditeur de code) et que tu appuies sur F1, l'aide d'ACCESS s'ouvre et t'affiche l'article correspondant au mot-clé avec ça tu aurais vu tout de suite quelle était la syntaxe
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Il faut que je me force à utiliser F1 en effet !

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Voici le code que j'ai adapté à mon problème. L'éditeur n'affiche pas d'erreur et c'est très bien mais mon tableau ne m'affichent rien et ça c'est moins bien

    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
    112
    113
    114
    115
    116
    117
    Option Compare Database
    
    Public Sub PreparationTest()
        
    'Déclaration de la variable
    Dim spdTableau As OWC10.Spreadsheet
        
    ' Affectation de la variable
    Set spdTableau = Me.Spreadsheet_Test.Object
        
    'Préparation de l'aspect
    With spdTableau
        .DisplayToolbar = False                      ' on désactive la barre d'outils        
        With .Windows(1)
         .DisplayHorizontalScrollBar = False      ' on désactive la barre de défilement horizontale            
         .DisplayWorkbookTabs = False             ' on désactive la visualisation des onglets
         .DisplayColumnHeadings = False           ' on désactive les entêtes de colonnes
         .DisplayRowHeadings = False              ' on désactive les entêtes de lignes
        End With        
    End With
    End Sub
    Public Sub RemplirFeuille()
    
    'Déclaration des variables
    Dim spdTableau As OWC10.Spreadsheet
    Dim Rcdset As DAO.Recordset
    Dim strSQL As String
    Dim i As Integer
        
    'Affectation des variables
    Set spdTableau = Me.Spreadsheet_Test.Object
    strSQL = "SELECT Table_Product.Product, Table_Size.Size, Table_BSEN.[BS EN Specification]" & _
    "FROM Table_Size INNER JOIN (Table_BSEN INNER JOIN Table_Product ON" & _
    "Table_BSEN.[No BS EN] = Table_Product.[Code BS EN]) ON Table_Size.[No Size] = Table_Product.[Code Size];"
    
    Set Rcdset = CurrentDb.OpenRecordset(strSQL)
        
    'On vide la feuille de toute données
        spdTableau.Cells.Delete
        spdTableau.Windows(1).FreezePanes = False
        
    'Choix des entêtes de colonnes
        With spdTableau
            .Range("A1").Value = "Product"
            .Range("B1").Value = "Size"
            .Range("C1").Value = "BS EN Specification"
        End With
        
        'Couleur de l'entête des colonnes
        spdTableau.Range("A1").Interior.Color = RGB(175, 175, 175)
        spdTableau.Range("B1").Interior.Color = RGB(175, 175, 175)
        spdTableau.Range("C1").Interior.Color = RGB(175, 175, 175)
        
        'On fixe volets pour entête fixe
        spdTableau.Range("A2").Select
        spdTableau.Windows(1).FreezePanes = True
        
        'Remplissage de la feuille
        i = 2
        While Not Rcdset.EOF
            With spdTableau
                .Range("A" & i).Value = Rcdset("Product")
                .Range("B" & i).Value = Rcdset("Size")
                .Range("C" & i).Value = Rcdset("BS EN Specification")
    
            End With        i = i + 1
            Rcdset.MoveNext    Wend
        
        'Forme
        With spdTableau.Range("A1" & spdTableau.Range("A1").End(xlDown).Row)
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
        End With    
        'Libération des variables
        Rcdset.Close
        Set Rcdset = Nothing
        Set spdTableau = Nothing  
    End Sub
    Public Sub CouleurRecordset()
    
        
         ' Délaration des variables
        Dim spdTableau As OWC10.Spreadsheet
        Dim i As Integer
        
        ' Affectation des variables
        Set spdTableau = Me.Spreadsheet_Test.Object
        
        ' Condition et mise en forme
        For i = 2 To spdTableau.Range("A2").End(xlDown).Row
            Select Case spdTableau.Range("A" & i).Value
                Case "EN 1600"
                spdTableau.Range("A" & i).Interior.Color = RGB(0, 255, 0) 'couleur vert
                Case "EN ISO 3580"
                spdTableau.Range("A" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 14172"
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 14343"
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 17633"
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 17634"
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 18274"
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 21952"
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(0, 255, 0)
                Case Else
                spdTableau("A" & i & ":E" & i).Interior.Color = RGB(255, 0, 0) 'couleur rouge
    
            End Select
        Next i
        
        'Libération des variables
        Set spdTableau = Nothing
    
    End Sub

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par Alexbreizhst Voir le message
    L'éditeur n'affiche pas d'erreur et c'est très bien mais mon tableau ne m'affichent rien et ça c'est moins bien
    A toi les joies du débuggage Là on ne va pas pouvoir t"aider. Surtout que ton code a l'air correct.
    Personnellement, je mets des msgBox ou des debug.Print sur les variables qui m'intéressent aux endroits clés du code pour vérifier les valeurs qu'elles contiennent.

    En premier lieu, vérifies si ta requête te renvoies bien des enregistrements. Ensuite, essaies de remplir ton tableau avec constantes au lieu de ton recordset (déjà pour vérifier que tu remplis bien ton tableau, que tes indices sont bons, etc.)

    N.B : Tu peux accélérer le traitement pour mettre les couleurs en même temps que tu remplis ta feuille ça évite de parcourir une 2ème fois tous tes enregistrements. Exemple :
    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
    'Affiche la variable dans la fenêtre Débogage du VBE
    Debug.Print "requête : " & strSQL
    Set wks = Me.SpreadMFC.Object
    Set rst = CurrentDb.OpenRecordset(strSQL)
    j = 1
    While Not rst.EOF
    	' Pour chaque colonne du tableau
    	For i = 1 To rst.Fields.Count
    		' On remplit la cellule
    		wks.Range(wks.Cells(j, i)) = rst(i - 1)
    	Next i
     
    	With wks.ActiveSheet.Range(wks.Cells(j, 1), wks.Cells(j, rst.Fields.Count))
    		 ' On colorie en jaune la ligne suivant une condition
    		If rst("flag_manually") = "Y" Then
    			.Interior.Color = RGB(216, 190, 103)
    			.Font.Color = RGB(255, 0, 0)
    			.Font.Bold = True
    		Else
    			' On colorie une ligne sur 2
    			If j Mod 2 = 0 Then .Interior.Color = RGB(242, 242, 245)
    		End If
    	End With
     
    	j = j + 1
    	rst.MoveNext
    Wend
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Merci pour tes conseils, je vais m'en plancher sur cela

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Bonjour !

    Dans le générateur de code VBA je n'arrive pas à "tester" mon code en utilisant le débogage !
    Par exemple j'ai les formulaire F1,F2 et F3 qui contiennent chacun des objets et des contrôles. Lorsque je suis dans le générateur VBA, je peux voir tous les codes associés à ces contrôles, donc jusque là tout va bien.

    Cependant si j'ai envie de créer un code dans F2 et que je veux le tester, cela test TOUS les codes de tous les formulaires alors je ne comprends pas comment tester juste la partie qui m'intéresse.

    Il y a les "Modules" mais je ne sais pas à quoi cela sert... donc je met directement mon code dans "Objet de classe".

    De plus tu m'as aiguillé vers des MsgBox pour mon débogage. Par exemple si dans mon code j'ai une condition sur une chkbox à vérifier je peux la simuler en mettant une MsgBox dans laquelle je mets True ou False pour ensuite pouvoir continuer mon débobage, c'est bien cela ??

    Je sais que je ne m'exprime pas de la meileurefaçon pour exposer mon problème

  14. #14
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Tout d'abord, il faut mettre ton code dans un module standard et non un module de classe.
    Ensuite, pour tester le code se trouvant sur un formulaire, il suffit d'ouvrir ton formulaire et de déclencher les évènements qui utilisent du code (click sur un bouton, ouverture/fermeture du formulaire, mise à jour des champs, entrée/sortie sur un contrôle,etc.).
    Enfin, les msgBox sont des boîtes de dialogue qui peuvent afficher su texte avec des variables. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "maVariable = " & maVariable
    affiche le contenu de la variable maVariable.
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Question surement idiote mais dans un formulaire, on ne peut que tester les contrôle comme des boutons de commande ou des ouvertures/fermetures de formulaire ?

    Comment je fais pour vérifier le code de ma mise en forme conditionnelle (spreadsheet) en mode débogage ? Je dois mettre mon code dans un module standard, c'est bien cela ?

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    les procédures et fonctions personnalisées doivent se trouver dans un module standard. Les modules de classe, c'est pour créer des classes ^^. Pour tester mon appli, perso, je fais comme si j'étais l'utilisateur final. J'essaie les différents scénarios pour voir si à un moment donné ou à un autre, il y a un message d'erreur. Si c'est le cas, j'utilise les debug.print et les msgBox pour trouver d'où vient le problème
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    D'accord je comprends mieux comment tester mes propres bout de code désormais !

    Cependant comment fais-tu pour tester des conditions qui doivent être définit par l'utilisateur? Tu te met dans un cas précis ou la condition vaut une certaine valeur et tu regardes qu'elle valeur te retourne VBA .
    Si j'ai une condition sur une checkbox , je peux lui associé une valeur rien que pour tester le programme ?

    Bien à toi !

  18. #18
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Je ne vois pas où tu as un problème. Si t'as une checkbox, tu la coches/décoches puis tu fais l'action que l'utilisateur doit faire et tu vois ce que ça donne....
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  19. #19
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Cela évite de jongler entre le formulaire et le code ^^

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2013
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Bon après avoir suivi tes conseils en débogage, j'obtiens un résultat encourageant mais pas encore le résultat souhaité.

    J'obtiens un tableau dans lequel les en-têtes des colonnes A1,B1 et C1 sont coloré en gris.
    Ce tableau contient toute la liste de tous les produits.
    Cependant les couleur rouge ou vert ne s'affichent pas suivant les conditions que j'ai mise en place.

    Voici mon 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
    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
    Option Compare Database
    Public Sub PreparationTest()
        
    'Déclaration de la variable
    Dim spdTableau As OWC10.Spreadsheet
    Dim Rcdset As DAO.Recordset
    Dim strSQL As String
    Dim i As Integer
    Dim j As Integer    
    ' Affectation de la variable
    Set spdTableau = Forms![FormulaireTEST_MEFConditionnelle].Spreadsheet_Test.Object
    strSQL = "SELECT Table_Product.Product, Table_Size.Size, Table_BSEN.[BS EN Specification]" & _
    "FROM [Table_Size] INNER JOIN ([Table_BSEN] INNER JOIN [Table_Product] ON" & _
    "[Table_BSEN].[No BS EN] = [Table_Product].[Code BS EN]) ON [Table_Size].[No Size] = [Table_Product].[Code Size];"
    Set Rcdset = CurrentDb.OpenRecordset(strSQL)
        
    'Préparation de l'aspect
    With spdTableau
                .DisplayToolbar = False                      ' on désactive la barre d'outils        
             With .Windows(1)
                .DisplayHorizontalScrollBar = False      ' on désactive la barre de défilement horizontale            
                .DisplayWorkbookTabs = False             ' on désactive la visualisation des onglets            
                .DisplayColumnHeadings = False           ' on désactive les entêtes de colonnes            
                .DisplayRowHeadings = False              ' on désactive les entêtes de lignes                         
             End With       
    End With
    '=====================================================================================
      
    'On vide la feuille de toute données
        spdTableau.Cells.Delete
        spdTableau.Windows(1).FreezePanes = False
        
    'Choix des entêtes de colonnes
        With spdTableau
            .Range("A1").Value = "Product"
            .Range("B1").Value = "Size"
            .Range("C1").Value = "BS EN Specification"
        End With
        
        'Couleur de l'entête des colonnes
        spdTableau.Range("A1").Interior.Color = RGB(175, 175, 175)
        spdTableau.Range("B1").Interior.Color = RGB(175, 175, 175)
        spdTableau.Range("C1").Interior.Color = RGB(175, 175, 175)
        
        'On fixe volets pour entête fixe
        spdTableau.Range("A2").Select
        spdTableau.Windows(1).FreezePanes = True
        
        'Remplissage de la feuille
        j = 2
        While Not Rcdset.EOF
            With spdTableau
                .Range("A" & j).Value = Rcdset("Product")
                .Range("B" & j).Value = Rcdset("Size")
                .Range("C" & j).Value = Rcdset("BS EN Specification")
    
            End With
            i = j + 1
            Rcdset.MoveNext    
    Wend    
        'Forme
        With spdTableau.Range("A1" & spdTableau.Range("A1").End(xlDown).Row)
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
        End With    
        With spdTableau.Range("B1" & spdTableau.Range("B1").End(xlDown).Row)
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
        End With
        With spdTableau.Range("C1" & spdTableau.Range("C1").End(xlDown).Row)
            .Columns.AutoFit
            .Borders.LineStyle = xlContinuous
        End With    
        'Libération des variables
        Rcdset.Close
        Set Rcdset = Nothing
        Set spdTableau = Nothing
      
    '=====================================================================================
        
        ' Condition et mise en forme
        For i = 2 To spdTableau.Range("A2").End(xlDown).Row
            Select Case spdTableau.Range("C" & i).Value
                Case "EN 1600"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0) 'couleur vert
                Case "EN ISO 3580"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 14172"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 14343"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 17633"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 17634"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 18274"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case "EN ISO 21952"
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(0, 255, 0)
                Case Else
                spdTableau.Range("A" & i & ":C" & i).Interior.Color = RGB(255, 0, 0) 'couleur rouge
    
            End Select
        Next i
        
        'Libération des variables
        Set spdTableau = Nothing
    
    End Sub
    J'obtiens des messages d'erreur différents à chaque fois que je lance mon programme.
    La ligne posant problème est la ligne 82 où je demande a i de prendre les valeurs de 1 jusqu'à mon dernier enregistrements.
    Donc des fois il me marque " Dépassement de capacité " et d'autre fois toujours à la même ligne il me marque "Variable objet ou variable de bloc with non définie"

    Bien à toi !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] if...then...else
    Par jive dans le forum ASP
    Réponses: 5
    Dernier message: 16/09/2005, 14h11
  2. [TagLib] Structure if then else
    Par mush_H dans le forum Taglibs
    Réponses: 5
    Dernier message: 19/07/2005, 15h31
  3. If Then Else
    Par Piout dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 24/02/2005, 16h09
  4. IF THEN ELSE imbriqués
    Par nuke_y dans le forum Oracle
    Réponses: 2
    Dernier message: 15/11/2004, 14h57
  5. [CR 7] [débutante] pb avec if then else
    Par xs_nady dans le forum Formules
    Réponses: 8
    Dernier message: 28/05/2004, 15h36

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