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.

18draft.xlsm (130.36 Ko)

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

Rechercher des sujets similaires à "decalage adresses range lors insertion ligne"