Decalage des adresses Range lors d'insertion de ligne
Bonjour a tous,
C'est la premiere fois que je post sur le forum, mais je pense qu'une grande partie de mon savoir sur vba a ete constitue grace a celui-ci, alors merci!
Cependant il y a toujours une limite a la lecture donc je me permets de poster ces trois problemes :
- Dans le cadre d'un stage je produis un outil pour une entreprise (que je ne pourrais donc pas vous transmettre pour des raisons de confidentialite). Toujours est-il que ledit document en question est souvent sujet a modification (ajout d'une ligne, suppression...), et que cela entraine un travail monstre pour reprendre la totalitee des adresses de Range/Cellules que j'ai definies auparavant dans mon code.
Ainsi, je voulais savoir s'il existait un moyen pour qu'a chaque fois que l'on ajoute ou supprime une ligne, les references d'addresses inherentes a la feuille soient incrementee ou decrementee en consequence.
- Existe-t-il un moyen d'ajuster la hauteur d'une cellule fusionnee dans laquelle on inscrit du texte ?
- Je cree un formulaire dans lequel on ne parcourt uniquement certaines cellules, est-il possible de donner un aspect 3D a ces cellules en particulier ?
Je vous remercie de la patience et du temps que vous accorderez a mon cas.
Tres bonne journee
Guillaume
PS. Desole pour les accents absents, clavier anglais oblige.
Bonjour Skillkore, bonjour le forum,
• Désolé pour les accents mais je possède aussi un clavier anglais (Arf ! Ça c'était pour la foune, heu pardon, pour le fun...)
• Rien ne t'empêche, sinon la flemme, de créer un fichier exemple contenant une poignée de données anonymes et respectant la structure de ton original avec le code qui pose problème (ça c'est pour l'excuse à deux balles)
• Sinon pour les plages, si tu les nommes tu n'auras pas à modifier le code. Mais là, sans un fichier qui va bien, difficile de voir si c'est réalisable ou pas...
Résumé : fait un effort et tu auras un retour rapide !...
Hum...
Disons que je vais faire des efforts alors
Je suis sur un devis, qui dès lors qu'une checkbox est cochée, des cellules doivent êtres déverrouillées/verrouillées et formatées.
Pour le verouillage et le formatage j'ai créé des fonctions telles que :
Function ReW_Ce_Q(Rl As Range)
'UnP_ déverrouille la feuille active
UnP_
For Each Cell In Rl
With Cell
.Interior.Color = RGB(255, 255, 255)
.Interior.Pattern = xlPatternNone
End With
Next Cell
P_
'P_ verrouille la feuille active
End Function
Function ReG_Ce_Q(Rl As Range)
UnP_
For Each Cell In Rl
With Cell
.Value = 0
.Interior.Color = RGB(212, 212, 212)
.Interior.Pattern = xlPatternGray8
End With
Next Cell
P_
End Function
Function ReY_Ce_Q(Rl As Range)
UnP_
For Each Cell In Rl
Cell.Interior.Color = RGB(255, 255, 102)
Next Cell
P_
End Function
Function L_Ce_Q(Ra As Range)
UnP_
For Each Cell In Ra
Cell.Locked = True
Next Cell
P_
End Function
Function U_Ce_Q(Ra As Range)
UnP_
For Each Cell In Ra
Cell.Locked = False
Next Cell
P_
End Function
Function chV_Ce(Ra As Range, Val As String)
UnP_
For Each Cell In Ra
Cell.Value = Val
Next Cell
P_
End Function
Il y a 30 Checkbox dans le document, nombre qui, comme je vous disais, peut évoluer dans les deux sens.
Pour localiser singulièrement la déclaration des ranges en questions, je me sers d'un tableau.
Pendant que j'y suis, histoire de parraître ridicule jusqu'au bout, est-ce que quelqu'un pourrait m'expliquer l'utilité du $ en VBA ? Je connais son utilité sur les feuilles mais pas en VBA (donc dans mon code je n'en ai pas mis).
Voilà le type de code que je manipule (avec quelques checkbox) :
Private Function S_R1(CB_N As Integer) As Range
Dim tabb(29) As Range
Set tabb(0) = Range("I13")
Set tabb(1) = Range("I19")
Set tabb(2) = Range("I21")
Set tabb(3) = Range("I23")
Set tabb(4) = Range("I32")
Set tabb(5) = Range("I35")
Set tabb(6) = Range("I37")
Set tabb(7) = Range("I39")
Set tabb(8) = Range("I41")
Set tabb(9) = Range("I45")
Set tabb(10) = Range("I47")
Set tabb(11) = Range("I49")
Set tabb(12) = Range("I51")
Set tabb(13) = Range("I53")
Set tabb(14) = Range("I55")
Set tabb(15) = Range("I57")
Set tabb(16) = Range("I66")
Set tabb(17) = Range("I70")
Set tabb(18) = Range("I72")
Set tabb(19) = Range("I76")
Set tabb(20) = Range("I78")
Set tabb(21) = Range("I80")
Set tabb(22) = Range("I92")
Set tabb(23) = Range("I95")
Set tabb(24) = Range("I96")
Set tabb(25) = Range("I99")
Set tabb(26) = Range("I102")
Set tabb(27) = Range("I106")
Set tabb(28) = Range("I107")
Set S_R1 = tabb(CB_N - 1)
'Je set à -1 pour que le numero appelé corresponde au numéro de la checkbox
End Function
Private Function S_R2(CB_N As Integer) As Range
Dim tabb(29) As Range
Set tabb(0) = Range("L13")
Set tabb(1) = Range("L19")
Set tabb(2) = Range("L21")
Set tabb(3) = Range("L23")
Set tabb(4) = Range("L32")
Set tabb(5) = Range("L35")
Set tabb(6) = Range("L37")
Set tabb(7) = Range("L39")
Set tabb(8) = Range("L41")
Set tabb(9) = Range("L45")
Set tabb(10) = Range("L47")
Set tabb(11) = Range("L49")
Set tabb(12) = Range("L51")
Set tabb(13) = Range("L53")
Set tabb(14) = Range("L55")
Set tabb(15) = Range("L57")
Set tabb(16) = Range("L66")
Set tabb(17) = Range("L70")
Set tabb(18) = Range("L72")
Set tabb(19) = Range("L76")
Set tabb(20) = Range("L78")
Set tabb(21) = Range("L80")
Set tabb(22) = Range("L92")
Set tabb(23) = Range("L95")
Set tabb(24) = Range("L96")
Set tabb(25) = Range("L99")
Set tabb(26) = Range("L102")
Set tabb(27) = Range("L106")
Set tabb(28) = Range("L107")
Set S_R2 = tabb(CB_N - 1)
End Function
Private Sub CheckBox1_Click()
UnP_
Application.EnableEvents = False
Set R1 = S_R1(1)
Set R2 = S_R2(1)
If CheckBox1.Value = True Then
Call U_Ce_Q(R1)
R1.Select
Call ReW_Ce_Q(R2)
Call chV_Ce(R2, "TBC")
Else
Call chV_Ce(R1, "0")
Call chV_Ce(R2, "0")
Call L_Ce_Q(R1)
Call ReG_Ce_Q(R2)
End If
Application.EnableEvents = True
P_
End Sub
Private Sub CheckBox2_Click()
UnP_
Application.EnableEvents = False
Set R1 = S_R1(2)
Set R2 = S_R2(2)
If CheckBox2.Value = True Then
Call U_Ce_Q(R1)
R1.Select
Call ReW_Ce_Q(R2)
Call chV_Ce(R2, "TBC")
Else
Call chV_Ce(R1, "0")
Call chV_Ce(R2, "0")
Call L_Ce_Q(R1)
Call ReG_Ce_Q(R2)
End If
Application.EnableEvents = True
P_
End Sub
Je vous remercie une nouvelle fois de m'accorder votre temps.
Je me permets un petit up s'il vous plait :3
Bonne journée
Bonjour,
Comme dans Intouchables : Pas de bras, pas de chocolat... Pas de fichier, peu d'aide... Et visiblement dans d'autres forums non plus d'ailleurs.
Bonjour,
Je pensais sincérement que le code que j'avais envoyé suffirait.
Voilà un fichier un peu sale en mise en page, mais qui a le mérite de contenir ce dont je parle.
Merci beaucoup.
Re,
Tu dois bien comprendre que si on veux tester une éventuelle solution il nous faut recréer ton environnement... Et souvent on a la flemme de le faire à ta place.
Je jette un coup d'œil dès que j'ai du temps....
Yes chef.
Merci bien
Re,
Je suis absolument désolé mais ton problème dépasse largement mes compétences... Je reste toutefois convaincu que grâce au fichier en pièce jointe il sera résolu plus rapidement. Bonne chance !...
Bonjour ThauThème,
Je te remercie d'y avoir jeté tout de même un coup d'oeil.
Très bonne continuation.
SkillKore