macro ou formule ?

M

mag

Guest
bonsoir le forum

je voudrais écrire une formule ou une macro en fonction de la colonne b8 à b47.

Si COLONNE B8=''alors masquer la Ligne;sinon rien
Si COLONNE B9=''alors masquer la Ligne;sinon rien
.......
SI Choix formule, la formule doit etre en A8,A9,....
Masquer la ligne = Hauteur de ligne

MERCI DE VOTRE AIDE
 
M

mag

Guest
re gael,

je viens de voir ton message.
en effet, je voudrais adapter la formule ci-dessus qui marche très bien à l'ensembles de mes feuilles.

la feuille intro (cellule a5) lancerais la macro sur toutes les autres feuilles

A+
 

Jacques87

XLDnaute Accro
Bonsoir Gaël

Tu as tout compris.
d'ailleurs ta façon de faire est plus 'noble' que la mienne, car tu limites le déclenchement de la macro à la cellule A5.
Quant à moi, par habitude (bonne ou mauvaise) je permets l'appel de la macro dès que la feuille est modifiée, mais comme A5 n'est pas modifiée si on clique ailleurs, l'incidence sera nulle, d'autant plus que l'action est cachée et super rapide. Toutefois dans un programme truffé de telles macros on alourdit le temps de réaction, donc il vaut mieux adapter ta méthode en ciblant la ou les cellules 'déclencheuses'.
Voila, ai-je été assez clair ?

Je te souhaite une bonne soirée
 

Jacques87

XLDnaute Accro
Bonsoir Mag

Cela me fait plaisir que tu sois satisfait.
Pour appliquer cette macro à d'autres feuilles, à partir de la cellule A5 de la feuille 'intro', 2 solutions :
1) ajouter les tests relatifs à chacune des feuilles concernées, mais si tu en as beaucoup ça va devenir pénible

exemple pour 2 feuilles
Dim I As Integer
Application.ScreenUpdating = False

WorkSheets('toto').Select
For I = 8 To Range('B65536').End(XlUp).Row
If WorkSheets('toto').Range('B' & I).Value = '' Then
WorkSheets('toto').Rows(I).EntireRow.Hidden = True
else :
WorkSheets('toto').Rows(I).EntireRow.Hidden = False
end if

WorkSheets('tata').Select
For I = 8 To Range('B65536').End(XlUp).Row
If WorkSheets('tata').Range('B' & I).Value = '' Then
WorkSheets('tata').Rows(I).EntireRow.Hidden = True
else :
WorkSheets('tata').Rows(I).EntireRow.Hidden = False
end if
Next I

End Sub

2) autre méthode en supposant que tes feuilles sont consécutives

Dim I As Integer
Dim F as Integer

Application.ScreenUpdating = False

For F = 2 to Sheets.Count
WorkSheets(F).Select
For I = 8 To Range('B65536').End(XlUp).Row
If WorkSheets(F).Range('B' & I).Value = '' Then
WorkSheets(F).Rows(I).EntireRow.Hidden = True
else :
WorkSheets(F).Rows(I).EntireRow.Hidden = False
end if
Next I
Next F

End Sub

je suppose que ta feuille 'intro' est en première position, et que celles sur lesquelles tu veux agir suivent

question 2: si ton projet ou tes feuilles sont protégées il faudra bien sur les déprotéger pour faire cette modif et les reprotéger dès que c'est fini, tu ajoutes les lignes suivantes dans le code précédent

For F = 2 to Sheets.Count
WorkSheets(I).Unprotect
.....
....
WorkSheets(I).Protect
Next F
je suppose de plus que tu n'as pas utilisé un mot de passe

A ta disposition, bonne soirée et bon courage

Message édité par: Jacques87, à: 25/01/2006 21:16
 
M

Mag

Guest
salut jacques87,

j'ai essayé la 1ère méthode qui me semble plus adapté et j'ai un message d'erreur qui me dit variable for deja utilisé.

De plus, je me pose une question est ce qu' il ne serait pas plus simple pour toi, d'inscrire la macro dans chaque feuille concerné et sur ces feuilles concernées d'avoir un remvois caché de la feuille intro cellule A5

Merci de ton dévouement

A+
 

Jacques87

XLDnaute Accro
bonjour Mag

je viens de voir qu'un Next I s'est effacé
Il faut que tu le rajoutes après le
End If
à la fin de la première boucle

pour ta question, recopier le code sur chaque feuille ne servira à rien, car l'élément déclencheur, si mes souvenirs sont bons, est sur la feuille 'Intro'

je n'ai pas beaucoup de temps pour le moment, je regarderai plus précisément cette après midi

A+
 
M

mag

Guest
merci jacques87, sa marche très bien

Maintenant j'ai deux dernières demandes :

LA 1er, concerne la protection des feuilles peut tu me dire ou je doit inserer dans la macro, les codes de déprotection et de reprotection avec un password '123' ?

la 2eme : j'ai un second projet qui nécessite la macro que tu viens gantillement de me construire mais à la différence que je voudrais que la cellule de déclenchement soit en D5 et dans un autre classeur appellé MENU.

Merci beaucoup

A+ Mag
 

Jacques87

XLDnaute Accro
Je te joins un fichier qui répond à tes questions.
Feuil1 = Intro
Feuil2 = MENU
dans ces deux feuilles les cellules qui déclenchent la macro sont respectivement A5 et D5 (la où est inscrit 'ici')
avant de changer le contenu de ces cellules, regardre les feuilles 3, 4 et 5. En colonne B tu as une liste de nombres avec des espaces.
Que tu changes le contenu de A5 de 'Intro' ou D5 de 'Menu' les espaces disparaîtront.

Pour voir le code
ALT + F11 ensuite CTRL + R
un appel de la procédure sur la feuille1 'Intro', un autre sur la feuille2 'Menu' et la procédure dans le Module1

J'ai utilisé ma deuxième proposition, qui t'oblige à mettre en tête les feuilles 'Intro' et 'MENU' et de considérer que les feuilles sur lesquelles agir commence en Feuil3

A+ [file name=mag_20060126131645.zip size=10256]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/mag_20060126131645.zip[/file]
 
M

mag

Guest
re jacques87,

je crois que je me suis mal exprimé sur ma 2ème questions.
En effet, je voudrais que la cellule de déclenchement reste unique(cellule d5)mais dans un autre Fichier appellé MENU
cad que j'aurais un fichier menu qui contiendrais la cellule d5 (qui déclanche la macro)et un autre fichier appellé mag par exemple qui lui contiendrais les feuilles ou les lignes doivent être masqué.

A+ mag
 

Jacques87

XLDnaute Accro
Si je te comprends bien, tu veux déclencher la macro( effacer des lignes dans des feuilles d'un certain fichier) à partir d'une commande qui serait dans un autre fichier appelé 'Menu'.
Je n'en comprends pas bien la finalité, mais comme je ne connais pas ton projet ....
Toutefois il faut que tu saches que, si c'est bien cela, les deux fichiers devront être ouverts ensemble.
A+
 
M

Mag

Guest
merci jacques87 de ta réponse, je croie que je vai abandonner mon second projet.

Par contre jacques87, Pourais tu me dire comment faire pour inscrire une 2ème condition à la macro que tu m'as construite.
Cette 2ème condition serai que lorsque la ligne se mascque , elle efface les données des cellules d à g (de la ligne qui se masque)

merci de ta téponse

A+ mag
 

Jacques87

XLDnaute Accro
re

regarde le fichier joint
Avant de faire fonctionner la macro en changeant la cellule A5 ou D5 regarde les feuilles 3, 4 et 5. Tu verras que j'ai mis des valeurs dans des lignes à masquer
Ensuite tu masques en uitlisant la macro(cellule A5 ou D5) et retourne dans les feuilles concernées afin de vérifier, après 'démasquage' si tu as bien ce que tu voulais

A+ [file name=mag_20060129214249.zip size=10727]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/mag_20060129214249.zip[/file]
 
M

mag

Guest
Salut jacques87,

je te remercie de ta réponse.
En effet, l'exmple joint dans le fichier correspond bien à mes souhaits.
Cependant, j'ai appliqué la 1ère macro que tu m'as construite(cad feuille par feuille). Pourais tu m'adapter ce code à la première methode.

Merci

A+
 

Jacques87

XLDnaute Accro
Bonjour Mag

Voici ce qu'il te faut mettre dans chaque feuille (attention j'ai écrit ce code à main levée, sans le tester, donc vérifie le bien)

A+


Dim I As Integer

Application.ScreenUpdating = False

For I = 8 To Range('B65536').End(xlUp).Row
If ActiveSheet.Range('B' & I).Value = '' Then
For K = 4 To 7
Cells(I, K).Value = ''
Next K
ActiveSheet.Rows(I).EntireRow.Hidden = True
Else:
ActiveSheet.Rows(I).EntireRow.Hidden = False
End If
Next I
 
M

mag

Guest
salut jacques87,

Je m'escuse mais j'ai mal formulé ma demande.
En effet, la macro se trouve toujours dans la feuille Intro (cellule déclanchement a2) et la macro que j'ai utilisé est la suivante :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Dim I As Integer
'Application.ScreenUpdating = False
'WorkSheets('toto').Select
'For I = 8 To 47
'If WorkSheets('toto').Range('B' & I).Value = '' Then
'WorkSheets('toto').Rows(I).EntireRow.Hidden = True
'else :
'WorkSheets('toto').Rows(I).EntireRow.Hidden = False
'end if
'Next I

'End Sub

si tu peut adapter cette seconde condition (cad effacer les cellules des colonnes d à g qui sont masquées)à cette macro, ca serait fantastique pour moi.

Merci
A+ mag
 

Jacques87

XLDnaute Accro
bonsoir

tu ajoutes dans ce code les quelques lignes que je t'ai données et qui te permettent d'effacer ce qu'il faut effacer, soit :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Dim I As Integer
'Application.ScreenUpdating = False
'WorkSheets('toto').Select
'For I = 8 To 47
'If WorkSheets('toto').Range('B' & I).Value = '' Then
For K = 4 To 7
Cells(I, K).Value = ''
Next K

'WorkSheets('toto').Rows(I).EntireRow.Hidden = True
'else :
'WorkSheets('toto').Rows(I).EntireRow.Hidden = False
'end if
'Next I

'End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 235
Membres
103 497
dernier inscrit
JP9231