XL 2016 Déplacer/inserer des cellules sans modifier les marcos

teuch

XLDnaute Nouveau
Amis du jour, bonjour! :)

Débutant dans les macros, je me suis fais avoir comme un bleu et je me retrouve sans solution mise à par passer 5h à modifier chacune de mes lignes de code...

J'ai crée un tableau incluant des macros qui servent à faire disparaître des lignes en fonction d'une valeur choisie. J'ai nommé chacune de mes plages.

le code utilisé:
VB:
If Range("Exemple").Value = "Non" Then Rows("4").EntireRow.Hidden = True

Le problème, c'est que j'aimerais insérer des colonnes et des lignes en A1 pour plus de lisibilité. Le souci se porte uniquement sur les lignes. Si j'insère une nouvelle ligne en A, tout se décale. Le code lui, continuera à masquer la ligne 4 (ici dans l'exemple) alors que j'aimerais qu'il masque la 5.

Avez vous une petite astuce? Renommer chaque ligne? (si c'est possible, mais hyper long du coup!) Nommer des plages à faire disparaître? (mais du coup le code n'est plus le bon)

D'avance, je vous remercie grandement! :D
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Teuch, bonjour le forum,

Si, par hasard, la ligne à masquer est la même que celle de la cellule nommée alors tu pourrais écrire :

VB:
If Range("Exemple").Value = "Non" Then Rows(Range("Exemple").Row).Hidden = True
Ou essayer de trouver une relation entre les lignes si elle fixe du style :
Code:
Rows(Range("Exemple").Row + 1)
Sinon... t'es mal !...
 

teuch

XLDnaute Nouveau
Non, justement, le choix d'une cellule peut masquer plusieurs lignes...

Voici une petite partie du code, qui concerne uniquement 1 cellule mais qui masque 8 lignes:

1.JPG


Du coup, si j'ajoute des ligne en A, tout sera décalé...

Donc apparemment, je suis mal?! o_O

Existe t-il une formule pour masquer une plage de cellule et qui, par la même occasion masquerait la ligne sur laquelle elle se trouve? la zone nommée, je pourrais déplacer le tableau comme bon me semble, et masquerait toujours la zone concernée (donc la nouvelle ligne si je déplace)?

En tous cas merci!
 

g.milano

XLDnaute Junior
Pour insérer des colonnes sans toucher une macro, il faut utiliser des ranges de colonnes qui utilisent le nom de la colonne ; ainsi même en tripotant les colonnes (insertion, inversion) la macro tourne (par contre, il faut y repenser si on renomme la colonne ou en cas de suppression)

J'utilise cette astuce car, je manipule pas mal de CSV avec différentes sources/utilisateurs.
VB:
Dim Col_Employe As Range
Set Col_Employe = Columns(Split(Rows(1).Find("Employé", lookat:=xlWhole).Address, "$")(1)) 's'appliquera à la colonne correspondante



Pour ton problème de masquage, quelle est la règle qui défini les lignes à cacher ? Dans ton image, qu'est-ce qui fait que ce soit ces lignes (4, 5, 86, etc...) que tu doives masquer ? Si tu peux répondre, c'est sûrement la solution à ton problème.
Si tu travailles avec une base de données qui peut évoluer, il faut te raccrocher aux éléments qui sont sûrs d'y être et de travailler en relatif à partir de ceux-ci (avec des offsets, par exemple).



Existe t-il une formule pour masquer une plage de cellule et qui, par la même occasion masquerait la ligne sur laquelle elle se trouve? la zone nommée, je pourrais déplacer le tableau comme bon me semble, et masquerait toujours la zone concernée (donc la nouvelle ligne si je déplace)?
Je crois pas qu'on puisse masquer une plage de cellule (genre A2:C5) qui ne soit pas une ligne/colonne ou un groupe de lignes/colonnes. Donc si on ne peut pas masquer une cellule seule, ça veut dire de facto qu'on doit forcement masquer la ligne et/ou colonne complète où elle se trouve ; ça pourrait être un truc du genre :
VB:
Dim c As Range
Set c = Range("employé")
If c.Value = "non" Then c.Rows.Hidden = True



Pour appliquer un masquage, un truc tout simple. (Le ".Rows" n'est nécessaire que si les objets "c" et "plage" sont des cellules ou des groupes de cellules ; si ce sont déjà des rows, enlève-le) :
VB:
Dim c As Range
Dim plage As Range
If c.Rows.Hidden Then plage.Rows.Hidden = True
 
Dernière édition:

Discussions similaires