Recherche de texte specifique avec/sans mise en forme Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 24 mars 2017, 21:49

Bonjour,
J'ai essayé de comprendre le code et j'ai mis des annotations. Je voulais juste savoir si j'ai bien compris les différentes commandes.
Private Sub cmdGO_Click()
'
Dim tTab(10) As Integer
' tab pour la declaration d'un tableau à 1 dimension de 10 lignes

iCol = UsedRange.Columns.Count
'Usedrange pour selectionner toutes les cellules utiliser dans le tableau
'Columns.count compte les colonnes utilisees et renvoi la derniere

Cells(9, 1).Resize(1, iCol).ClearContents
'de la cellule 9.1 a la derniere colonne du tableau (ligne 9 colonne=usedrange.columns.count) on efface

For x = 1 To iCol
    iRow = Cells(Rows.Count, x).End(xlUp).Row
'rows.count decompte nombre de ligne utilisée et colonne=x. Commence par derniere ligne non vide, remonte de 1 ceci afin pour ne pas prendre en compte la date.

    sCol = Split(Columns(x).Address(ColumnAbsolute:=False), ":")(1)
'En gros défini la colonne a traiter

    If iRow > 1 Then
'iRow=1 donc colonne avec seulement la date

        Erase tTab
'Si il y a d'autre chose que la date dans la colonne alors on efface le tableau ttab

        For y = 1 To iRow
            If Left(Cells(y, x), 1) = "R" Then tTab(Val(Mid(Cells(y, x), 2, 1))) = IIf(Range(sCol & y).Font.Strikethrough = True, 2, 1)
'Si le charactere de gauche dans la cellule 1,1 =R alors retourne la chaine de charactere de la cellule 1,1 en commencant par le charactere numero 2 d'une longueur de 1
'Val pour transformer chaine de texte en nombre
'A mettre dans le tableau ttab
'IIF test si la cellule est en charactere barre. Si oui=2, si non=1

        Next
        For y = 1 To 9
            If tTab(y) <> 1 Then Cells(9, x) = Cells(9, x) & "R" & Trim(Str(y)) & " "
'Si les valeurs du tableau n'est pas egal a 1 (pourquoi 1 ?) alors dans la cellule 9,x ecrire R + le nombre (trim enleve les espaces) + espace
        Next
        iIdx = -1
        For y = 1 To 9
            If tTab(y) <> 1 Then
                iIdx = iIdx + 1
                Range(sCol & 9).Characters(1 + (iIdx * 3), 2).Font.Strikethrough = IIf(tTab(y) = 2, True, False)
' ecriture en barrée mais pas compris
            End If
        Next
    End If
Next
'
End Sub
Merci !
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'747
Appréciations reçues : 226
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 24 mars 2017, 22:30

Salut Tribilbo,

:bien: 8/10

- Pourquoi 1? tTab reprend les R... existants dans tes colonnes : 1 = existant, 2 = existant barré.. Comme tu ne gardes que les existants barrés, il faut éviter de reprendre les existants 'simples', donc <> 1 ;
- Range(sCol & 9).Characters(1 + (iIdx * 3), 2).Font.Strikethrough = IIf(tTab(y) = 2, True, False)
La cellule-réponse étant complète, on traite les barrés, selon leur position (y) dans tTab --> d'où iIdx=iIdx+1.
On ne peut pas utiliser la variable de boucle y puisque certains tTab(y)=0 (position incertaine).
La propriété 'Characters' de Range permet de cibler la portion de cellule à barrer, dans ce cas-ci.
1+iIdx*3 = position de départ. Si, par ex. en 3e (iIdx= 2) position : 1 + (2*3) = 7 car 2 précédents qui occupent chacun 3 caractères (R1 + l'espace)
...,2) car on ne barre que 2 caractères depuis la position de départ.

CQFD !

Bienvenue en VBA! :wink:
A+
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 28 mars 2017, 22:18

Merci pour les dernières précisions. Je vais maintenant m'amuser à l'adapter à mon vrai tableur.

A bientôt si j'ai d'autres questions ;)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message