[VBA] aide les chaines de caractère

Bonjour la commu'

J'aimerai une petite aide sur les chaines de caractère.

Dim j As Variant
With TS_hybrid
    If Me.vrflan <> "" Then
    j = Application.Match(Me.vrflan, TS_hybrid.ListColumns(1).DataBodyRange, 0)
    Me.BM2 = TS_hybrid.DataBodyRange(j, "V")
    Me.BE2 = TS_hybrid.DataBodyRange(j, "W")
    Me.BT2 = TS_hybrid.DataBodyRange(j, "X")
    End If
End With

Voila une partie de mon code.

Concrètement, si la valeur de ma combobox vrflan (représenté par un chiffre de 000 à 500) est trouvé dans le tableau TS_hybrid, j'affecte à 3 textbox (BM2, BE2 et BT2) les valeurs des colonnes V, W et X.

Cependant j'aimerai ajouté une condition (en effet la valeur de vrflan peut se trouver dans plusieurs lignes de mon tableau) qui est, avant d'affecter les valeurs, de s'assurer que dans la colonne B se trouve les chaines de caractère "LAN" ou "LBH" (attention ces deux mots sont associés à d'autres caractères).

VPN-InstanceNom du sous réseauLocalisationBMEnvironnementBTOption Load BalancingColonne1
092V092-FWP-0208BiplanE2productionNON
092V092-LBH-0313BiplanE2productionEXPOH3TNON
092V092-LBI-0104BiplanE2productionNON
092V092-VIPBiplanE2productionEXPOH3TOUI
092V092-VIP-02BiplanE2productionEXPOH3TNON
093V093-FWP-0209BiplanE2non_productionNON
093V093-LBH-0314BiplanE2non_productionEXPOH3TNON
093V093-LBI-0105BiplanE2non_productionNON
093V093-VIPBiplanE2non_productionEXPOH3TOUI
093V093-VIP-02BiplanE2non_productionEXPOH3TNON
100V100-FWP-0210BiplanE1productionNON
100V100-LAN-0400BiplanE1productionEXPOH3TNON

Le but serait de pointer sur la ligne ou pour un vrflan donné, je pointe sur la colonne B où est présent la chaine de caractère LAN ou LBH pour attribuer les valeurs des colonnes V, W et X à mes textbox

Merci à ceux qui pourront m'apporter une petite aide

Bonjour Sitting_bull

Dans ta demande, pas le choix, il faut faire une boucle pour parcourir toutes les lignes et tester les 2 conditions

Pour ce qui est de "LAN" ou "LBH" il faut utiliser la fonction INSTR()

A+

Bonjour Bruno,

Merci pour ton retour. Je vais regarder ce que je trouve sur le forum qui puisse m'aider et agrémenter mes faibles notions de VBA.

Re,

Sinon joins un fichier comme indiqué dans la charte,
tu obtiendras toujours plus de réponse et c'est plus simple pour tout le monde

A+

Bonjour Sitting_bull, le forum,

Concrètement, si la valeur de ma combobox vrflan (représenté par un chiffre de 000 à 500) est trouvé dans le tableau TS_hybrid, j'affecte à 3 textbox (BM2, BE2 et BT2) les valeurs des colonnes V, W et X.

Vois si le tuto de thev peut t'aider :

https://forum.excel-pratique.com/astuces/tableau-structure-instructions-vba-specifiques-a-cet-objet-...

A tester....

   With Sheets("Feuil1").ListObjects("TS_hybrid") 'nom de la feuille à adapter
    If Me.vrflan <> "" Then
     j = Application.Match(vrflan, .ListColumns(1).DataBodyRange, 0)
      Me.BM2 = .ListColumns("V").DataBodyRange(j) 'nom de la colonne à adapter
      Me.BE2 = .ListColumns("W").DataBodyRange(j) ' "    "   "   "   "   "  "
      Me.BT2 = .ListColumns("X").DataBodyRange(j) ' "    "   "   "   "   "  "
    End If
   End With

[EDIT] : Bonjour BrunoM45,


Cordialement,

Salut xorsankukai

Dommage que tu n'ai pas continué ta lecture

Cependant j'aimerai ajouté une condition

A+

Salut xorsankukai,

pour la partie tableau structuré cela fonctionne.

C'est uniquement pour la partie où je veux trouver une chaine de caractères qui me posent porblème.

@BrunoM45 je regarde pour extraire une partie du code et le mettre dans un fichier que je peux partager.

Re,

Salut xorsankukai

Dommage que tu n'ai pas continué ta lecture

Effectivement, j'avais déjà posté lorsque je m'en suis rendu compte,

Cordialement,

14fichier-test.xlsm (32.57 Ko)

et voilà

re

Merci, c'est toujours plus simple

Alors avec les TS on peut soit utiliser la colonne nommée soit la lettre comme tu l'as fait

J'ai testé ce code, cela semble fonctionner comme souhaité

Private Sub vrflan_Change()
  Dim Lig As Long, NbLig As Long
  ' Si choix vide, on sort
  If Me.vrflan = "" Then Exit Sub
  ' Sinon
  With TS_hybrid
    NbLig = .DataBodyRange.Rows.Count
    For Lig = 1 To NbLig
    If .ListColumns("vpn-instance").DataBodyRange(Lig) = Me.vrflan And _
       .ListColumns("Nom VLAN").DataBodyRange(Lig) Like "*LAN*" Or _
       .ListColumns("Nom VLAN").DataBodyRange(Lig) Like "*LBH*" Then
      Me.BM2 = TS_hybrid.DataBodyRange(Lig, "F")
      Me.BE2 = TS_hybrid.DataBodyRange(Lig, "G")
      Me.BT2 = TS_hybrid.DataBodyRange(Lig, "H")
      ' On peut sortir de la boucle
      Exit For
    End If
    Next Lig
  End With
End Sub

A+

Merci Bruno

Malgré tout le code bloque sur le premier LBH trouvé (en mode pas à pas)

Debug.Print .ListColumns("Nom du sous réseau").DataBodyRange(Lig)

Ici le .databodyrange(Lig) = V011-LBH-XXXX

Si je choisis la V100 qui est bien plus bas dans la colonne VPN-instance je n'obtiens que les résultats de la V011

Re,

juste un tout petit rien

NbLig = .DataBodyRange.Rows.Count +1

Le nombre de ligne n'est pas bon, pourquoi vous cherchez toujours les ennuis , les mecs

A+

Et bien non...malgré la modification du code toujours la même

Dim Lig As Long, NbLig As Long
  ' Si choix vide, on sort
  If Me.vrflan = "" Then Exit Sub
  ' Sinon
  With TS_hybrid
    NbLig = .DataBodyRange.Rows.Count + 1
    For Lig = 1 To NbLig
    Debug.Print .ListColumns("Nom du sous réseau").DataBodyRange(Lig)
    If .ListColumns("VPN-Instance").DataBodyRange(Lig) = Me.vrflan And _
       .ListColumns("Nom du sous réseau").DataBodyRange(Lig) Like "*LAN*" Or _
       .ListColumns("Nom du sous réseau").DataBodyRange(Lig) Like "*LBH*" Then
      Me.BM2 = TS_hybrid.DataBodyRange(Lig, "V")
      Me.BE2 = TS_hybrid.DataBodyRange(Lig, "W")
      Me.BT2 = TS_hybrid.DataBodyRange(Lig, "X")
      ' On peut sortir de la boucle
      Exit For
    End If
    Next Lig
  End With

Re,

Désolé, au taf, j'ai répondu à l'arrache
je n'étais pas très sur de mon test avec "OR" avec les parenthèses cela semble mieux fonctionner

Le "+1" n'est pas nécessaire du coup

Private Sub vrflan_Change()
  Dim Lig As Long, NbLig As Long
  ' Si choix vide, on sort
  If Me.vrflan = "" Then Exit Sub
  ' Sinon
  With TS_hybrid
    NbLig = .DataBodyRange.Rows.Count
    For Lig = 1 To NbLig
    If .ListColumns("vpn-instance").DataBodyRange(Lig) = Me.vrflan And _
       (.ListColumns("Nom VLAN").DataBodyRange(Lig) Like "*LAN*" Or _
       .ListColumns("Nom VLAN").DataBodyRange(Lig) Like "*LBH*") Then
      Me.BM2 = .DataBodyRange(Lig, "F")
      Me.BE2 = .DataBodyRange(Lig, "G")
      Me.BT2 = .DataBodyRange(Lig, "H")
      Me.TbxVpnInstance = .DataBodyRange(Lig, "C") ' Ajout d'un TextBox pour voir résultat
      ' On peut sortir de la boucle
      Exit For
    End If
    Next Lig
  End With
End Sub

A+

Hello camarade. Merci je réalise quelques tests avant de cloturer le sujet. Cela me semble fonctionner

Me.TbxVpnInstance = .DataBodyRange(Lig, "C")

tu as ajouté un textbox en guise de test j'imagine de ton côté?

Re,

Oui désolé, mais c'était effectivement pour voir le résultat

Bonne journée

A+

Merci de ton aide. Excellente journée à toi

Rechercher des sujets similaires à "vba aide chaines caractere"