Décalage de ma formule VBA après incrémentation de lignes

MACx

XLDnaute Occasionnel
Bonjour à vous,

SVP j'ai un méga problème que je n'arrive pas à résoudre, et je vous avoue ne pas avoir su comment chercher sur le site si mon problème avait déjà été posé auparavant.
Voilà, donc ci-joint un fichier avec plusieurs feuilles, mais seule la feuille VALIDATION nous intéresse ici:

Il y a un code VBA sur la feuille Validation que voici :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Column = 11 Then
    If Target = "Non Envoyée" Or Target = "A Envoyer" Or Target = " -" Then
             Cells(Target.Row, "L").ClearContents
         Else
             Cells(Target.Row, "L") = Date
    End If
 End If
     
 If Target.Column = 9 Then
     If Target = "Validée" Then
            Cells(Target.Row, "J") = Date
        Else
            Cells(Target.Row, "J").ClearContents
    End If
 End If

 If Target.Column = 5 Then
     If Target = 0 Then
            Cells(Target.Row, "I") = "Facture à 0"
            Cells(Target.Row, "K") = " -"
         Else
            Cells(Target.Row, "I").ClearContents
     End If
 End If
End Sub

Selon le libellé de la colonne I sélectionné, il y aura des petits changements sur la colonne K (au niveau du libellé) et de couleur sur les colonnes A, B & I comme vous pourrez le constater.

Je suis amateur en VBA alors je ne sais pas si par rapport à ce que j'ai fait, il y'a plus simple ou plus intelligent mais en tous cas le résultat fonctionne comme je le désire... enfin presque !

Mon problème est que au fur et à mesure que des lignes s'incrémentent (en ligne 2 uniquement) dans la feuille Validation, les valeurs des colonnes I à L ne suivent plus (vers le bas).

Comment puis-je faire pour que ce décalage se fasse de manière "régulière".
Je ne comprends pas pourquoi l'incrémentation de ligne décale mon code et donc mes valeurs des cellules de I à L.

J'espère avoir été assez clair, et merci d'avance à ceux qui pourront m'aider !
 

Pièces jointes

  • XLD_MACxValFA.xlsm
    60.7 KB · Affichages: 55
  • XLD_MACxValFA.xlsm
    60.7 KB · Affichages: 54
  • XLD_MACxValFA.xlsm
    60.7 KB · Affichages: 62

Pierrot93

XLDnaute Barbatruc
Re : Décalage de ma formule VBA après incrémentation de lignes

Re,

Mon problème arrive lorsque j'actualise mon tableau (donc, bouton actualiser de l'onglet Données") et bien tout s'efface et se remets par défaut, en "Non Envoyée". Du coup je perds tout l'historique de cette colonne :/ (pas cool!)

vois pas d'onglet "données" ni de bouton "actualiser" dans ton fichier...
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

C'est l'onglet Excel par défaut. Dans la bande de menu en haut.
Je te mets une impression écran ;)
 

Pièces jointes

  • ScreenPrint.jpg
    ScreenPrint.jpg
    37.2 KB · Affichages: 39

Pierrot93

XLDnaute Barbatruc
Re : Décalage de ma formule VBA après incrémentation de lignes

Re,

pas la source des données pour tester... mais il y a fort à parier que lors de l'actualisation des données déclenche l'événement "Worksheet_Change" et comme c'est là que l'on trouve des "clearcontents".... essaye peut être en modifiant comme suit, non testé :

Code:
Option Explicit
Dim b As Boolean
Private Sub Worksheet_Calculate()
b = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If b Then b = False: Exit Sub
Application.EnableEvents = False
 If Target.Column = 11 Then
    If Target = "Non Envoyée" Or Target = "A Envoyer" Or Target = " -" Then
             Cells(Target.Row, 12).ClearContents
         Else
             Cells(Target.Row, 12) = Date
    End If
 End If
 If Target.Column = 9 Then
     If Target = "Validée" Then
            Cells(Target.Row, 10) = Date
        Else
            Cells(Target.Row, 10).ClearContents
    End If
 End If
 If Target.Column = 5 Then
     If Target = 0 Then
            Cells(Target.Row, 9) = "Facture à 0"
            Cells(Target.Row, 11) = " -"
         Else
            Cells(Target.Row, 9).ClearContents
     End If
 End If
  Application.EnableEvents = True
 End Sub
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

Alors après avoir introduis ta nouvelle formule et après avoir cliqué sur Actualiser, les données de la colonne Date Envoi restent INCHANGEES !!! (s'est génial!!!) MAIS, j'obtiens quand même un bug au niveau du code que voici :
MsgBox: "Erreur de compilation: Variable non définie" (donc je clique sur OK)

Private Sub Worksheet_Calculate() (est surligné jaune)
b = (est surligné bleu)
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

J'ai remis Option Explicit histoire de voir ce que ça allait donner et mtn le bug s'est décalé de qqs lignes
Private Sub Worksheet_Change(ByVal Target As Range) (surligné jaune)
If b Then b = False: Exit Sub (il n'y a que le premier b qui est surligné bleu)
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

Non, mais sur la même page de code j'ai ça :
Code:
' Mettre en surbrillance la cellule active de la colonne A

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim iState As Integer
Dim bSaved As Boolean
If Application.CutCopyMode = False Then 
bSaved = ThisWorkbook.Saved
iState = Application.Calculation
Application.Calculation = xlCalculationAutomatic
ActiveCell.Calculate 
Application.Calculation = iState
ThisWorkbook.Saved = bSaved
End If
End Sub

Mon code que tu as corrigé est écrit juste ici en dessous.
 

Pierrot93

XLDnaute Barbatruc
Re : Décalage de ma formule VBA après incrémentation de lignes

Re,

Non, mais sur la même page de code j'ai ça :

fonctionne chez moi dans ton fichier avec le code ci-dessous dans le module :
Code:
Option Explicit
Dim b As Boolean
Private Sub Worksheet_Calculate()
b = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If b Then b = False: Exit Sub
Application.EnableEvents = False

 If Target.Column = 11 Then
    If Target = "Non Envoyée" Or Target = "A Envoyer" Or Target = " -" Then
             Cells(Target.Row, 12).ClearContents
         Else
             Cells(Target.Row, 12) = Date
    End If
 End If
     
 If Target.Column = 9 Then
     If Target = "Validée" Then
            Cells(Target.Row, 10) = Date
        Else
            Cells(Target.Row, 10).ClearContents
    End If
 End If

 If Target.Column = 5 Then
     If Target = 0 Then
            Cells(Target.Row, 9) = "Facture à 0"
            Cells(Target.Row, 11) = " -"
         Else
            Cells(Target.Row, 9).ClearContents
     End If
 End If
 
 Application.EnableEvents = True
 
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim iState As Integer
Dim bSaved As Boolean
If Application.CutCopyMode = False Then 'If a copy is active, do not update cell otherwise copy is cancelled...
bSaved = ThisWorkbook.Saved
iState = Application.Calculation
Application.Calculation = xlCalculationAutomatic
ActiveCell.Calculate ' Enable to highlight the active row with conditional formatting
Application.Calculation = iState
ThisWorkbook.Saved = bSaved
End If
End Sub
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

Excuse moi
je me suis complètement planté de colonne dans l'exposé de mon problème.
Ce n'est pas la colonne L mais la colonne K (Notification) qui me pose problème... Désolé.
Quand je clique sur Actualiser TOUT se remets en "Non Envoyée"
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

En fait mon premier exposé du problème était correct, c'est après que moi j'ai tu t'induire en erreur.. désolé
Bonjour Pierrot93,
Je reviens t'embêter toujours sur mon même fichier mais un autre problème... facile pour toi celui là j'en suis sûr!
Il s'agit de la colonne K de mon fichier où on peut choisir un libellé parmi une liste.
Mon problème arrive lorsque j'actualise mon tableau (donc, bouton actualiser de l'onglet Données") et bien tout s'efface et se remets par défaut, en "Non Envoyée". Du coup je perds tout l'historique de cette colonne :/ (pas cool!)

A savoir, sur chaque cellule de cette colonne ("K") il y a la formule suivante :
=SI([@Etat]="Validée";"A Envoyer";"Non Envoyée")

Je ne comprends pas pourquoi tout se mets en Non Envoyée dès que je clique sur Actualiser !

Merci de ton aide ou celle de quelqu'un d'autre !
 

MACx

XLDnaute Occasionnel
Re : Décalage de ma formule VBA après incrémentation de lignes

Peux-tu travailler sur ce nouveau fichier que je viens de réactualiser (j'ai rajouté une colonne entre temps 'Visa')
Merci
 

Pièces jointes

  • XLD_ValFA_TestMars2015.xlsm
    63 KB · Affichages: 35
  • XLD_ValFA_TestMars2015.xlsm
    63 KB · Affichages: 36
  • XLD_ValFA_TestMars2015.xlsm
    63 KB · Affichages: 39

Discussions similaires

Statistiques des forums

Discussions
312 336
Messages
2 087 387
Membres
103 534
dernier inscrit
Kalamymustapha