Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Intersect ne fonctionne pas > version 2

  • Initiateur de la discussion Initiateur de la discussion dev_co
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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
 
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.
 
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
 
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 ?
 
Re,
Vraiment pas réveillé, votre macro répète la valeur AR1, donc si AR1 est vide il met vide partout.
Si vous voulez ne rien faire si D1 est vide :
VB:
If Not Intersect(Range("D1"), Target) Is Nothing Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
 
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.
 
?? 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 ?
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…