VBA Boucle Do While

Jub

XLDnaute Nouveau
Bonjour,

Je me permets de venir vers vous, suite à plusieurs semaines à tester toutes les formulations possibles pour que ça fonctionne.

Le but étant de comparer sur 2 feuilles différentes des cellules et si certaines conditions sont remplies, de remplir certaines cellules.
En gros, je dis je regarde pour la ligne iRow colonne 7 ed la feuille HAB si la cellule est vide.
si c'est le cas, je regarde la cellule de la ligne iRow colonne 3 et je regarde si elle est égale à une des cellules de la colonne 2 de la feuille Matrice Hab-For.
donc je balaye en itérant iRow2 (ligne de cette feuille).

une fois la cellule trouvée, je balaye cette ligne iRow2 et je regarde si une des cellules sur la ligne = 1, donc je balaye iCol.

une fois, la cellule trouvée, je renvoie l'intitulé de la colonne (qui se trouve donc ligne 2, iCol) dans la cellule ligne iRow colonne 7 de la feuille HAB.

et ma boucle foire complétement, elle renvoie que dalle... ou m'envoie pas le bon intiutlé ou est en mode infini (obligé de faire ECHAP).

Merci de votre aide.
Je ne sais pas si je raisonne à l'envers pour la boucle ou pas. je vous mets 2 versions de mon code.

Je desespère !

Code:
Sub Recherche_Stages()
Dim iRow As Long
Dim iRow2 As Long
Dim iCol As Long

Dim ws As Worksheet
Dim ws2 As Worksheet

Set ws = Worksheets("Matrice Hab - For")
Set ws2 = Worksheets("HAB")

iCol = 3
iRow2 = 3
iRow = 1
Do While ws.Cells(iRow2, iCol).Value <> 1
    Do While ws2.Cells(iRow, 3) <> ws.Cells(iRow2, 2).Value
        Do While ws2.Cells(iRow, 7).Value <> ""
        iRow = iRow + 1
        Loop
    iRow2 = iRow2 + 1
    Loop
iCol = iCol + 1
Loop
    

End Sub

2eme code :
Code:
Sub Recherche_Stages()
Dim iRow As Long
Dim iRow2 As Long
Dim iCol As Long

Dim ws As Worksheet
Dim ws2 As Worksheet

Set ws = Worksheets("Matrice Hab - For")
Set ws2 = Worksheets("HAB")
iRow = 1
Do While ws2.Cells(iRow, 7).Value <> ""
    iRow2 = 3
    iCol = 3
    Do While ws2.Cells(iRow, 3) <> ws.Cells(iRow2, 2).Value
       Do While ws.Cells(iRow2, iCol).Value <> 1
        iCol = iCol + 1
        Loop
        ws2.Cells(iRow, 7).Value = ws.Cells(2, iCol).Value
    iRow2 = iRow2 + 1
    Loop
iRow = iRow + 1
Loop
End Sub

encore merci pour votre expertise et de votre temps.
 

Odesta

XLDnaute Impliqué
Re : VBA Boucle Do While

Bonjour

Votre code est effectivement à l'envers
En partant de la macro deux :

Do While ws2.Cells(iRow, 7).Value <> ""

Temps que la cellule n'est pas vide, j'execute le code entre Do et Loop : le code sera donc executé à chaque itération. Donc lorsque c'est vide, c'est faux, il arrête la boucle. Et lorsque c'est non-vide il fait ce que vous ne voulez pas qu'il fasse (dilemme).

Idem pour les autres boucles.

Donc, si vous voulez utiliser Do Loop, c'est pour chercher la prmeière ligne vide, puis vous utilisez la valeur :

Code:
Do While ws2.Cells(iRow, 7).Value <> ""
       irow = irow + 1
Loop

'[... SUITE DES INSTRUCTIONS avec iRows comme variable...]



Est-ce que mon explication a suffit pour mieux comprendre le problème ?
 

Jub

XLDnaute Nouveau
Re : VBA Boucle Do While

Bonjour,
merci de votre réponse.

J'ai essayé mais ça bugue sur la ligne en gras.
Code:
iRow = 1
Do While ws2.Cells(iRow, 7).Value <> ""
iRow = iRow + 1
Loop
    iRow2 = 3
    iCol = 3
    Do While ws2.Cells(iRow, 3) <> ws.Cells(iRow2, 2).Value
        [B]Do While ws.Cells(iRow2, iCol).Value <> 1[/B]
        iCol = iCol + 1
        Loop
        ws2.Cells(iRow, 7).Value = ws.Cells(2, iCol).Value
    iRow2 = iRow2 + 1
   Loop
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA Boucle Do While

Bonjour Jub, Odesta, bonjour le forum,

je verrais plutôt les choses comme ça (non testé)...
Code:
Sub Macro1()
Dim oo As Worksheet 'déclare la variable oo (Onglet Origine)
Dim oc As Worksheet 'déclare la variable oc (Onglet Cible)
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim r As Range 'déclare la variable r (Recherhe)
Dim li As Long 'déclare la variable li (Ligne)
 
Set oo = Worksheets("HAB") 'définit l'onglet origine
Set oc = Worksheets("Matrice Hab - For") 'définit l'onglet cible
 
'boucle 1 : sur toute les cellules éditées cel1 de la colonne 7 de l'onglet "HAB" (en partant de la seconde)
For Each cel1 In oo.Range("G2:G" & oo.Range("G65536").End(xlUp).Row)
    If celo = "" Then 'condition 1 : si la cellule est vide
        'définit la rechereche r (recherche la valeur de la cellule correspondante de la colonne C dans la colonne 2 de l'onglet "Matrice Hab - For")
        Set r = oc.oolumns(2).Find(oo.celo.Offset(0, -4), , xlValues, xlWhole)
        If Not r Is Nothing Then li = r.Row 'condition : si il existe au moins une occurrence trouvée, définit la ligne li
        For Each cel2 In oc.Rows(li) 'boucle 2 : sur toute les cellules de la ligne li de l'onglet "Matrice Hab - For"
            If cel2.Value = 1 Then 'condition 2 : 'si la valeur de la cellule cel2 est égale à 1
                cel1.Value = oc.Cells(li, cel2.oolumn) 'place en cel1 l'intitulé de la colonne de cel2
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        Next cel2 'prochaine cellule de la boucle 2
    End If 'fin de la condition 1
Next cel1 'prochaine cellule de la boucle 1
End Sub
 

Odesta

XLDnaute Impliqué
Re : VBA Boucle Do While

Bonjour,
merci de votre réponse.

J'ai essayé mais ça bugue sur la ligne en gras.
Code:
iRow = 1
Do While ws2.Cells(iRow, 7).Value <> ""
iRow = iRow + 1
Loop
    iRow2 = 3
    iCol = 3
    Do While ws2.Cells(iRow, 3) <> ws.Cells(iRow2, 2).Value
        [B]Do While ws.Cells(iRow2, iCol).Value <> 1[/B]
        iCol = iCol + 1
        Loop
        ws2.Cells(iRow, 7).Value = ws.Cells(2, iCol).Value
    iRow2 = iRow2 + 1
   Loop

Re, Salut Robert

Jub, vous répétez exactement la même erreur que j'ai tenté de vous faire corriger plus tôt.

Avez-vous compris le principe de Do / Loop ?
 

Gorfael

XLDnaute Barbatruc
Re : VBA Boucle Do While

Salut Jub et le forum
Un peu complexe, et comme je ne connais pas le fichier... juste des idées.
- L'indentation n'est pas là pour faire beau. C'est là pour te permettre de t'y retrouver dans tes Boucles, tests, etc...
- Utiliser "Do While" ne me semble pas adapté dans ton cas :
Do While ws.Cells(iRow2, iCol) <> 1
Il faut que tu tombes sur 1 pour que ta boucle s'arrête. Mais ligne et colonne sont des variables, et seule la colonne ne dépend pas d'une autre boucle. Et la ligne évolue, même si elle rencontre un 1. Déjà que je n'aime pas trop les boucles While/Until...

En gros, je dis je regarde colonne 7 de la feuille HAB si la cellule est vide.
si c'est le cas, je regarde colonne 3 et je regarde si elle est égale à une des cellules de la colonne 2 de la feuille Matrice Hab-For.
J'ai simplifié : quand on explique, mettre ses variables en plein milieux n'aide pas. Donc ce que je lis : la première ligne me crée une boucle de G1 à dernière ligne de la feuille (65536 sous excel 2003).
Donc, ça devrait logiquement être ta première boucle. Comme tu recherches une cellule vide, il faut lui définir une limite : ça m'étonnerait que tu veuilles tester toute ta feuille. Comme tu vas rechercher une comparaison (non vide, je présume) entre la colonne 3 de "HAB" et toute la colonne 2 de matrice, il me semble judicieux de fixer la limite de la plage à parcourir de 1 à dernière ligne non-vide de la colonne 3.
Donc, ma première boucle serait du style (en utilisant For...next, qui est borné):
Code:
For X=1 to ws2.cells(rows.count,"C").end(xlUp).row
    if ws.cells(X,"G")="" then
        'la suite
    End if
next X
La même en Do While donnerait
Code:
Do While X <= ws2.cells(rows.count,"C").end(xlUp).row
    if ws.cells(X,"G")="" then

    End if
    X = X + 1
Loop
Je trouve que c'est moins lisible, surtout que tu vas imbriquer des DO...Loop. Le fait de pouvoir mettre la variable derrière Next, permet de situer la fin de la boucle. Comme les temps de traitement sont sensiblement les mêmes, je privilégie la lisibilité du code.
Ce qui me gène dans ton code, c'est la valeur 1 à ce niveau.

On continue
On va donc regarder la première égalité entre la colonne C de la ligne dont G est vide et la colonne B de la feuille matrice
On va garder ton idée de boucle imbriquée donc ça nous donne :
Code:
For Y=1 to ws.cells(rows.count,"B").end(xlUp).row
    if ws.cells(Y,"B")=ws2.cells(X,"C") then
        'La suite
    End if
next Y

une fois la cellule trouvée, je balaye cette ligne et je regarde si une des cellules sur la ligne = 1, donc je balaye iCol.
Donc on arrive à la troisième boucle, mais là, c'est une boucle de colonne. On recherche la valeur 1 sur la ligne Y de ws.
Code:
for Z=3 to ws.cells(Y,columns.count).End(xltoleft).column
    if ws.cells(Y,Z)=1 then
        'Suite
    End if
next Z
une fois, la cellule trouvée, je renvoie l'intitulé de la colonne (qui se trouve donc ligne 2, iCol) dans la cellule colonne 7 de la feuille HAB
Ne connaissant pas le fichier, il me faut envisager 2 solutions : on trouve, et je colle le titre dans la colonne 7. Mais si je ne trouve pas, j'avertis. Ce qui donne en final une macro du style :
Code:
Sub Recherche_Stages()
Dim X As Long, Y As Long, Z As Integer
Dim Flg As Boolean
Dim F1 As Worksheet
Dim F2 As Worksheet

Set F2 = Worksheets("Matrice Hab - For")
Set F1 = Worksheets("HAB")

For X = 1 To F1.Cells(Rows.Count, "C").End(xlUp).Row
    If F1.Cells(X, "G") = "" Then
        Flg = False
        For Y = 1 To F2.Cells(Rows.Count, "B").End(xlUp).Row
            If F2.Cells(Y, "B") = F1.Cells(X, "C") Then
                For Z = 3 To F2.Cells(Y, Columns.Count).End(xlToLeft).Column
                    If F2.Cells(Y, Z) = 1 Then
                        Flg = True
                        F1.Cells(X, "G") = F2.Cells(2, Z)
                        Exit For
                    End If
                Next Z
                If Flg Then Exit For
            End If
        Next Y
        If Flg Then Exit For
    End If
    If Not Flg Then
        F1.Cells(X, "G") = "Pas de valeur"
        F1.Cells(X, "G").Interior.ColorIndex = 3
    End If
Next X
End Sub
Attention je ne l'ai pas testée.
J'ai bien faire des remarques, alors allons-y :
- On utilise souvent i en variable, mais hormis l'école et ses vecteurs, je préfère utiliser X, Y, Z qui se confondent moins avec le 1 ou le j (surtout vers les 3h00, après un recherche de dépannage).
- Toutes mes variables commencent par une majuscule : comme j'ai "Option Explicit" et que j'écris en minuscules, en validant la ligne, si la majuscule ne se met pas, c'est que soit ma variable n'est pas déclarée, soit que j'ai fait une faute de frappe.
- Quand je ne suis pas sûr de moi, je fait un test sur les premières lignes/colonnes que je paramètre pour me donner un bon résultat (quitte à faire quelques insertions. Et je teste ma macro en pas-à-pas, en regardant si mes variables correspondent à mes attentent (fenêtre variables locales, ou insertion dans le code de boîte de dialogue)
- J'utilise souvent l'underscore "_" dans mes variables (je ne travaille que sur micro-ordinateur), ça les rend plus lisibles (les titres de macro, les noms d'objet aussi).
- Les boucles que je fais sont toujours bornées : J'utilise plutôt "For...Next", mais aussi "Do Until/While...Loop Until/While". Si j'utilise une boucle infinie, je prévoit une condition de sortie.
- Pour les bornes, j'utilise une inégalité ("<=" ou ">=") moins sujet à une ratée qu'une égalité

Comme je ne suis pas sûr du résultat à obtenir, je n'ai pas testé. Et comme je suis humain, meme si ce que je fais me semble correct, sans test...
A+
 

Odesta

XLDnaute Impliqué
Re : VBA Boucle Do While

La boucle tourne temps que la condition est VRAIE

Donc, "Do While ws2.Cells(iRow, 3) <> ws.Cells(iRow2, 2).Value" tourne jusqu'à ce que les deux cellules soient identique. Si les deux cellules ne le sont jamais, la boucle est infinie. (à ce propos, vous pouvez rajouter un Chien de garde : IF iRow2 > 65000 then End )

Lorsque la boucle 'tourne' elle execute tout le code contenue dans la boucle.

C'est très utile si vous souhaitez executer plusieur fois un code, par exemple pour toutes les lignes jusqu'à la dernière.

Dans votre cas, vous chercher une ligne particuliere pour y executer une action une seule fois.

Le mieux c'est donc de faire tourner une boucle jusqu'a trouver la bonne ligne
et d'utiliser cette ligne pour les instructions suivante.


C'est un peu plus claire ? Si non , n'hesitez pas à demander. C'est toujours mieux, d'après moi, d'expliquer à quelqu'un qui pourra à son tour aider :)

Donc, lorque les deux cellules sont identiques, l'instruction sort de la boucle.


EDIT : Salut Gorfael
 
Dernière édition:

Jub

XLDnaute Nouveau
Re : VBA Boucle Do While

Salut robert,
ça bugue sur ce point :
Code:
Sub Macro1()
Dim oo As Worksheet 'déclare la variable oo (Onglet Origine)
Dim oc As Worksheet 'déclare la variable oc (Onglet Cible)
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim r As Range 'déclare la variable r (Recherhe)
Dim li As Long 'déclare la variable li (Ligne)
 
Set oo = Worksheets("HAB") 'définit l'onglet origine
Set oc = Worksheets("Matrice Hab - For") 'définit l'onglet cible
 
'boucle 1 : sur toute les cellules éditées cel1 de la colonne 7 de l'onglet "HAB" (en partant de la seconde)
For Each cel1 In oo.Range("G2:G" & oo.Range("G65536").End(xlUp).Row)
    If celo = "" Then 'condition 1 : si la cellule est vide
        'définit la rechereche r (recherche la valeur de la cellule correspondante de la colonne C dans la colonne 2 de l'onglet "Matrice Hab - For")
       [B] Set r = oc.oolumns(2).Find(oo.celo.Offset(0, -4), , xlValues, xlWhole)[/B]
        If Not r Is Nothing Then li = r.Row 'condition : si il existe au moins une occurrence trouvée, définit la ligne li
        For Each cel2 In oc.Rows(li) 'boucle 2 : sur toute les cellules de la ligne li de l'onglet "Matrice Hab - For"
            If cel2.Value = 1 Then 'condition 2 : 'si la valeur de la cellule cel2 est égale à 1
                cel1.Value = oc.Cells(li, cel2.oolumn) 'place en cel1 l'intitulé de la colonne de cel2
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        Next cel2 'prochaine cellule de la boucle 2
    End If 'fin de la condition 1
Next cel1 'prochaine cellule de la boucle 1
End Sub

J'avoue que je ne sais pas comment le résoudre... je l'ai déclaré celo as range. mais ça suffit pas a priori.
 

david84

XLDnaute Barbatruc
Re : VBA Boucle Do While

Bonjour à tous,
je passe simplement pour souligner le travail pédagogique entamé par Robert Gorfael et Odesta.
Bon Robert, c'est une habitude chez lui car il commente soigneusement ses codes et c'est vraiment important pour quelqu'un qui cherche à comprendre le VBA (comme je tente de le faire actuellement).
Quand je vois les explications de Gorfael et d'Odesta, je regrette d'autant plus le fait qu'il n'y ait pas de fichier rattaché à la question. Cela aurait notamment permis de tester les différents codes et d'étudier leur différence. Gorfael aurait également pu s'en servir pour y glisser une ou 2 erreurs et expliquer comment se servir des outils permettant de trouver ces erreurs (boîte de dialogue,...) ou le fait de savoir simplifier un code afin de le tester plus aisément,...
Bref, je trouve vraiment dommage que l'absence de fichier pourtant demandé lors de la création d'une discussion nous prive de tel outils.
Cela aurait permis à Jub d'avoir une réponse plus rapide (car le code aurait pu être testé) et aux personnes qui suivent ce fil et qui ne demandent qu'à comprendre de pouvoir progresser, ce qui est l'un des buts de ce forum.
Cordialement
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA Boucle Do While

Bonjour le fil, bonjour le forum,

Il y avait en effet des erreurs dans le code. Ells sont corrigées, je te prie de m'excuser...

Code:
Sub Macro1()
Dim oo As Worksheet 'déclare la variable oo (Onglet Origine)
Dim oc As Worksheet 'déclare la variable oc (Onglet Cible)
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim r As Range 'déclare la variable r (Recherhe)
Dim li As Long 'déclare la variable li (Ligne)
 
Set oo = Worksheets("HAB") 'définit l'onglet origine
Set oc = Worksheets("Matrice Hab - For") 'définit l'onglet cible
 
'boucle 1 : sur toute les cellules éditées cel1 de la colonne 7 de l'onglet "HAB" (en partant de la seconde)
For Each cel1 In oo.Range("G2:G" & oo.Range("G65536").End(xlUp).Row)
    If cel1 = "" Then 'condition 1 : si la cellule est vide
        'définit la rechereche r (recherche la valeur de la cellule correspondante de la colonne C dans la colonne 2 de l'onglet "Matrice Hab - For")
        Set r = oc.Columns(2).Find(oo.cel1.Offset(0, -4), , xlValues, xlWhole)
        If Not r Is Nothing Then li = r.Row 'condition : si il existe au moins une occurrence trouvée, définit la ligne li
        For Each cel2 In oc.Rows(li) 'boucle 2 : sur toute les cellules de la ligne li de l'onglet "Matrice Hab - For"
            If cel2.Value = 1 Then 'condition 2 : 'si la valeur de la cellule cel2 est égale à 1
                cel1.Value = oc.Cells(li, cel2.oolumn) 'place en cel1 l'intitulé de la colonne de cel2
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        Next cel2 'prochaine cellule de la boucle 2
    End If 'fin de la condition 1
Next cel1 'prochaine cellule de la boucle 1
End Sub
 
Dernière édition:

Jub

XLDnaute Nouveau
Re : VBA Boucle Do While

Merci pour toutes ces explications.
L'absence de fichier est simplement du au fait que c'est professionnel, etj en esuis pas sur qu'en mettant un exemple, meme en faussant les noms ou autres ça aide.

cela dit, si c'est vraiment utile je prendrais le temps de le faire.

Robert, ça me sort une erreur de compilation: membre de méthode ou de données introuvable, et ce tjrs sur la même ligne.
et j'avoue que je n'ai jamais eu affaire avec ce type d'erreur.

et pas besoin de t'excuser ! tu fais deja bien assez ;)

Merci à la pédagogie des autres intervenants et la patience.
 
Dernière édition:

Jub

XLDnaute Nouveau
Re : VBA Boucle Do While

Quant à ta proposition, Garfael, il me t systématiquement le "PAs de valeur" et en rouge pour la cellule précédent la cellule vide.
si la recherche a l'air de bien fonctionner.

par contre l'itération je la mets en fin de boucle (dans la boucle ou à l'extérieur?)
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA Boucle Do While

Bonjour le fil, bonjour le forum,

En fait, de faire un fichier ça m'aurait au moins permis de tester le code. J'avoue que j'ai la flemme de recréer tes conditions pour tester...

Essaie comme ça (dernière tentative) :
Code:
Sub Macro1()
Dim oo As Worksheet 'déclare la variable oo (Onglet Origine)
Dim oc As Worksheet 'déclare la variable oc (Onglet Cible)
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim r As Range 'déclare la variable r (Recherhe)
Dim li As Long 'déclare la variable li (Ligne)
 
Set oo = Worksheets("HAB") 'définit l'onglet origine
Set oc = Worksheets("Matrice Hab - For") 'définit l'onglet cible
 
'boucle 1 : sur toute les cellules éditées cel1 de la colonne 7 de l'onglet "HAB" (en partant de la seconde)
For Each cel1 In oo.Range("G2:G" & oo.Range("G65536").End(xlUp).Row)
    If cel1 = "" Then 'condition 1 : si la cellule est vide
        'définit la rechereche r (recherche la valeur de la cellule correspondante de la colonne C dans la colonne 2 de l'onglet "Matrice Hab - For")
        Set r = oc.Columns(2).Find(cel1.Offset(0, -4), , xlValues, xlWhole)
        If Not r Is Nothing Then li = r.Row 'condition : si il existe au moins une occurrence trouvée, définit la ligne li
        For Each cel2 In oc.Rows(li) 'boucle 2 : sur toute les cellules de la ligne li de l'onglet "Matrice Hab - For"
            If cel2.Value = 1 Then 'condition 2 : 'si la valeur de la cellule cel2 est égale à 1
                cel1.Value = oc.Cells(li, cel2.oolumn) 'place en cel1 l'intitulé de la colonne de cel2
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        Next cel2 'prochaine cellule de la boucle 2
    End If 'fin de la condition 1
Next cel1 'prochaine cellule de la boucle 1
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA Boucle Do While

Bonjour le fil, bonjour le forum,

Un code enfin testé... et qui marche (en tout cas chez moi)...
Code:
Sub Macro1()
Dim oo As Worksheet 'déclare la variable oo (Onglet Origine)
Dim oc As Worksheet 'déclare la variable oc (Onglet Cible)
Dim cel1 As Range 'déclare la variable cel1 (CELlule 1)
Dim cel2 As Range 'déclare la variable cel2 (CELlule 2)
Dim r As Range 'déclare la variable r (Recherhe)
Dim li As Long 'déclare la variable li (Ligne)
 
Set oo = Worksheets("HAB") 'définit l'onglet origine
Set oc = Worksheets("Matrice Hab - For") 'définit l'onglet cible
 
'boucle 1 : sur toute les cellules éditées cel1 de la colonne 7 de l'onglet "HAB" (en partant de la seconde)
For Each cel1 In oo.Range("G2:G" & oo.Range("G65536").End(xlUp).Row)
    If cel1 = "" Then 'condition 1 : si la cellule est vide
        'définit la rechereche r (recherche la valeur de la cellule correspondante de la colonne C dans la colonne 2 de l'onglet "Matrice Hab - For")
        Set r = oc.Columns(2).Find(cel1.Offset(0, -4), , xlValues, xlWhole)
        If Not r Is Nothing Then li = r.Row 'condition : si il existe au moins une occurrence trouvée, définit la ligne li
        For Each cel2 In oc.Rows(li).Cells 'boucle 2 : sur toute les cellules de la ligne li de l'onglet "Matrice Hab - For"
            If cel2.Value = 1 Then 'condition 2 : 'si la valeur de la cellule cel2 est égale à 1
                cel1.Value = oc.Cells(2, cel2.Column) 'place en cel1 l'intitulé de la colonne de cel2
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        Next cel2 'prochaine cellule de la boucle 2
    End If 'fin de la condition 1
Next cel1 'prochaine cellule de la boucle 1
End Sub
 

Pièces jointes

  • Jub_v01.xls
    31 KB · Affichages: 147

Statistiques des forums

Discussions
312 680
Messages
2 090 866
Membres
104 681
dernier inscrit
Gtcheumawe