Boucle dans une boucle

Bonjour à tous,

Premier post sur ce forum

Mon niveau de VBA ne me permet pas de résoudre le problème suivant (qui ne me semble pas solvable simplement avec une formule excel). Je pourrais faire un si(nb.si( pour répondre à ma problématique de contenu de cellule, ainsi qu'un si.conditions pour interroger de multiples conditions, mais la si.conditions est limitée à 127 requêtes (j'en ai plus de 1000 de le fichier original).

Le but de la manipulation est de faire du mapping : pour chacune des cellules de la colonne C, il existe une cellule de la colonne F dont la valeur est contenue dans cette cellule de la colonne C.

Par exemple, la cellule C6 qui contient 3 blocs de textes séparés par des "_", le premier bloc "exemple1" correspond bien à la cellule F6 "exemple1" : dans ce cas la fonction doit renvoyer en D6 le contenu de G6.

Pour mes besoins (et pour faciliter la compréhension) : il n'existe pas de cas de figure où le contenu d'une cellule C soit égal à plusieurs cellules de la colonne F.

Au sein de mon fichier excel vous trouverez un descriptif de mon besoin et des itérations nécessaires et une vision cible du fichier complété après application de la macro souhaitée.

Est-ce qu'un habitué des "double boucles" pourrait m'aider sur ce fichier, ou simplement me mettre sur la voie ?

Merci beaucoup pour votre aide,

bonjour,

solution via une fonction personnalisée.

Function recherchepartielle(texte, plage, colonne)
    For Each mot In plage
        If InStr(texte, mot) > 0 Then recherchepartielle = mot.Offset(, colonne - 1): Exit Function
    Next
    recherchepartielle = CVErr(xlErrNA)
End Function

Bonjour,

Je n'ai pas ouvert votre fichier, je vais juste illustrer le fonctionnement de 2 boucles imbriquées. Le concept est de parcourir par exemple toutes les cellules d'une colonne, et pour chacune parcourir toutes les cellules d'une seconde colonne.

Un exemple bidon :

Sub Test2Boucles()

Dim i As Long, j As Long, MaxI As Long, MaxJ As Long, K As Long

MaxI = 1000
MaxJ = 100
For i = 1 To MaxI '1ère boucle, i augmente d'1 (par défaut) à chaque tour de boucle, sinon voir exemple de j
    For j = 1 To MaxJ Step 2 'Boucle 2 : j augmente de 2 en 2
        K = K + 1 'Ajoute 1 à K chaque fois que l'instruction est exécutée
    Next j 'Fin boucle 2
Next i 'Fin boucle 1
MsgBox "L'instruction à été exécutée : " & K & " fois." 

End Sub 

Bonjour tous les deux,

Merci de vos réponses, malheureusement je n'arriverais pas à les appliquer,

Pouvez-vous m'indiquer comment utiliser la fonction "recherchepartielle" introduite ?

Merci,

bonjour,

=recherchepartielle(texte,plage,colonne)

la fonction renvoie le texte original correspondant au premier mot de la liste trouvé dans le texte.

texte= texte dans lequel il faut rechercher les mots se trouvant dans plage

plage = cellules (dans une colonne contenant les mots à trouver)

colonne = position de la colonne qui contient le texte original. en considérant que la colonne de la plage est la colonne 1.

par exemple si en C11 on a la chaine de caractère dont il faut renvoyer le texte original et en F6:F13 on a les noms retravaillés et en G6:G13 les textes originaux correspondants.

=recherchepartielle(C11;F6:F13;2)

2 pour indiquer la 2ème colonne (G) en considérant que F est la première.

Merci beaucoup pour ton retour,

Le problème est que je n'arrive tout simplement pas à utiliser cette fonction personnalisée dont j'ai pourtant copié le code dans un module.

Elle n'est pas utilisable, je ne l'ai donc pas testée,

Sais-tu la rendre activable dans mon fichier excel ?

Merci,

bonjour,

n'ayant pas ton fichier, voici comment tu dois procéder.

il faut la copier dans un nouveau module.

alt-F11-> pour activer l'éditeur VBA

supprimer toutes les autres copies de la macro qui se trouveraient déjà dans le classeur (module de feuille, module de classeur)

menu, insérer, module

coller le code

alt-F11 -> retour à excel

sauver le fichier avec les macros (extension .xlsm)

la fonction est disponible. si tu tapes =rech dans la barre de formule, tu devrais voir apparaître le nom de la fonction.

Ah merci beaucoup !

Je l'ai copié dans le module ce qui me permet de l'essayer, je reviens vers vous si je n'arrive pas à mon but,

Merci beaucoup

Ca correspond exactement à ce que je cherchais,

Cette fonction personnalisée résoud mon problème,

Merci beaucoup,

Excellente soirée

Rechercher des sujets similaires à "boucle"