[VBA] appliquer une même séquence à deux objets
- Messages
- 260
- Excel
- Microsoft 365
- Inscrit
- 27/10/2022
- Emploi
- Expert technique réseau
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.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
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 TSRemarque : 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.
- Messages
- 260
- Excel
- Microsoft 365
- Inscrit
- 27/10/2022
- Emploi
- Expert technique réseau
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...
- Messages
- 260
- Excel
- Microsoft 365
- Inscrit
- 27/10/2022
- Emploi
- Expert technique réseau
Ca fonctionne super!!!
merci de ton aide