Activation macro si changement VALEUR cellule

Résolu
charette63 Messages postés 88 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 19 mai 2011 - 9 mai 2011 à 22:13
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 - 11 mai 2011 à 18:54
Bonjour à toutes et tous,

la macro suivante vérifie le nom des onglets du classeur quand il y a changement dans une cellule de la colonne 3
Le problème est que la valeur de ces cellules est gérée via une formule liée a un autre classeur et la macro "lit" la formule (qui est invariable) et non le résultat (qui est variable).Donc, pas d'activation de la macro.
Y a-t-il moyen de faire comprendre à cette satanée macro que c'est la valeur de la cellule qu'il faut prendre en compte?

Je sais qu'il y a une alternative, c'est de cibler le dossier source dans lequel les changements sont effectués, mais le problème est que le dossier de classeurs sera dupliqué chaque année avec (forcement) un changement de nom. Donc le chemin de la source sera à modifier chaque fois dans la macro et ce n'est pas moi qui serai en charge de dupliquer le dossier.



Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
Dim Feuille As Worksheet
For Each Feuille In ThisWorkbook.Worksheets
If Feuille.Name <> "Horaire" Then
If Feuille.Name <> Feuille.Range("R1") Then Feuille.Name = Feuille.Range("R1")
End If
Next

End Sub


merci pour votre aide

cordialement
Thierry

25 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
11 mai 2011 à 16:35
La procédure de correction deviendrait ceci
Public Sub CorrigeFormules()
    
    On Error Resume Next
    Dim feuille As Worksheet
    Dim ligne As Long
    Dim ligneFin As Long
    
    For Each feuille In ThisWorkbook.Worksheets
        
        'Pour feuil1
        If feuille.Name = "Feuil1" Then
        
            'Calcul de la dernière ligne du tableau.
            'Cette formule recherche la première cellule
            'vide vers le bas en partant de la cellule
            'AK3. Il faut que la colonne AK soit remplie
            'pour chaque ligne du tableau. Si ce n'est pas
            'la cas il faudra remplacer AK par une colonne pleine.
            'S'il n'y en a aucune, il faudra trouver un autre moyen de
            'déterminer la dernière ligne
            ligneFin = feuille.Range("AK3").End(xlDown).Row
                    
            'Pour chaque employé (de la ligne 3 à la
            'fin du tableau en sautant 2 lignes à chaque fois)
            For ligne = 3 To ligneFin Step 2
                
                'On effectue un recherche/remplace dans la plage AK-AM de la ligne courante et de la ligne
                'suivante. On remplace REF# par la valeur de la colonne AN de la ligne courante
                feuille.Range("AK" & ligne & ":AM" & ligne + 1).Replace What:="REF#", _
                        Replacement:=feuille.Range("AN" & ligne).Value, LookAt:=xlPart, _
                        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                        ReplaceFormat:=False
                
            Next
        
        Else 'Pour toutes les feuilles autres que feuil1
        
            feuille.Cells.Replace What:="REF#", Replacement:=feuille.Name, LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                    ReplaceFormat:=False
        End If
    Next
    
    Application.Calculate
End Sub


Le seul souci est le calcul de la dernière ligne du tableau dans feuil1. Voir explication dans le commentaire.
0
charette63 Messages postés 88 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 19 mai 2011
11 mai 2011 à 17:03
Purée, quel travail!!!

Pour info, la colonne AK est pleine ... de formules et liaisons, mais pas forcement de valeurs.

Je teste ça en début de soirée

encore pour info, la dernière ligne concernée est la ligne 70, il y a peut-etre moyen de stopper la macro à cette ligne?

merci beaucoup foliv
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
11 mai 2011 à 17:55
Si la dernière ligne est toujours la ligne 70, il vous suffit de remplacer

ligneFin = feuille.Range("AK3").End(xlDown).Row


Par
ligneFin = 70


Et le tout est joué
0
charette63 Messages postés 88 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 19 mai 2011
11 mai 2011 à 18:23
Mon cher foliv,

c'est une merveille, tout fonctionne parfaitement.
Les cellules avec formule, sont bien considérées par la macro comme non vide (et c'est tant mieux)
C'est un plaisir de travailler avec toi (ben oui, je n'ai fait que de te regarder )
Mille et un mercis

cordialement

Thierry
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
11 mai 2011 à 18:54
Mais de rien.

Au plaisir de faire plaisir.

Bonne continuation.
0
Rejoignez-nous