[VBA] appliquer une même séquence à deux objets

Hello,

toujours dans un souci de simplifier mon code et éviter la redondance, je souhaiterais savoir par quelle syntaxe je peux m'affranchir d'écrire deux fois la même séquence dans un même SUB pour deux objets différents.

Je dispose de deux tableaux nommés TS_hybrid et TS_ipam, ils sont renseignés par mon formulaire à l'identique, comment simplifier le code ci-dessous:

'dans TS_ipam
            With TS_ipam
                ip = Me.offer_IP_hosting
                Set Ligne_Inser_lan = .ListRows.Add: i = Ligne_Inser_lan.index
                    .DataBodyRange(i, "A") = Me.free_vrf
                    .DataBodyRange(i, "B") = Me.vlan_name
                    .DataBodyRange(i, "C") = Me.instance_description
                    .DataBodyRange(i, "D") = "V" & Me.free_vrf & "-" & Me.instance_name
                    .DataBodyRange(i, "E") = Me.offer_IP_hosting
                    .DataBodyRange(i, "F") = ""
                    .DataBodyRange(i, "G") = ""
                    .DataBodyRange(i, "H") = ""
                    .DataBodyRange(i, "I") = ""
                    .DataBodyRange(i, "J") = ""
                    .DataBodyRange(i, "K") = ""
                    .DataBodyRange(i, "L") = IpAdd(ip, IpSubnetSize(ip) - 8)
                    .DataBodyRange(i, "M") = IpAdd(ip, IpSubnetSize(ip) - 7)
                    .DataBodyRange(i, "N") = IpAdd(ip, IpSubnetSize(ip) - 6)
                    .DataBodyRange(i, "O") = IpAdd(ip, IpSubnetSize(ip) - 5)
                    .DataBodyRange(i, "P") = IpAdd(ip, IpSubnetSize(ip) - 4)
                    .DataBodyRange(i, "Q") = IpAdd(ip, IpSubnetSize(ip) - 3)
                    .DataBodyRange(i, "R") = IpAdd(ip, IpSubnetSize(ip) - 2)
                    .DataBodyRange(i, "S") = "GATEWAY_" & Me.vlan_name
                    If Me.option_attribution_auto = True Then
                        .DataBodyRange(i, "T") = "OUI"
                    Else:
                        .DataBodyRange(i, "T") = "NON"
                    End If
                        .DataBodyRange(i, "U") = Me.ipam_localisation
                        .DataBodyRange(i, "V") = Me.ipam_metier
                        .DataBodyRange(i, "W") = Me.ipam_environnement
                        If Me.ls_fondation.Value = True Then
                            .DataBodyRange(i, "X") = Me.ipam_technique
                        Else
                            .DataBodyRange(i, "X") = ""
                        End If
                        .DataBodyRange(i, "Y") = "NON"
                    End With

            'dans TS_hybrid
            With TS_hybrid
                ip = Me.offer_IP_hosting
                Set Ligne_Inser_lan = .ListRows.Add: i = Ligne_Inser_lan.index
                    .DataBodyRange(i, "A") = Me.free_vrf
                    .DataBodyRange(i, "B") = Me.vlan_name
                    .DataBodyRange(i, "C") = Me.instance_description
                    .DataBodyRange(i, "D") = "V" & Me.free_vrf & "-" & Me.instance_name
                    .DataBodyRange(i, "E") = Me.offer_IP_hosting
                    .DataBodyRange(i, "F") = ""
                    .DataBodyRange(i, "G") = ""
                    .DataBodyRange(i, "H") = ""
                    .DataBodyRange(i, "I") = ""
                    .DataBodyRange(i, "J") = ""
                    .DataBodyRange(i, "K") = ""
                    .DataBodyRange(i, "L") = IpAdd(ip, IpSubnetSize(ip) - 8)
                    .DataBodyRange(i, "M") = IpAdd(ip, IpSubnetSize(ip) - 7)
                    .DataBodyRange(i, "N") = IpAdd(ip, IpSubnetSize(ip) - 6)
                    .DataBodyRange(i, "O") = IpAdd(ip, IpSubnetSize(ip) - 5)
                    .DataBodyRange(i, "P") = IpAdd(ip, IpSubnetSize(ip) - 4)
                    .DataBodyRange(i, "Q") = IpAdd(ip, IpSubnetSize(ip) - 3)
                    .DataBodyRange(i, "R") = IpAdd(ip, IpSubnetSize(ip) - 2)
                    .DataBodyRange(i, "S") = "GATEWAY_" & Me.vlan_name
                    If Me.option_attribution_auto = True Then
                        .DataBodyRange(i, "T") = "OUI"
                    Else:
                        .DataBodyRange(i, "T") = "NON"
                    End If
                    .DataBodyRange(i, "U") = Me.ipam_localisation
                    .DataBodyRange(i, "V") = Me.ipam_metier
                    .DataBodyRange(i, "W") = Me.ipam_environnement
                    If Me.ls_fondation.Value = True Then
                        .DataBodyRange(i, "X") = Me.ipam_technique
                    Else
                        .DataBodyRange(i, "X") = ""
                    End If
                    .DataBodyRange(i, "Y") = "NON"
                    End With
   

Par avance merci du temps que vous prendrez pour me répondre.

Bonjour,

Une solution :

    Dim tb_TS(1)
    Dim TS As Variant

    Set tb_TS(0) = TS_ipam: Set tb_TS(1) = TS_hybrid

    For Each TS In tb_TS
        With TS
            '........... ici une fois ton code
        End With
    Next TS

Remarque : Bonne utilisation du code associé au tableau structuré. A noter qu'il est judicieux d'utiliser les noms de colonne du tableau via la propriété "Listcolumns" pour rendre le code plus parlant et surtout invariant en cas d'ajout d'une colonne entre les A et S.

hello Thev, je prends en compte ta remarque, je teste cela ce matin. Je vais tenter de faire ce que tu me proposes concernant les noms de colonne plutot que les lettres...car le cas mis en évidence "ajout de colonne" m'est déjà apparu et effectivement j'ai du reprendre l'ensemble du code...

Ca fonctionne super!!!

merci de ton aide

Rechercher des sujets similaires à "vba appliquer meme sequence deux objets"