Re : Comment faire une boucle dans ma macro de recherche + insertion de ligne
Bonjour skoobi, bonjour a tous,
Bon, j'ai essayé d'insérer .findnext dans ma macro (plusieurs tentatives, à plusieurs endroits) mais ya rien à faire : elle tourne correctement (quand elle trouve la valeur, elle m'insère une ligne en dessous pour y incrémenter mes valeurs correspondante mais elle ne le fait que pour la 1ère valeur qu'elle trouve, ensuite elle passe à la suivante); pas moyen qu'elle le fasse à chaque fois qu'elle trouve la valeur...
Voilà ce que donne le code :
Option Explicit
'pour chaque rôle de l'onglet "Specifique" trouvée dans "Transactions_BPR"
'Insertion d'une ligne dans "Transactions_BPR" juste après la ligne de la valeur trouvée,
'dans laquel va venir s'incrémentée la transaction spécifique (colonne A), et recopie de l'étape, process, scénario et rôle auquel elle serait susceptible ede correspondre.
'cette ligne va se colorer pour plus de visibilité.
Sub RechercheSpec()
Dim i As Long
Dim cell As Range
Dim lidep1 As Long
Dim NomFeuille1 As String
Dim NomFeuille2 As String
Dim col1 As String
Dim lig As Long
Application.ScreenUpdating = True 'gele l'ecran
lidep1 = 2
col1 = "a"
NomFeuille1 = "Specifiques"
NomFeuille2 = "Transactions BPR"
For i = lidep1 To Sheets(NomFeuille1).Range(col1 & "65536").End(xlUp).Row
'Appel de la macro "recherchemot"
lig = recherchemot("e3:e" & Sheets(NomFeuille2).Range("e65536").End(xlUp).Row, Sheets(NomFeuille1).Range(col1 & i), NomFeuille2, 1)
'si elle trouve la valeur, alors-> insertion de ligne, copie de valeurs en colonne B, C, D et E de la ligne du dessus
'+ aller chercher la valeur dans la colonne A de "Specifique".
If lig <> 0 Then
Sheets(NomFeuille2).Select
Rows(lig + 1).Select
Selection.Insert Shift:=xlDown
Selection.Interior.ColorIndex = 44
' en colonne A, la valeur se trouvant en colonne B de la feuille "spécifique";
'- en colonne B, C, D et E les valeurs des colonnes B, C, D et E de la ligne juste au dessus;
Range("B" & lig & ":E" & lig).Select
Application.CutCopyMode = False
Selection.Copy
Range("B" & lig + 1).Select
ActiveSheet.Paste
Selection.Interior.ColorIndex = 44
Sheets(NomFeuille1).Select
Sheets(NomFeuille2).Range("a" & lig + 1) = Sheets(NomFeuille1).Range("B" & i)
End If
Next i
Application.ScreenUpdating = False 'gele l'ecran
End Sub
'---------------------------------------------------------------------------------------
' Procedure : recherchemot
'=recherchemot(plage_pour la recherche,valeur_cherché,nom_de_la_feuille, code_retour )
' ad plage de recherche
'ad = "a2:" & Sheets("rue").Cells.SpecialCells(xlCellTypeLastCell).Address(0, 0) ' on recherche dans l'ensemble de la feuille'
'---------------------------------------------------------------------------------------
'
Private Function recherchemot(plage_recherche As String, valcherche As String, nom_de_la_feuille As String, code_retour As Byte)
Dim firstAddress As String
Dim firstRow As String
Dim cel As Range
Dim ligne1 As Long
Dim ligne2 As Long
With Sheets(nom_de_la_feuille).Range(plage_recherche)
Set cel = .Find(valcherche, LookIn:=xlValues, SearchOrder:=xlByRows, lookat:=xlWhole) ' on recherche ligne par ligne
'Set c = .Find(valcherche, LookIn:=xlFormulas, SearchOrder:=xlByRows) 'si date
'Set £c = .Find(dataf, LookIn:=xlValues, MatchCase:=True, _
SearchOrder:=xlByRows, lookat:=xlWhole) If Not cel Is Nothing Then
If code_retour = 1 Then recherchemot = cel.Row
If code_retour = 2 Then recherchemot = cel.Address
Do
Set cel = .FindNext(cel)
Loop While recherchemot = 0 Exit Function
End If
End With
recherchemot = 0
End Function
Là, je suis un peu à court d'idée, si vous avez quelques suggestions...je serai bien preneur...
Milles merci.
Gwad.