Option Explicit
Sub Essai()
Dim n&: n = Cells(Rows.Count, 6).End(3).Row 'n = dernière ligne utilisée,
'selon la colonne F ; car 6 = colonne F et 3 = xlUp ; si y'a aucune donnée
'dans le tableau (donc tableau vide avec en-têtes seulement), alors n = 8
'car la ligne d'en-têtes est la ligne n° 8 ; dans l'exemple, n = 15 car
'la dernière donnée est en F15.
If n = 8 Then Exit Sub 'sortie si n = 8 car aucune donnée => y'a rien à faire :
'aucune chaîne de caractères à traiter ; comme n = 15, on ne sort pas, et donc
'on va faire la suite du code VBA.
Dim T, s1$, s2$, c1$, c2%, p%, k%, i& 'déclaration de plusieurs variables
n = n - 8 'j'enlève 8 car il y a 8 lignes au-dessus de la 1ère donnée qui
'est en ligne 9 => n = 15 - 8 = 7 ; n est donc maintenant le nombre de
'données, et tu peux vérifier qu'il y a bien 7 données de F9 à F15.
T = [F9].Resize(n, 2) 'T est le tableau utilisé ; il y a n lignes, donc
'autant de lignes que de données, ici 7 ; il y a 2 colonnes, la 1ère
'pour les données de la colonne F ; la 2ème pour stocker les résultats
'du traitement ; à la fin, on les écrira en colonne G, mais c'est pas
'obligé de les mettre juste à droite ; on pourrait les écrire dans
'une autre colonne.
For i = 1 To n 'boucle pour traiter les n lignes du tableau T ; donc on va
'faire la suite pour chacune des 7 lignes de T.
s1 = T(i, 1): k = Len(s1) 's1 contient la donnée de la 1ère colonne de T,
'donc la donnée de la colonne F ; k est la longueur de s1, donc le nombre
'de caractères de la donnée.
If k > 0 Then 'ce qui est dans ce If est exécuté seulement si la donnée est
'd'au moins 1 caractère ; donc si y'a une cellule vide en colonne F, avant
'la dernière donnée, alors pas de traitement pour la ligne en question :
'on saute à la ligne qui est juste sous le End If.
s2 = "" 's2 est la chaîne de caractères du résultat, qui doit être vide
'au départ ; car comme on va y cumuler des caractères, il ne faut pas
'que le résultat d'une ligne soit mélangé avec les résultats obtenus
'avant sur les autres lignes (sinon, il y aurait des interférences).
For p = 1 To k 'boucle pour chaque caractère de la donnée, de 1 à k ;
'n'oublie pas que k est la longueur de la chaîne de caractères de s1.
c1 = Mid$(s1, p, 1): c2 = Asc(c1) 'c1 est le p-ième caractère de s1,
'et c2 est son code Ascii ; exemple : lettre A = 65, lettre Z = 90.
If c2 >= 65 And c2 <= 90 Then s2 = s2 & c1 'on ajoute le caractère c1
'dans s2, mais seulement si son code Ascii est entre 65 et 90 inclus,
'donc si c'est une lettre de A à Z ; comme y'a « & », c'est bien une
'concaténation : on ajoute les lettres au fur et à mesure dans s2.
Next p 'caractère suivant
If s2 <> "" Then T(i, 2) = s2 'on met s2 dans T(i,2) seulement si s2
'n'est pas une chaîne de caractères vide ; en effet, s2 était vide
'au départ, et il reste vide si y'a aucune lettre dans la donnée.
End If
Next i 'donnée suivante
Application.ScreenUpdating = 0 'gel de l'écran : la mise à jour de l'écran
'est désactivée pour la prochaine écriture des résultats sur la feuille de
'calcul ; ça concerne juste une colonne, mais c'est quand même mieux s'il
'y a plusieurs milliers de lignes.
[G9].Resize(n) = Application.Index(T, Evaluate("Row(" & "1:" & n & ")"), 2)
'écriture des résultats à partir de la cellule G9 ; c'est là où tu peux
'choisir une autre colonne et une autre ligne pour la destination.
'attention : sur cette ligne, ne change rien d'autre que G9 ! il faut
'impérativement laisser le reste inchangé ! en effet, c'est toujours
'pour n lignes de données (ici pour 7 données) ; de 1 à n lignes de T,
'et pour la 2ème colonne de ce même tableau T ; donc 2 est bien la
'2ème colonne de la variable tableau T, ce n'est pas la colonne B !
End Sub