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 :

Excel instable avec VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut Excel instable avec VBA
    Bonjour à tous et merci de votre temps.

    Attention, je débute en VBA Excel.

    J'ai un classeur Excel (env 10 feuilles) enrichi avec du VBA pour créer une interface utilisateur plus sympa.

    Dans l'une de mes feuilles j'offre à l'utilisateur la possibilité de choisir un niveau de groupe et dans la colonne d'aprés une liste de groupes en fonction du niveau.

    J'ai utilisée la fonction de validation de contenu d'une cellule pour offrir une liste déroulante de choix. Cette liste est modifier par VBA. La source de validation est une zone nommée, parmis 4, qui est définie dans une autre feuille.

    Ici le code qui fait cela, la partie en gras indique la fonction qui plante.

    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
    Private Sub AssignerListeGroupe(prmCell As Range)
        Application.Volatile: 'Force Excel à recaclcuer les célulles qui utilise cette procédure
        Dim nomListe As String
        
        Select Case prmCell
            Case "I"
                nomListe = "ListeGroupeInitiation"
                
            Case "R"
                nomListe = "ListeGroupeRecreation"
                
            Case "C"
                nomListe = "ListeGroupeCompetition"
                
            Case "P"
                nomListe = "ListeGroupePerfectionnement"
                
            Case ""
                Call DesassignerUneListeDeValidation(Cells(prmCell.Row, DONNEES_COLONNE_GROUPE))
                Cells(prmCell.Row, DONNEES_COLONNE_GROUPE).ClearContents
                
            Case Else
                MsgBox "Le niveau ne peut être que I, R, C ou P", vbCritical
        End Select
        
        If nomListe <> "" Then
            Call AssignerUneListeDeValidation(Cells(prmCell.Row, DONNEES_COLONNE_GROUPE), nomListe)
        End If
        
    End Sub
    
    Public Sub DeprotegerFeuille()
        Me.Unprotect
    End Sub
    
    Public Sub ProtegerFeuille()
        Call Me.Protect(contents:=True, _
                        AllowInsertingRows:=True, _
                        AllowDeletingRows:=True, _
                        AllowSorting:=True, _
                        AllowFiltering:=True)
    End Sub
    
    Private Sub AssignerUneListeDeValidation(prmCell As Range, prmNomListeValidation As String)
        Call DeprotegerFeuille
        
        With prmCell.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                 Operator:=xlBetween, Formula1:="=" & prmNomListeValidation
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = "Erreur"
            .InputMessage = ""
            .ErrorMessage = "Seules les valeurs affichées dans la liste sont acceptées."
            .ShowInput = True
            .ShowError = True
        End With
    
        Call ProtegerFeuille
    End Sub
    
    Private Sub DesassignerUneListeDeValidation(prmCell As Range)
    
        With prmCell.Validation
            .Delete
        End With
    
    End Sub
    Ce code fonctionne trés bien une ou deux fois puis plante avec une erreur système grave provoquant l'offre de récupération du classeur.

    Je suis en Excel 2002 SP3.

    Si quelqu'un a une idée de la cause du problème ou connait une méthode pour obtenir le même résultat sans VBA, je suis interessé.
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    Private Sub AssignerListeGroupe(prmCell As Range)
    Application.Volatile: 'Force Excel à recaclcuer les célulles qui utilise cette procédure
    Je ne sais pas d'ou vient le probleme mais Application.Volatile n'a aucun sens dans une procédure Sub.

    Quant à se passer de VBA, il me semble que c'est possible en définissant la source de validation avec une combinaison de formules telles que recherchev,equiv,indirect, decaler.

    Une recherche avec les mots listes, validation, cascade devrait te donner des pistes.

    Cordialement,

    Tirex28/

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Merci pour le bug et la piste, je vais chercher par là.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/01/2013, 10h42
  2. Convertir un string en nombre sous Excel 2010 avec VBA
    Par sambrook dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2013, 09h38
  3. Covertir String en decimal sous Excel 2010 avec VBA
    Par sambrook dans le forum Excel
    Réponses: 1
    Dernier message: 28/01/2013, 15h45
  4. [VBA-Excel] Plagen avec Cells
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/01/2005, 10h49
  5. Ouvrir un document Excel en READ ONLY (avec VBA)
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 29/12/2004, 20h48

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