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,
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
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 !!!