Bonjour,
J'aimerai pouvoir copier le nom du gestionnaire présent en colonne D en face des lignes correspondantes à sa gestion. Bien sûr je ne connais pas à l'avance le nombre de lignes pour chaque gestionnaire. J'étais partie sur l'idée que : si la cellule B contient le mot "gestionnaire :" alors je récupère la valeur offset(,2) et effectue une copie de la valeur 3 lignes en dessous et tant que le numéro de produit est complété (colonne C).
Grâce à jm.andryszak j'avais pu finaliser une précédente demande. Mais cette fois-ci, je ne suis pas dans le même schéma puisque l'information relative au nom du gestionnaire ne se trouve pas dans la même cellule mais dans une cellule adjacente. Je ne peux donc pas utiliser :
J'ai bien compris qu'il fallait partir sur le même principe de recherches d'adresses pour localiser les lignes contenant les informations, cette partie est ok pour la ligne concernée mais cela remonte l'information de la cellule B (normal c'est ce qui est écrit) mais comment faire pour la cellule D.
Je joins un fichier pour une meilleure compréhension.
Merci.
J'aimerai pouvoir copier le nom du gestionnaire présent en colonne D en face des lignes correspondantes à sa gestion. Bien sûr je ne connais pas à l'avance le nombre de lignes pour chaque gestionnaire. J'étais partie sur l'idée que : si la cellule B contient le mot "gestionnaire :" alors je récupère la valeur offset(,2) et effectue une copie de la valeur 3 lignes en dessous et tant que le numéro de produit est complété (colonne C).
Grâce à jm.andryszak j'avais pu finaliser une précédente demande. Mais cette fois-ci, je ne suis pas dans le même schéma puisque l'information relative au nom du gestionnaire ne se trouve pas dans la même cellule mais dans une cellule adjacente. Je ne peux donc pas utiliser :
(Split(Mid(Adresses, 2), ":")) - 1
J'ai bien compris qu'il fallait partir sur le même principe de recherches d'adresses pour localiser les lignes contenant les informations, cette partie est ok pour la ligne concernée mais cela remonte l'information de la cellule B (normal c'est ce qui est écrit) mais comment faire pour la cellule D.
Option Explicit
Dim Adresses
Private Sub ChercheAddresses()
'https://stackoverflow.com/questions/30380490/find-and-findnext-for-excel-vba
Dim c As Range
Dim FirstAddress
With Range("b:b")
Set c = .FIND("GESTIONNAIRE*", LookIn:=xlValues)
If Not c Is Nothing Then
FirstAddress = c.Address
Do
Adresses = Adresses & ":" & c.Address
Set c = .FindNext(c)
Loop While c.Address <> FirstAddress
End If
End With
End Sub
Sub Essai()
Dim Plage As Range
Dim DerniereLigne
Dim i, j
Dim Debut
Debut = Timer
Adresses = vbNullString
Application.ScreenUpdating = False
Range("b:b").Offset(, 3).ClearContents
ChercheAddresses
'Debug.Print Adresses
'
For i = 0 To UBound(Split(Mid(Adresses, 2), ":")) - 1
Set Plage = Range(Split(Mid(Adresses, 2), ":")(i) & ":" & Split(Mid(Adresses, 2), ":")(i + 1))
For j = 1 To Plage.Rows.Count
If Plage.Offset(, 2).Cells(j, 1) <> "" And Plage.Offset(, 2).Cells(j, 1) <> "Produit" Then
Plage.Offset(, 3).Cells(j, 1) = Split(Plage(1, 1), ":")(1)
End If
Next
Next
'Dernière Plage
i = Split(Split(Adresses, ":")(UBound(Split(Adresses, ":"))), "$")(2)
DerniereLigne = Range("d" & Rows.Count).End(xlUp).Row
Set Plage = Range("e" & i & ":" & "e" & DerniereLigne - 4).Offset(4, 0)
Plage.Value = Split(Range(Split(Adresses, ":")(UBound(Split(Adresses, ":")))), ":")(1)
Application.ScreenUpdating = True
'
MsgBox Timer - Debut
End Sub
Je joins un fichier pour une meilleure compréhension.
Merci.