Aide pour gestion de boucle

Bonjour,

J'ai un soucis que j'essaie de régler mais malheureusement je ne vois pas comment faire alors je vous demande de l'aide.

J'ai un tableau ou il y a deja pas mal de code qui fonctionne par contre je souhaite récupérer la valeur de la cellule juste avant un saut de page en colonne A et pouvoir la mettre dans la cellule juxtaposé à la cellule contenant "*Nom et numéro*" (c'est a dire en colonne F)

Pour ma part j'ai deux partie de code séparer qui fonctionne ou je récupère bien les données voulues

le code pour récupéré la valeur de la dernière cellule avant le saut de page

Sub test2()

Dim num As Integer
Dim BD2 As Worksheet

Set BD2 = Sheets("BD (2)")
With BD2

Sauts = .HPageBreaks.Count
    For I = 1 To Sauts
num = .HPageBreaks(I).Location.Row - 1
MsgBox .Range("A" & num).Value

Next I
End With
End Sub

le code pour récupéré la cellule juxtaposé à la cellule contenant "*Nom et numéro*"

Sub test2()

Dim BD2 As Worksheet

Set BD2 = Sheets("BD (2)")

With BD2

For Each cel In .Range("A1:M" & .UsedRange.Rows.Count)

If cel.Value Like "*Nom ou numéro*" Then

MsgBox ("F" & cel.Row)

End If
Next cel
End With
End Sub

Merci de votre aide

Bonjour,

Je ne comprend pas trop ce que vous entendez par cellule juxtaposée mais si je place A en F50 et que mon saut de page se trouve entre la ligne 50 et 51, le msgbox me renvoie bien A avec ce code :

Sub test2()
Dim num As Integer, I As Integer
With Worksheets("BD (2)")
    For I = 1 To .HPageBreaks.Count
        num = .HPageBreaks(I).Location.Row - 1
        MsgBox .Range("F" & num)
    Next I
End With
End Sub

Si ce n'est pas ce que vous attendez, merci de préciser avec un exemple concret comme je l'ai fait.

Cdlt,

Edit : Pourquoi boucler sur l'ensemble des sauts de pages si vous ne vous servez que du dernier pour le recopier dans l'ensemble des cellules juxtaposées à nom et numéro ? Que cherchez vous à faire exactement ?

Si je reprend comme dans votre exemple je souhaite récupérer la valeur en A50 et la mettre dans la cellule a cote de "*nom ou numéro*" (si celle si est en E5 la mettre en F5) et ceci dans une boucle pour faire de même en A70 et F50

edit en espérant avoir été plus claire

Bonjour,

Si j'ai bien compris afin de reporter la valeur de bas de page dans la plage entre deux sauts de pages :

Sub test2()
Dim num As Integer, I As Integer, VALEUR$
Dim CEL As Range
Dim PLAGE As Range
With Worksheets("BD (2)")
    For I = 1 To .HPageBreaks.Count
        VALEUR = Cells(.HPageBreaks(I).Location.Row - 1, 1)
        Select Case I
            Case 1
            Set PLAGE = .Range(.Cells(1, 5), .Cells(.HPageBreaks(I).Location.Row - 1, 5))
            Case .HPageBreaks.Count - 1
            Set PLAGE = .Range(.Cells(.HPageBreaks(I).Location.Row, 5), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 5))
            Case Else
            Set PLAGE = .Range(.Cells(.HPageBreaks(I - 1).Location.Row, 5), .Cells(.HPageBreaks(I).Location.Row - 1, 5))
        End Select
        For Each CEL In PLAGE
            If CEL = "*Nom ou numéro*" Then .Cells(CEL.Row, 6) = VALEUR
        Next CEL
    Next I
End With
End Sub

Le SELECT CASE sert à gérer les erreurs, en effet quand on est au premier saut de page, on ne peut chercher le saut de page -1 car il n'existe pas. Idem pour le dernier saut de page (ici 2), on ne peut trouver le 3ème car il n'existe pas c'est notre bas de page, donc dernière ligne utilisée.

Cdlt,

3classeur1.xlsm (20.21 Ko)

Je vois que cela fonctionne sur ton fichier mais je n'arrive pas a le faire sur le mien

peux tu m'expliquer ton code stp

Bonjour,

Sub test2()
Dim num As Integer, I As Integer, VALEUR$
Dim CEL As Range
Dim PLAGE As Range
With Worksheets("BD (2)") 'Avec feuille BD (2)
    For I = 1 To .HPageBreaks.Count 'Pour I = du premier saut de page au dernier
        VALEUR = Cells(.HPageBreaks(I).Location.Row - 1, 1) 'Valeur = cellule à l'intersection de la colonne A, ligne du saut de page -1
        Select Case I 'Dans le cas où I =
            Case 1 ' I =1
            Set PLAGE = .Range(.Cells(1, 5), .Cells(.HPageBreaks(I).Location.Row - 1, 5)) 'PLAGE = E1:E & ligne saut de page -1
            Case .HPageBreaks.Count - 1 'I = Dernier saut de page 
            Set PLAGE = .Range(.Cells(.HPageBreaks(I).Location.Row, 5), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 5)) 'PLAGE = E & Ligne dernier saut de page & E & dernière ligne
            Case Else 'Dans tous les autres cas
            Set PLAGE = .Range(.Cells(.HPageBreaks(I - 1).Location.Row, 5), .Cells(.HPageBreaks(I).Location.Row - 1, 5)) 'PLAGE = E & saut de page I - 1 : E & Saut de page I - 1 ligne
        End Select
        For Each CEL In PLAGE 'Pour chaque cellule de la plage
            If CEL = "*Nom ou numéro*" Then .Cells(CEL.Row, 6) = VALEUR 'Si la cellule est égal ) "*nom ou numéro*" alors on attribue la valeur sur la cellule de la même ligne, colonne F
        Next CEL 'On passe à la cellule suivante de la plage
    Next I 'Passe au saut de page suivant
End With
End Sub

Quand vous dites que ça ne fonctionne pas qu'est ce qui ne fonctionne pas ? Détaillez le contexte ? A quelle ligne le code s'arrête ? Qu'est ce qui ne se passe pas et que vous attendez ? Qu'y a-t-il d'inscrit dans vos cellules exactement en colonne E ?

Cdlt,

Je vous transmet un fichier

et quand je dis cela ne fonctionne pas c'est qu'il ne se passe rien je n'ai pas de beug spécialement mais je ne vois pas ce que je cherche

4classeur1.xlsm (53.11 Ko)

Edit: j'aurai du le faire plus tot cela aurait peut être aider à la compréhension de ma demande :/

Bonjour,

Au vu du fichier je comprend mieux. Vous n'avez aucune cellule où il est écrit "Nom ou numéro". De plus, vous me demandez de chercher "Nom ou numéro" dans la colonne E pour mettre la valeur A38 en colonne F mais au vu de la largeur et de l'AR réalisée, la colonne E ne semble pas accueillir de texte mais le facteur de pondération de la fréquence.

Que cherchez vous à réaliser ? Par exemple où doit aller la valeur de la cellule A38 ? Où peut se trouver "nom et numéro", est-il inclut au milieu de texte d'une cellule ou c'est une valeur d'une cellule donc il n'y a que "nom et numéro" dans cette cellule ? Les explications s'éclaircissent mais restent floues au vu du fichier transmis. Le plus efficient aurait été de le transmettre avec le résultat attendu et le raisonnement par exemple : Valeur A38 en K9 car présence d'un risque en B9 (c'est arbitraire car je ne connais pas le raisonnement en question). Ici je ne vois aucune cellule où il est écrit "Nom et numéro".

Cdlt,

Je cherche a mettre la valeur de A38 (ici 1) en F5 est ainsi de suite pour toute les autres pages

Nom ou numéro est contenue en B5 dans la phrase "Nom ou numéro de la fonctionnalité" (fusionné de B à E)

Désolé de ne pas avoir été assez claire des le début.

Bonjour,

C'est beaucoup plus clair, du coup on parle de la colonne B et non de la colonne E. Donc ci-contre le code modifié. J'ai modifié une ligne en plus car je me suis rendu compte que le numéro 3 n'était pas correctement translaté :

Sub test2()
Dim num As Integer, I As Integer, VALEUR$
Dim CEL As Range
Dim PLAGE As Range
With Worksheets("BD (2)") 'Avec feuille BD (2)
    For I = 1 To .HPageBreaks.Count 'Pour I = du premier saut de page au dernier
        VALEUR = Cells(.HPageBreaks(I).Location.Row - 1, 1) 'Valeur = cellule à l'intersection de la colonne A, ligne du saut de page -1
        Select Case I 'Dans le cas où I =
            Case 1 ' I =1
            Set PLAGE = .Range(.Cells(1, 2), .Cells(.HPageBreaks(I).Location.Row - 1, 2)) 'PLAGE = B1:B & ligne saut de page -1
            Case .HPageBreaks.Count + 1 'I = Dernier saut de page
            Set PLAGE = .Range(.Cells(.HPageBreaks(I).Location.Row, 2), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 2)) 'PLAGE = B & Ligne dernier saut de page & B & dernière ligne
            Case Else 'Dans tous les autres cas
            Set PLAGE = .Range(.Cells(.HPageBreaks(I - 1).Location.Row, 2), .Cells(.HPageBreaks(I).Location.Row - 1, 2)) 'PLAGE = B & saut de page I - 1 : B & Saut de page I - 1 ligne
        End Select
        For Each CEL In PLAGE 'Pour chaque cellule de la plage
            If CEL Like "*Nom ou numéro*" Then .Cells(CEL.Row, 6) = VALEUR 'Si la cellule est égal ) "*nom ou numéro*" alors on attribue la valeur sur la cellule de la même ligne, colonne F
        Next CEL 'On passe à la cellule suivante de la plage
    Next I 'Passe au saut de page suivant
End With
End Sub

Cdlt,

Wahou super MERCI beaucoup !!!!!

Cela m'enlève une grande épine du pied !!!!

c'est vraiment COOL MERCI de votre aide !!!

Rechercher des sujets similaires à "aide gestion boucle"