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 :

Blocage cause VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut Blocage cause VBA
    Bonjour,

    En VBA j'ai créé une procédure de mise à jour de cellules en fonction de la valeur d'une autre cellule. La mise à jour est automatique, pas besoin de lancer la macro.
    Je commence par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_change(ByVal Target As Range)
    et dans la même macro, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_calculate()
    Lorsque j'encode des données, il n'y a pas de problème. tout se passe bien mes formules fonctionnent convenablement.

    MAIS, lorsque je fait un tri, un ajout de ligne, un éffacement de colonne, .... tout se bloque, je suis obligé de fermer Excel.

    J'ai heureusement le droit de sauver les données et ensuite, je relance mon fichier sans le moindre problème.
    Quelqu'un peut-il me dire ce qu'il y a lieu de faire pour éviter ce blocage.
    D'avance je vous remercie

    Fred

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    il nous faudrait le code pour voir ce qui te bloque

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut voici le code
    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
    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
    Private Sub Worksheet_change(ByVal Target As Range)
     
     
    On Error Resume Next
     
       If Target.Value = "aaaaaaa" Then
          Target.Font.ColorIndex = 0
       End If
     
       My_chantier_pos = InStr(1, Cells(RowIndex, 7), "-")
       My_chantier = Mid(Cells(RowIndex, 7), My_chantier_pos + 1, 4)
       If My_chantier = "bbbbb" Then
          Cells(RowIndex, 4) = "cccccc"
       End If
     
    Resume
     
    End Sub
     
    Private Sub Worksheet_calculate()
     
    Application.ScreenUpdating = False '''Pour désactiver la mise à jour de l'affichage
     
     
    Dim My_cell_AM 
    Dim My_lines 
    Dim My_chantier_pos
    Dim My_chantier
     
     
    My_lines = Cells(4, 74)
     
    On Error Resume Next
     
    For RowIndex = 4 To My_lines
       My_cell_AM = Cells(RowIndex, 13)
       If My_cell_AM = "" Then
          Cells(RowIndex, 21) = ""
       Else
          If My_cell_AM = "zzzzz" Then
             If Len(Cells(RowIndex, 21)) < 2 Then
                Cells(RowIndex, 21) = "yyyyy"
             End If
          Else
             If My_cell_AM = "xxxxx" Then
                If Len(Cells(RowIndex, 21)) < 2 Then
                   Cells(RowIndex, 21) = "ggggg"
                End If
             Else
                If Len(Cells(RowIndex, 21)) < 2 Then
                   Cells(RowIndex, 21) = "---"
                End If
             End If
          End If
       End If
     
       My_chantier_pos = InStr(1, Cells(RowIndex, 7), "-")
       My_chantier = Mid(Cells(RowIndex, 7), My_chantier_pos + 1, 4)
     
       If My_chantier = "aaaaa" Then
          Cells(RowIndex, 4) = "zzzzz"
       End If
       If My_chantier = "bbbbb" Then
          Cells(RowIndex, 4) = "yyyyy"
       End If
       If My_chantier = "ccccc" Then
          Cells(RowIndex, 4) = "xxxxx"
       End If
       If My_chantier = "ddddd" Then
          Cells(RowIndex, 4) = "wwwww"
       End If
       If My_chantier = "eeeee" Then
          Cells(RowIndex, 4) = "vvvvv"
       End If
       If My_chantier = "fffff" Then
          Cells(RowIndex, 4) = "uuuuu"
       End If
     
     
    Next
     
     
    End Sub

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Et si tu fait F9 ca doit bloquer aussi je présume ?

    Ton code boucle pas mal

    A chaque modif de cellule dans le calculate tu repasses dans le change et le code suivant s'execute a chaque fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       My_chantier_pos = InStr(1, Cells(RowIndex, 7), "-")
       My_chantier = Mid(Cells(RowIndex, 7), My_chantier_pos + 1, 4)
       If My_chantier = "bbbbb" Then
          Cells(RowIndex, 4) = "cccccc"
       End If
    Est ce bien utile

    De plus je ne suis pas sur que le calculate ne redemarre pas a chaque fois du début s'il trouve un calcul à effectuer dans une cellule modifiée

  5. #5
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 22
    Par défaut
    Mon code boucle en effet pas mal.
    Ceci est dû au fait que des corrections peuvent être apportées n'importe où et n'importe quand dans le tableau.
    Ceci dit seule les cellules de la ligne modifiée sont concernées, mais je ne sais pas comment conaître la ligne sur laquelle je me trouve.

    Merci pour ton aide.

    Fred

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    mais je ne sais pas comment conaître la ligne sur laquelle je me trouve.
    Si tu es dans le Worksheet_Change
    Sinon en cas général

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

Discussions similaires

  1. Fichier excel ne s'ouvre pas a cause vba
    Par rodex001 dans le forum Excel
    Réponses: 8
    Dernier message: 17/03/2015, 14h08
  2. Blocage cause trigger
    Par serge0934 dans le forum Développement
    Réponses: 2
    Dernier message: 10/08/2006, 16h24
  3. Réponses: 6
    Dernier message: 09/06/2006, 00h19
  4. [VBA] pb de blocage de navigation
    Par zooffy dans le forum Access
    Réponses: 1
    Dernier message: 05/12/2005, 10h25
  5. [VBA-E] Message Blocage Macro
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 24/11/2005, 15h13

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