Re : Recherche copier ET coller cellule dans autre feuille même classeur
Bonjour James007
Je voudrai te remercier pour l'aide que tu m'apporte. j'apprends beaucoup en essayant de décrypter le code suggéré.
En testant ce code, j'ai eu une alerte me demande de confirmer si je souhaite confirmer un écrasement de nom "références" qui existait déjà dans la cible.
j'ai corriger cette erreur en insérant une applicationdisplayalerts = false que j'ai réactivé après la ligne qui bloquait (je l'ai enlevé par la suite).
puis j'ai constaté que en insérant la ligne dans la cible, le format n'était pas garder et le format de la source était coller. cela me posait problème car je voulais garder le format.
j'ai essayé plusieurs options avant d'arriver à quelque chose qui fonctionne :
ci-dessous le code modifié, j'ai aussi mis de commentaires pour mon info (pourrais-tu éventuellement commenter mes commentaires)
-
Option Explicit
Sub MacMajEtat()
Dim Source As Range 'déclarer ma source à partir de laquelle je vais rechercher
Dim Cible As Range ' déclarer ma cible dans laquelle je vais rechercher
Dim c As Range 'déclarer la valeur rechercher
Dim trCell As Range ' déclarer un point de départ pour la recherche dans la cible
Dim der1 As Long 'déclarer une variable qui va stocker la plage de valeur rechercher dans la surce
Dim der2 As Long 'déclarer une variable qui va stocker la plage de recherche dans le cible
der2 = Feuil3.Cells(Cells.Rows.Count, "A").End(xlUp).Row 'définir l'endroit de recherche dans la cible
Set Cible = Feuil3.Range("A11:A" & der2) ' préciser la cible
Set trCell = Feuil3.Range("A11") ' préciser le point de départ de la recherche
der1 = ActiveSheet.Cells(Cells.Rows.Count, "A").End(xlUp).Row ' définir l'endroit de valeur à rechercher
Set Source = ActiveSheet.Range("A30:A" & der1) ' préciser les limites de la plage
' aller jusqu à la fin de la colonne
For Each c In Source ' pour chaque reference (cellule non vide) feuille active
If c <> "" Then
'c.EntireRow.Copy ' copie la ligne (je l'ai ramené plus bas)
On Error Resume Next
Set trCell = Cible.Find(What:=c.Value, After:=trCell, _
LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
If Not trCell Is Nothing Then
Application.Goto trCell, True
ActiveCell.EntireRow.Insert , CopyOrigin:=xlFormatFromRightOrBelow
' copyorigin pour conserver le format de la ligne du dessous.
c.EntireRow.Copy ' faire la copie de la ligne seulement maintenant
' pour éviter l'erreur du copyorigin
ActiveCell.EntireRow.PasteSpecial Paste:=xlPasteValues
ActiveCell.Select
' Application.CutCopyMode = False
Else
MsgBox "Votre recherche n'aboutit pas ..."
End If
End If
Next c ' répeter cette action pour toutes les cellules non vides
End Sub
--
Actuellement, le code fonctionne, je vais faire plusieurs tests et puis l'associer à un bouton sur ma feuille active ou l'associer à un évènement type before ou after print
Merci de tes commentaires en retour.🙂