RESOLU par Robert que je remercie - Exécution auto macro si changement dans feuille

  • Initiateur de la discussion Initiateur de la discussion castor30
  • 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 !

castor30

XLDnaute Occasionnel
Bonjour à tous, le forum,,
J'ai cette macro qui me pose problème
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveCell.FormulaR1C1 = _
        "=IF(AND(R[1]C[-7]="""",R[1]C[-6]="""",R[1]C[-5]=""""),"""",1)"
    Range("Z1").Copy
    [Base2].Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("A1").Activate
End Sub
Ce que je voudrais obtenir, c'est en cas de modification dans la feuille Base la macro se fasse automatiquement.
Pour une raison que je ne comprends pas, elle boucle sans fin.
Cette macro est placée dans la feuille Base
Je vous remercie de l'aide que vous m'apporterez.
 
Bonjour Castor, bonjour le forum,

La macro s'exécute chaque fois qu'il y a un changement dans l'onglet Base. Donc, la formule dans la cellule active comme le PasteSpecial dans la plage nommée Base2 relancent la procédure. J'utilise une variable booléenne TEST pour éviter ça !
Par ailleurs, et même si ça n'a pas d'incidence sur ton problème, évite les Select inutiles qui ne font que ralentir l'exécution du code et sont source de plantages. Essaie ce code :

VB:
Private TEST As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If TEST = True Then Exit Sub
TEST = True
ActiveCell.FormulaR1C1 = _
"=IF(AND(R[1]C[-7]="""",R[1]C[-6]="""",R[1]C[-5]=""""),"""",1)"
Range("Z1").Copy
Range("Base2").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Activate
TEST = False
End Sub
 
Re,

A1 est bien sélectionné chez moi !... Mais je viens de me rendre compte que la macro est déclenchée quand on valide... Pour cela, que l'on ait utilisé la souris en cliquant ailleurs ou la touche [Entrée] ou la touche [Tab], la cellule active est déplacée et la formule se retrouve ailleurs que dans la cellule modifiée.
Mais sans le fichier qui va avec des explications claires de ce que tu veux faire difficile de comprendre et donc de t'aider...

Pour le champ dynamique utilise le Gestionnaire de nom du bandeau Formules :
• Clique sur le bouton Nouveau...
• nomme la plage dynamique dans le champ Nom
• dans le champ Fait référence à, la formule : =DECALER(Feuil1!$Z$2;;;NBVAL(Feuil1!$Z:$Z)-1)

(Feuil1 à adapter à ton cas)...

Attention ! La plage nommée ainsi créée n'apparait dans la Zone Nom mais uniquement dans le Gestionnaire de nom. En revanche, utilisable dans les formules ou VBA...
 
Bonjour Castor, bonjour le forum,

Désolé mais je ne comprends pas le rapport entre le code et tes explications ?!... Tu me dis que tu veux sélectionner les lignes dont les colonnes S à U contiennent une valeur. Puis tu parles d'imprimer ? Ce n'est absolument pas clair pour moi.
Ce que je peux te proposer c'est de renvoyer dans un nouvel onglet la liste des lignes. Cela te conviendrait-il ?

C'est la troisième fois que je te réponds mais ma réponses se perd car le site plante sans arrêt. J'espère que ça va marcher cette fois...
 
Bonjour Robert,
Je ne peux filtrer simultanément les colonnes S T et U d’où l'idée que j'ai est de filtrer à partir de la colonne Z pour avoir l'ensemble des lignes comme sur l'image.
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    36 KB · Affichages: 33
Re,
Merci beaucoup Robert, cependant n'est-il pas possible de rester sur la feuille Base ? sans l'ajout d'une feuille Filtre...
D'autre part, peut-on supprimer le bouton sur la feuille Base, ou de faire que le code (merci beaucoup pour les commentaires) s'active automatiquement lors d'un changement dans les colonnes S T ou U de la feuille Base (Plage dynamique).
Il faudrait aussi que cela masque les colonnes C - D - E - H - N à R et V pour l'impression et les ré-affiche ensuite.
 
Dernière édition:
Re,

Oui en fait c'est même plus simple... Pour afficher à nouveau toutes les lignes et toutes les colonnes, double-clique sur n'importe quelle cellule de la ligne 1...

Le code :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans l'onglet
'si le double-clic a lieu dans la ligne 1, affiche toutes les lignes et colonnes et empêche le mode [Édition] lié au double-clic
If Target.Row = 1 Then Rows.Hidden = False: Columns.Hidden = False: Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TEST As Boolean 'déclare la variable TEST

If Target.Row < 3 Then Exit Sub 'si e changement a lieu dans une ligne inférieure à 3, sort de la procédure
'si le changement a lieu ailleurs que dans les colonnes S à U, sort de la procédure
If Application.Intersect(Target, Columns("S:U")) Is Nothing Then Exit Sub
Application.ScreenUpdating = False 'masque les rafraîchissement d'écran
TV = Range("A2").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
  TEST = False 'initialise la variable TEST
  For J = 19 To 21 'boucle 2 : sur les colonne 19 à 21 (=> colonnes S à U)
  If TV(I, J) <> "" Then 'condition si la donnée ligne I colonne J de TV n'est pas vide
  TEST = True 'redéfinit la variable TEST
  Exit For 'sort de la boucle 2
  End If 'fin de la condition
  Next J 'prochaine colonne de la boucle 2
  If TEST = False Then Rows(I).Hidden = True 'si TEST est [Faux], masque la ligne I
Next I 'prochaine ligne de la boucle 1
'masque les colonnes
Application.Union(Columns("C:E"), Columns("H:H"), Columns("N:R"), Columns("V:V")).EntireColumn.Hidden = True
End Sub

Le fichier :
 

Pièces jointes

- 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

Réponses
18
Affichages
407
Réponses
10
Affichages
636
Réponses
2
Affichages
334
Réponses
17
Affichages
1 K
Retour