VBA recherche les positions d'une même valeur/ 1 colonne
Bonjour,
Pas très expérimentée en VBA, je galère depuis plusieurs jours pour écrire une macro qui doit exécuter les instructions suivantes :
Recherche dans la colonne N à partir de N9 de la variable " n° de dossier"de la cellule N2 et relever les positions successives de cette variable afin de copier coller la plage de données en ligne "K2:AD2" sur chaque ligne trouvée de la base données, 3 colonnes avant (donc à partir de la colonne K)
Je joins un fichier Excel soft.
Merci d'avance pour votre aide.
Christine
Voici le code que j'ai commencé à écrire , mais je n'arrive pas à me positionner 3 colonnes avant par rapport à l'adresse de la variable récupérée :
Sub cherche_trouve_colle()
Dim DERLIGN As Long
Dim RECHERCHE As String
RECHERCHE = Range("N2").Value
Dim PremCellule As String
Dim Cellule As Range
Dim PremLigne As String
With Worksheets("DEMANDES").Activate
DERLIGN = Range("A" & Rows.Count).End(xlUp).Row
End With
With Worksheets("DEMANDES").Range("N8:N" & DERLIGN)
Set Cellule = .Find(RECHERCHE)
If Not Cellule Is Nothing Then
PremCellule = Cellule.Address
Do
MsgBox Cellule.Address
Set Cellule = .FindNext(Cellule)
Loop Until Cellule.Address = PremCellule
End If
End With
End Sub
Une autre petite question : Peut on utiliser dans une macro le nom qui a été donné sous excel à une cellule ou une plage de cellules ; pour permettre, si la structure du fichier a été modifiée par ajout de colonnes par exemple de ne pas modifier la syntaxe de la macro ?
Bonjour,
En cherchant mieux j'ai réussi à copier coller la plage sur chaque ligne avec le code suivant :
Option Explicit
Sub cherche_trouve_colle()
Dim DERLIGN As Long
Dim RECHERCHE As String
RECHERCHE = Range("N2").Value
Dim PremCellule As String
Dim Cellule As Range
Dim PremLigne As Long
With Worksheets("DEMANDES").Activate
DERLIGN = Range("A" & Rows.Count).End(xlUp).Row
End With
With Worksheets("DEMANDES").Range("N8:N" & DERLIGN)
Set Cellule = .Find(RECHERCHE)
If Not Cellule Is Nothing Then
PremCellule = Cellule.Address
PremLigne = Range(Cellule.Address).Row
Worksheets("DEMANDES").Range("K2:AD2").Copy
Worksheets("DEMANDES").Range("K" & PremLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Do
MsgBox Cellule.Address & PremLigne
Set Cellule = .FindNext(Cellule)
PremLigne = Range(Cellule.Address).Row
Worksheets("DEMANDES").Range("K2:AD2").Copy
Worksheets("DEMANDES").Range("K" & PremLigne).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Loop Until Cellule.Address = PremCellule
End If
End With
End Sub
Ce que je ne comprends pas : pourquoi le processus revient sur la première ligne trouvée en boucle finale ?
Je voulais savoir si mon code était proprement écrit ?
Merci d'avance pour votre aide
Christine