Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Utilisation de select case

Ayari69700

XLDnaute Nouveau
Bonjour à tous,

J'essaye d'avancer sur un tableau vba et je bataille avec la fonction select cas.

Je voudrais avec cette fonction que le programme me renvoie en fonction des valeur de "vStr" :
Une des valeurs entre 0 et 2 de "s_trings" dans la colonne 4,
Une des valeurs entre 3 et 5 de "s_trings" dans la colonne 3,
Une des valeurs entre 6 et 8 de "s_trings" dans la colonne 6.

Je ne sais pas si c'est clairement dit et si évidant.

Merci beaucoup par avance pour votre aide
 

Pièces jointes

  • METRES AyY Macr - vba - Envoi.xlsm
    65.3 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Re

Je ne comprends trop ta logique.
Mais en laissant le Case Is >1, (comme je l'avais écrit dans le 1er fil), ça fonctionne correctement, non ?
(au moins pour Cells(c.Row, 4), car c'est ensuite que ta logique m'échappe ?)
VB:
Private Sub CommandButton4_Click()
'déclare les variables
Dim c As Range, s_trings, I&, vStr
s_trings = Array("couloirs", "bureaux", "locaux", "Bâtiment A", "Bâtiment C", "Bâtiment B", "câble FE0", "câble FE05C", "câble FE180") 'envoyer une variable Variant contenue dans un tableau.
vStr = Array("coul", "bur", "LT", "BA", "BC", "BB", "FE0", "FE05", "FE180")
Application.ScreenUpdating = False
For Each c In Range(Cells(4, 1), Cells(Rows.Count, 1).End(3))
If Len(c) Then    ' renvoie le nombre de caractère peut etre une securité
    For I = 0 To 8   'boucle for pour tester les valeur de 0, 1, 2
        Select Case InStr(c, vStr(I))
        Case Is > 1
        Cells(c.Row, 4) = s_trings(I)
        Cells(c.Row, 3) = s_trings(I)
        Cells(c.Row, 6) = s_trings(I)
        Case Else
        End Select
    Next
End If
Next
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Ayari69700, JM,

Les formules en colonnes E et F avec SIERREUR me sortent par les yeux, écrivez plutôt en E4 et F4 :
Code:
=REPT("sonorisation";ESTNUM(CHERCHE("sono";A4)))&REPT("force";ESTNUM(CHERCHE("for";A4)))&REPT("détection incendie";ESTNUM(CHERCHE("DI";A4)))

=REPT("câble FE180";ESTNUM(CHERCHE("FE180";A4)))&REPT("câble FE0";ESTNUM(CHERCHE("FE0";A4)))&REPT("câble FE05C";ESTNUM(CHERCHE("FE 05";A4)))
A+
 

job75

XLDnaute Barbatruc
Pour ce qui est du VBA, si j'ai bien compris ce qui est souhaité :
VB:
Private Sub CommandButton4_Click()
Dim c As Range, s_trings, vStr, I&
s_trings = Array("couloirs", "bureaux", "locaux", "Bâtiment A", "Bâtiment C", "Bâtiment B", "câble FE0", "câble FE05C", "câble FE180")
vStr = Array("coul", "bur", "LT", "BA", "BC", "BB", "FE0", "FE05", "FE180")
Application.ScreenUpdating = False
[C4:D30,F4:F30] = "" 'RAZ, plages à adapter
For Each c In [A4:A30] 'plage à adapter
    For I = 0 To 8   'boucle for pour tester les valeur de 0, 1, 2
        If InStr(c, vStr(I)) Then
            Select Case I
                Case 0 To 2: c(1, 4) = s_trings(I)
                Case 3 To 5: c(1, 3) = s_trings(I)
                Case 6 To 8: c(1, 6) = s_trings(I)
            End Select
        End If
    Next
Next
End Sub
 

Discussions similaires

Réponses
18
Affichages
528
Réponses
1
Affichages
114
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…