Lancement d'une macro en automatique

Résolu/Fermé
bouhaben79 Messages postés 7 Date d'inscription vendredi 24 février 2012 Statut Membre Dernière intervention 15 novembre 2013 - 24 févr. 2012 à 14:14
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 5 mars 2012 à 13:40
Bonjour,


<Je souhaiterais créer une macro qui me permet de masquer des lignes sur plages différents après saisie d'une donnée dans une cellule

Exemple : Si A1 = 1 les lignes 8:12 et 23:29 se cachent

Biensur je voudrais que cette macro se lance dès saisie de la valeur dans la cellule A1

Qui peut m'aider sur ce sujet

Merci d'avance>
A voir également:

17 réponses

g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
24 févr. 2012 à 15:41
Bonjour,

Code à copier dans le module de feuille:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Range("A1") = 1 Then
Masquer
ElseIf Range("A1") <> 1 Then
Afficher
End If
End Sub


Code à copier dans un module standard:

Sub Masquer()
    Rows("8:12").Select
    Selection.EntireRow.Hidden = True
    Rows("23:29").Select
    Selection.EntireRow.Hidden = True
    Range("A1").Select
   End Sub
Sub Afficher()
    Rows("7:30").Select
    Selection.EntireRow.Hidden = False
    Range("A1").Select
End Sub


Cordialement.
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
24 févr. 2012 à 17:58
Salut,

clic droit sur l'onglet de feuille concernée/Visualiser le code et colle ce code dans la partie vide de la page qui s'ouvre

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
If [A1] = 1 Then [8:12,23:29].EntireRow.Hidden = True
If [A1] = 0 Then [8:12,23:29].EntireRow.Hidden = False
End If
End Sub

pour revenir à ta feuille Excel clic en haut à droite sur l'icone Excel.
lorsque tu saisiras 1 en A1 les lignes se masquerons et 0 pour les afficher
0
g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
24 févr. 2012 à 18:19
Bonjour Mike-31,

Je préfère ton code.
La 4 ème ligne devrait être modifiée ainsi

If [A1] <> 1 Then [8:12,23:29].EntireRow.Hidden = False
afin d'annuler le masquage lorsque A1 passe de 1 à un nombre différent de 0.

Cordialement.
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
24 févr. 2012 à 18:27
Re,

Oui pourquoi pas, à part qu'il y ai d'autres lignes à masquer en fonction d'un valeur ou que la cellule contienne d'autre valeurs.
A suivre
0

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

Posez votre question
Bonjour

D'abord merci pour votre aide, les macros que vous m'avez donné fonctionnes
Par contre je voudrais aller jusqu'à 12 conditions commment faire?

c'est à dire
A1 = 1 masquer Ligne 10 à 23 et 36 à 49
A1 = 2 masquer Ligne 11 à 23 et 37 à 49
A1 = 3 masquer Ligne 12 à 23 et 38 à 49
ect ect

merci d'avance
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
27 févr. 2012 à 18:08
Re,

C'est bien ce à quoi je pensais

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
If [A1] = 1 Then [8:12,23:29].EntireRow.Hidden = True
If [A1] = 2 Then [11:23,37:49].EntireRow.Hidden = True
If [A1] = 3Then [12:23,38:49].EntireRow.Hidden = True
If [A1] = 0 Then [8:49].EntireRow.Hidden = False
End If
End Sub

il est possible que tu souhaites masquer les lignes tributaires de la valeur 2 ou 3 en A1 lorsque A1 est égale à 1
si c'est le cas le préciser pour en tenir compte dans le code
0
Merci Mike ça fonctionne parfaitement j'ai même rajouté une 3ème plages de lignes à cacher ou afficher

par contre je voulais me servir de vos macros pour faire la meme chose avec des feuilles c'est àd ire cacher et afficher les onglet voici ce que j'ai fait

Module de la feuille

Private Sub Worksheet_Change2(ByVal Target As Range)

If Not Intersect(Target, Range("B3")) Is Nothing Then
If [B3] = 1 Then ["Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6"].SelectedSheets.Visible = False
If [B3] = 0 Then ["Ref 1", "Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6"].SelectedSheets.Visble = True
End If
End Sub

Module normal

Sub Masquersheet()
Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
SelectedSheets.Visible = False
Range("B3").Select
End Sub
Sub Affichersheet()
Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
SelectedSheets.Visible = True
Range("B3").Select
End Sub

Il me met erreur 424 "objet" quand je fait F8 il m'indique que mon probleme vient de la ligne "Range ("B3") select

Qu'en pensez vous?

Merci
0
g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
28 févr. 2012 à 17:37
Bonjour,

En attendant une meilleure solution essaie ceci:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3")) Is Nothing Then
If [B3] = 1 Then
Sheets("Ref 1").Visible = False
Sheets("Ref 2").Visible = False
Sheets("Ref 3").Visible = False
Sheets("Ref 4").Visible = False
Sheets("Ref 5").Visible = False
Sheets("Ref 6").Visible = False
End If
If [B3] = 0 Then
Sheets("Ref 1").Visible = True
Sheets("Ref 2").Visible = True
Sheets("Ref 3").Visible = True
Sheets("Ref 4").Visible = True
Sheets("Ref 5").Visible = True
Sheets("Ref 6").Visible = True
End If
End If
End Sub


Cordialement.
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
Modifié par Mike-31 le 28/02/2012 à 17:55
Re,

Je m'étais absenté, si tu souhaites depuis la cellule B3 de la feuille1 masquer ou afficher des onglets, clic droit sur l'onglet de ta feuille1/Visualiser le code et colle ce code

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("B3").Value
Case Is = "1"
Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "0"
For Each Sh In ThisWorkbook.Sheets
Sh.Visible = True
Next
End Select
Sheets("Feuil1").Activate
End Sub

mais attention tu ne peux utiliser la syntaxe qu'une seule fois
Private Sub Worksheet_Change(ByVal Target As Range)

Comment ce fait il que tu ais
Private Sub Worksheet_Change2(ByVal Target As Range)

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Le problème c'est que j'ai déjà un code Private Sub Worksheet_Change(ByVal Target As Range) sur cette feuille (le code est celui précédement communiquer par vos soins pour cacher et afficher le lignes)

Comment faire?
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
29 févr. 2012 à 15:31
Re,

Il faut imbriquer les codes, je pourrais te le faire que dans la soirée
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
29 févr. 2012 à 20:18
Re,

Colle ce code dans les propriétés de ta feuille 1

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("A1").Value
Case Is = "1"
[8:12,23:29].EntireRow.Hidden = True
Case Is = "2"
[11:23,37:49].EntireRow.Hidden = True
Case Is = "3"
[12:23,38:49].EntireRow.Hidden = True
Case Is = "0"
[8:49].EntireRow.Hidden = False
End Select
Select Case Range("B3").Value
Case Is = "1"
Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "0"
For Each Sh In ThisWorkbook.Sheets
Sh.Visible = True
Next
End Select
Sheets("Feuil1").Activate
End Sub
0
Merci bcp pour ton aide le fichier fonctionne nikel, tu maitrise parfaitement excel.

merci encore
0
Bon je reviens, j'ai un autre probleme que est apparu une fois la macro terminée
Sur la feuille ou je rentre les datas pour cacher les lignes et les feuilles
je dois rentrer des données manuellement dans certainement cellule et quand je rentre la donnée ça me met Erreur 1004 comment enlever ça.
pour info sur les autres feuilles ça ne me le fait pas.

Voici la macro

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Range("B3").Value
Case Is = "1"
[11:24,37:50,69:82].EntireRow.Hidden = True
Case Is = "2"
[12:24,38:50,70:82].EntireRow.Hidden = True
Case Is = "3"
[13:24,39:50,71:82].EntireRow.Hidden = True
Case Is = "4"
[14:24,40:50,72:82].EntireRow.Hidden = True
Case Is = "5"
[15:24,41:50,73:82].EntireRow.Hidden = True
Case Is = "6"
[16:24,42:50,74:82].EntireRow.Hidden = True
Case Is = "7"
[17:24,43:50,75:82].EntireRow.Hidden = True
Case Is = "8"
[18:24,44:50,76:82].EntireRow.Hidden = True
Case Is = "9"
[19:24,45:50,77:82].EntireRow.Hidden = True
Case Is = "10"
[20:24,46:50,78:82].EntireRow.Hidden = True
Case Is = "11"
[21:24,47:50,79:82].EntireRow.Hidden = True
Case Is = "12"
[22:24,48:50,80:82].EntireRow.Hidden = True
Case Is = "13"
[23:24,49:50,81:82].EntireRow.Hidden = True
Case Is = "14"
[24:24,50:50,82:82].EntireRow.Hidden = True
Case Is = "0"
[8:90].EntireRow.Hidden = False
End Select
Select Case Range("B3").Value
Case Is = "1"
Sheets(Array("Ref 2", "Ref 3", "Ref 4", "Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "2"
Sheets(Array("Ref 3", "Ref 4", "Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "3"
Sheets(Array("Ref 4", "Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "4"
Sheets(Array("Ref 5", "Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "5"
Sheets(Array("Ref 6", "Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "6"
Sheets(Array("Ref 7", "Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "7"
Sheets(Array("Ref 8", "Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "8"
Sheets(Array("Ref 9", "Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "9"
Sheets(Array("Ref 10", "Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "10"
Sheets(Array("Ref 11", "Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "11"
Sheets(Array("Ref 12", "Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "12"
Sheets(Array("Ref 13", "Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "13"
Sheets(Array("Ref 14", "Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "14"
Sheets(Array("Ref 15", "Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "15"
Sheets(Array("Data")).Select
ActiveWindow.SelectedSheets.Visible = False
Case Is = "0"
For Each Sh In ThisWorkbook.Sheets
Sh.Visible = True
Next
End Select
Sheets("Détail Calcul Cost").Activate
End Sub

Merci d'avance
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
2 mars 2012 à 18:31
Re,

Déjà tu utilises la cellule B3 pour paramétrer tes colonnes et la même cellule pour paramétrer tes colonnes avec les mêmes valeurs.
Alors soit tu utilises deux cellules différentes exemple B2 et B3 ou tu attribues des numéros différents, dans ce cas ces lignes au milieu du code sont inutiles.

End Select
Select Case Range("B3").Value


Lorsque tu saisis par exemple 15 en B3 que veux tu faire, afficher toutes les feuilles et masquer la feuille Data et idem pour les autres numéros, c'est cela ?
0
Bonjour

Tu as raison 15 ne servait à rien je l'ai supprimé
Par exemple quand je mets 3 dans une cellule je veux que les lignes 13 à 24, 30 à 50 et 71 à 82 soient cachées ainsi que les l'onglet Ref 3 à ref 15 + Onglet Data.

Je me suis aperçu que lorsque B3 est = 0 je peux écrire dans n'importe quelle cellule sans erreur 1004, au contraire quand je mets une valeur diff de 0 dans B3 et qu'après je veux écrire des choses dans une cellule lambda j'ai l'erreur 1004 qui apparait.

J'ai essayer d'utiliser B3 pour cacher les lignes et B2 pour cacher les onglets mais le résultat est identique.

Merci d'avance
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
5 mars 2012 à 13:40
Re,

Bizarre, je viens de tester le code sans le moindre problème, teste sur mon fichier voir si tu rencontre le même problème.
B2 masque ou affiche les lignes et B3 les feuilles.
j'ai ajouté deux lignes de code pour éviter de voir les déplacements pendant l'exécution du code

https://www.cjoint.com/?BCfnMeSUFaf
0