XL 2010 Intersect ne fonctionne pas > version 2

dev_co

XLDnaute Occasionnel
Bonjour
J'utilise souvent des "Intersect" mais là cela ne marche pas
j'ai fait pas à pas > on passe à la variable 1 , puis ça ,revient au "change" , on repasse à la variable 2 puis à nouveau "change" et là on sort ???
je vois pas !! je ne retouche pas à D1 ??
 

Pièces jointes

  • TEST Z.xlsm
    15 KB · Affichages: 15
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dev_co,
Je ne comprends pas bien la logique avec votre fichier.
Dans l'état avec les colonnes B et D vides vous avez Range("B100").End(xlUp).Row=4
donc les boucles vont de ... 5 à 4 donc ne sont pas effectuées.
Si vous mettez des valeurs en B5:Bxx et D5: Dxx alors effectivement les valeurs entrées sont remplacées par la valeur AR1.
( pour éviter toute ré entrance qui fait perdre du temps, il est utile de rajoutez en début Application.EnableEvents = False et le mettre à True en sortant. )
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Range("D1"), Target) Is Nothing Then
    Application.EnableEvents = False
    AR1 = Range("D1")
    Range("B4") = AR1
    Range("D4") = AR1

    For x = 5 To Range("B100").End(xlUp).Row
    Range("B" & x) = AR1
    Next x


    For x = 5 To Range("D100").End(xlUp).Row
    Range("D" & x) = AR1
    Next x
    
End If
Application.EnableEvents = True
End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Avant tout changement de contenu de cellule dans une Sub Worksheet_Change mettez Application.EnableEvents = False afin de ne pas provoquer une ré-invocation de cette procédure, pouvant aller parfois jusqu'à la saturation de la pile des appels
N'oubliez pas de remettre Application.EnableEvents = True après le dernier changement.
 

Jacky67

XLDnaute Barbatruc
Bonjour
J'utilise souvent des "Intersect" mais là cela ne marche pas
j'ai fait pas à pas > on passe à la variable 1 , puis ça ,revient au "change" , on repasse à la variable 2 puis à nouveau "change" et là on sort ???
je vois pas !! je ne retouche pas à D1 ??
Bonjour,
Ce n'est pas "Intersect" qui est en cause, mais "Worksheet_Change"
Quand on écrit sur une feuille avec cette macro évènementielle il faut l'instruction:
Application.EnableEvents = False
et
Application.EnableEvents =True
Sinon c'est le serpent qui se mord la queue
Exemple pour la macro
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("D1"), Target) Is Nothing Then
        Application.EnableEvents = False
        [b4:b10,d4:d10] = [d1]
        Application.EnableEvents = True
    End If
End Sub
 

dev_co

XLDnaute Occasionnel
Yups ! gros mea culpa ; quelle étourderie .....mal reveillé ?
en tout vous m'avez reveillé !
et oui mes col sont vides dans mon gros fichier , j'ai des données en col - 1 donc j'ai tout repris et c'est ok
merci

ps : je ne sais plus comment on met RESOLU ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
C'est qu'il y a beaucoup de ligne ou beaucoup de calcul, dans ce cas, commencez par :
VB:
Application.ScreenUpdating = false                ' Fige écran'
Application.Calculation = xlCalculationManual    ' Passage en calcul manuel'
Application.EnableEvents = False                ' Inhibe les events'
et finissez par :
Code:
Application.ScreenUpdating = True                    ' Remet écran'
Application.Calculation = xlCalculationAutomatic    ' Passage en calcul automatique'
Application.EnableEvents = True                        ' Réautorise les events'
Cela devrait améliorer la vitesse d'éxécution.
 

dev_co

XLDnaute Occasionnel
?? tu as regarder mon fichier ?
Il y a 20 lignes !
Si on met une valeur en D1 tout se rempli puis si on efface D1 on voit bien comme un jeu de dominos tout s'effacer au fur et a mesure !!!!! j'ai jamais vu une Boucle si lente .... pour de 5 à 20 ?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Et sans boucle ?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Intersect(Range("D1"), Target) Is Nothing Then Exit Sub
   Application.ScreenUpdating = False: Application.EnableEvents = False
   Range("b4:b" & Range("A100").End(xlUp).Row) = Range("D1")
   Range("d4:d" & Range("c100").End(xlUp).Row) = Range("D1")
   Application.EnableEvents = True
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
j'ai jamais vu une Boucle si lente
Sur mon PC et votre fichier il n'y a aucune différence au remplissage ou au vidage.
Sans les verrouillages du post #9, la vitesse me semble correcte.
20210730_181235.gif
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 535
dernier inscrit
moimeme1