Liste dans une boucle

salut à tous,

je dois extraire des iniitales de chaines de caractéres pour x lignes.

j'ai une liste définie d'une 15éne d'initiales à 2 ou 3 lettres.

Comment éviter de mettre15 conditions dans ma macro pour extraire ces initiales.

j'ai fait la macro "initiales" qui fonctionne avec les initiales ER...

merci

Fronck

4listes.xlsm (13.57 Ko)

AVEC or çà fonctionne pour les 4, donc çà doit fonctionner pour 15.

merci

Bonsoir,

Si tu extrais les initiales dans la feuille, une procédure Sub n'est pas le mieux indiqué, une fonction personnalisée rendra de meilleurs services. Si la structure de tes expressions est toujours la même, alors :

Function INITIALS(exp As String) As String
    Dim ExIn
    Application.Volatile
    ExIn = Split(exp)
    INITIALS = ExIn(1)
End Function

Ton idée pour extraire les initiales m'a paru un peu compliquée... mais il serait surtout souhaitable que tu indentes ton code...

Cordialement.

désolé, mais je connais pas les fonctions, n'y même comment éxécuter la tienne.

J'ai utilisé le vba parceque j'ai besoin d'une boucle pour trouver la place des initiales.

Sinon, cà veut dire quoi in-dent-er

3listes.xlsm (13.69 Ko)

Une fonction personnalisée s'utilise comme toute autre fonction de feuille de calcul d'Excel.

Tu regarderas l'utilisation en colonne C.

Pour l'indentation, tu regarderas ta procédure, elle est indentée dans les règles :

  • à la marge tu n'as que Sub, End Sub et l'étiquette.
  • aucune ligne sautée à l'intérieur, ça a plutôt tendance à perturber...
  • mais au premier coup d'oeil tu vois qu'il y a 2 boucles imbriquées et 1 condition, et s'il y avait d'autres instructions de même type, elles auraient aussi été decelées immédiatement.

J'ai fait aussi quelques autres modifications didactiques :

  • suppression des Select complètement absurdes et inutiles, juste bons à ralentir VBA !!!
  • inhibition de GoTo, inutile dans ce cas où tu n'as qu'à sortir de la boucle interne pour reprendre l'externe : Exit For est fait pour ça.
  • placement de la procédure Function avant la procédure Sub : dans un module on place en tête toutes les déclarations (quand il y en a) puis les procédures Function et enfin les procédures Sub.

Cordialement.

4fronck-listes.xlsm (13.91 Ko)

Ok, je vais peut être devoir me mettre aux fonctions.

Mais là j'ai pas été assez loin: Ta fonction prend les initiales aprés le 1er groupe de mot.

Mais souvent c'est le 2émé ou 3éme groupe de mot.

quant à l'exit for, çà va m'être utile pour sortir d'une boucle, même si un goto sera nécessaire quand il y a 2 boucles non imbriquées, par exemple, quand tu compares 2 tableaux pour les fusionner.

merci

Fronck

5listes.xlsm (14.76 Ko)

Bonjour,

Ok, je vais peut être devoir me mettre aux fonctions.

C'est en effet un domaine à ne pas négliger, pour couvrir les besoins particuliers auxquels les fonctions classiques ne répondent pas ou mal. Particulièrement dans les manipulations de chaînes, où dans presque tous les cas, bâtir une fonction s'avère plus facile et rapide que jongler avec les fonctions texte d'Excel...

A ne pas oublier quand tu construis une fonction à utiliser dans les feuilles, l'instruction : Application.Volatile à mettre immédiatement après les déclarations de variables, qui permet le recalcul automatique dans les mêmes conditions que pour les autres fonctions d'Excel (Application.Volatile False à l'inverse si tu ne veux pas que la fonction soit recalculée à chaque recalcul, ce qui peut s'avérer pratique dans le cas par exemple de tirages aléatoires où tu peux souhaiter que les résultats ne changent pas chaque fois que la feuille se recalcule, ce que la fonction ALEA ne permet pas).

Et également si tu travailles exclusivement en VBA, les fonctions peuvent rendre d'énormes services et simplifier le code utilisé (là le caractère volatile ou non est sans effet puisque tu n'es pas en utilisation en feuillle de calcul).

Mais là j'ai pas été assez loin: Ta fonction prend les initiales aprés le 1er groupe de mot.

Mais souvent c'est le 2émé ou 3éme groupe de mot.

Tu as fourni une structure où les expressions se partagaient en 3 groupes dont il fallait extraire systématiquement le second ! Avec cette structure, 2 lignes de code suffisaient à réaliser l'extraction.

Mais on avait également affaire à un premier groupe fait apparemment de mentions (sigles) à caractère "institutionnel" et un 3e groupe numérique, caractéristiques que l'on n'avait nul besoin d'utiliser si les initiales sont systématiquement dans le second groupe, mais qui peuvent l'être si la structure peut varier. Il faut également savoir si l'on a toujours 3 groupes ou s'il peut n'y en avoir que 2 ou bien 4 ou plus...

Si tu précises l'ensemble des variations de structure possibles de ton expression de départ, la fonction pourra être ajustée pour répondre à tous les cas.

quant à l'exit for, çà va m'être utile pour sortir d'une boucle, même si un goto sera nécessaire quand il y a 2 boucles non imbriquées, par exemple, quand tu compares 2 tableaux pour les fusionner.

Tu constateras que Exit For suffit dans la très grande majorité des cas, où l'on n'a besoin que d'écourter une boucle avant la fin, parce qu'on a trouvé ce qu'il y avait à trouver et qu'on sait qu'on ne trouvera rien d'autre en continuant à boucler. L'utilisation de GoTo (branchement inconditionnel) est en fait assez rare, mais il est bien de l'avoir en tête et savoir l'utiliser, cela peut rendre des services (la dernière fois que je m'en suis servi, il y a déjà pas mal de temps, ce n'était justement pas pour sortir d'une boucle, mais à l'inverse exécuter le code à l'intérieur de la boucle, sans boucler, en ne l'exécutant qu'une fois...)

Si tu précises les variations de la chaîne de laquelle on extrait les initiales, on ajustera la fonction pour y répondre (et certainement sans beaucoup allonger le code).

Cordialement.

bonjour

si j'ai bien compris sur une liste de 15 mots on veut extraire les initiales de chacun ,...une suggestion il y aura peut etre mieux , si ta liste est definie admettons sur la premiere colonne et commence a la premiere cellule.

 x=""
for i = 1 to cells(1,1).end(xldown).row  ' parcours de la premiere ligne à la derniere ligne remplie 
x=x &" - "& left(cells(i,1),1)
next
'affichage du resultat :
msgbox x 

voila

Bonjour Rocket4,

Je crois que tu n'as pas lu le sujet .

Rechercher des sujets similaires à "liste boucle"