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 :

Code qui ne fonctionne qu'avec un command button


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut Code qui ne fonctionne qu'avec un command button
    Bonjour, je voudrai vous poser une petite question. J'ai ce code qui devrait se déclencher à la fermeture du fichier mais malheureusement, il ne s'applique pas ni ne provoque d'erreur d'ailleurs. Seulement il n'entraîne aucun évènement comme si il n'existait pas. Alors que si je copie colle ce code et l'applique à la pression d'un command button, il marche correctzement avait vous une explication ?

    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
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim Lws1 As Integer, Lws2 As Integer
    Dim VC As String, VT As Range
    Dim suivant As Boolean
     
    Set ws1 = Worksheets("Factures mobilisées")
    Set ws2 = Worksheets("Archives régularisations")
     
    For o = 2 To Lws1
    ws1.Range("Z" & o).FormulaR1C1 = "=CONCATENATE(RC[-24],RC[-23])"
    Next o
     
    Lws1 = ws1.Cells(Rows.Count, 26).End(xlUp).Row
    Lws2 = ws2.Cells(Rows.Count, 26).End(xlUp).Row
    suivant = False
     
    Do While Lws1 > 1
      VC = ws1.Cells(Lws1, 26) 'valeur à chercher
      Do
        With ws1
          'verifier si la valeur est dans la feuille 1
          Set VT = .Range("Z2:Z" & Lws1 - 1).Find(VC, LookIn:=xlValues, lookAt:=xlWhole)
          If Not VT Is Nothing Then 'si on la trouve au dessus
            .Rows(VT.Row & ":" & VT.Row).Delete Shift:=xlUp 'on supprime la ligne
            Lws1 = Lws1 - 1 '
            suivant = True ' on en cherche un autre
          Else
            suivant = False 'il n'y en a plus -> sortir de la boucle
          End If
        End With
      Loop While suivant = True And Lws1 > 1
     
      'idem en verifiant dans la feuille 2 si la valeur est dans la feuille 2
      If Not ws2.Range("Z2:Z" & Lws2).Find(VC, LookIn:=xlValues, lookAt:=xlWhole) Is Nothing Then _
        ws1.Rows(Lws1 & ":" & Lws1).Delete Shift:=xlUp
      Lws1 = Lws1 - 1
    Loop
     
    Set ws1 = Nothing
    Set ws2 = Nothing
    Set VT = Nothing

    Merci beaucoup d'avance à ceux qui pourront m'aider à comprendre

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    si tu es bien certain qu'il se trouve dans l'event workbook_Close
    moi ce que j'essaierai, c'est dele mettre dans un module avec le nom suivant
    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
     
    sub AutoClose()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim Lws1 As Integer, Lws2 As Integer
    Dim VC As String, VT As Range
    Dim suivant As Boolean
     
    Set ws1 = Worksheets("Factures mobilisées")
    Set ws2 = Worksheets("Archives régularisations")
     
    For o = 2 To Lws1
    ws1.Range("Z" & o).FormulaR1C1 = "=CONCATENATE(RC[-24],RC[-23])"
    Next o
     
    Lws1 = ws1.Cells(Rows.Count, 26).End(xlUp).Row
    Lws2 = ws2.Cells(Rows.Count, 26).End(xlUp).Row
    suivant = False
     
    Do While Lws1 > 1
    VC = ws1.Cells(Lws1, 26) 'valeur à chercher
    Do
    With ws1
    'verifier si la valeur est dans la feuille 1
    Set VT = .Range("Z2:Z" & Lws1 - 1).Find(VC, LookIn:=xlValues, lookAt:=xlWhole)
    If Not VT Is Nothing Then 'si on la trouve au dessus
    .Rows(VT.Row & ":" & VT.Row).Delete Shift:=xlUp 'on supprime la ligne
    Lws1 = Lws1 - 1 '
    suivant = True ' on en cherche un autre
    Else
    suivant = False 'il n'y en a plus -> sortir de la boucle
    End If
    End With
    Loop While suivant = True And Lws1 > 1
     
    'idem en verifiant dans la feuille 2 si la valeur est dans la feuille 2
    If Not ws2.Range("Z2:Z" & Lws2).Find(VC, LookIn:=xlValues, lookAt:=xlWhole) Is Nothing Then _
    ws1.Rows(Lws1 & ":" & Lws1).Delete Shift:=xlUp
    Lws1 = Lws1 - 1
    Loop
     
    Set ws1 = Nothing
    Set ws2 = Nothing
    Set VT = Nothing
    end sub
    ceci dis je vois pas a quoi servent les modif si il n'y a pas de save du classeur???

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    Bonjour,

    Si on souhaite utiliser l'événement Workbook_BeforeClose, il faut mettre le code entre les lignes suivantes dans le module ThisWorkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Par défaut
    Citation Envoyé par JPierreM Voir le message
    Bonjour,

    Si on souhaite utiliser l'événement Workbook_BeforeClose, il faut mettre le code entre les lignes suivantes dans le module ThisWorkbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    End Sub
    Apparament ca marche comme ca !! Merci beaucoup !!!

Discussions similaires

  1. [XL-2007] Code pour selection de cellules qui ne fonctionne pas avec la fonction "Locked"
    Par coco.on.off dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/07/2014, 18h01
  2. [XL-2003] Problème avec code qui ne fonctionne pas
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2009, 16h41
  3. [Language] Code qui ne fonctionne pas
    Par kevinf dans le forum Langage
    Réponses: 2
    Dernier message: 21/11/2006, 21h08
  4. Code qui ne fonctionne pas
    Par maxti dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/10/2006, 11h45
  5. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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