Lancement d'une méthode Find à partir d'un double-clic
Bonjour à tous,
Je me permets de vous solliciter car j’ai quelques difficultés dans la réalisation d’une macro. Loin d’être expert, je récupère des morceaux de code que j’adapte à mon cas, sans toujours comprendre à 100% son contenu.
Je vous expose la chose :
Un classeur, 2 onglets
Dans l’onglet 1, l’idée consiste à double cliquer pour cocher une cellule d’un « x », ce qui engendre des modifications dans l’onglet 2 (insertion de ligne + copier-coller d’informations de l’onglet 1).
Je patauge en raison de l’utilisation des coordonnées relatives. J’illustre par 2 images les onglets et je vous montre mon code en l’état actuel.
Onglet 1
http://img11.hostingpics.net/thumbs/...377Onglet1.gif
Onglet 2
http://img11.hostingpics.net/thumbs/...929Onglet2.gif
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Variables partie 2
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String
'Partie 1 : Coche un X dans la cellule en double clic
If Not Application.Intersect(Target, Range("C3:BG448")) Is Nothing Then
On Error Resume Next
If IsEmpty(ActiveCell.Value) Then
ActiveCell.Value = "x"
ElseIf ActiveCell.Value = "x" Then
ActiveCell.Value = ""
End If
Cancel = True
End If
'Partie 2 : Cherche valeur cellule : même ligne & colonne 1 de longlet 1 dans longlet 2
'Affectation de valeurs aux variables : Recherche première cellule de la ligne cochée de longlet 1
Valeur_Cherchee = ActiveCell.EntireRow.Cells(1)
'Indication de la plage de recherche : colonne L de longlet 2
Set PlageDeRecherche = Sheets("onglet 2").Columns(12)
'Méthode find
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole).Activate
'Partie 3: Si la valeur nest pas trouvée dans longlet 2 colonne L
If Trouve Is Nothing Then
AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
MsgBox AdresseTrouvee
'Partie 4 : Si la valeur est trouvée dans longlet 2 colonne L
Else
AdresseTrouvee = Trouve.Address
'Partie 5 : Modifications sur longlet 2
'Insertion dune ligne en dessous de la valeur trouvée
Sheets("Onglet 2").Select
Entire.Rows("AdresseTrouvee").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Remise à 0 des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
'Copier-coller de lactivité de longlet 1 vers longlet 2
Sheets("Onglet 1").Activate
'Copie la valeur cellule : Colonne B ; même ligne que la coche « x »
ActiveCell.EntireRow.Cells(2).copy
'Colle la valeur cellule : Colonne K ; ligne nouvellement insérée
Sheets("Onglet 2").Activate
ActiveCell.EntireRow.Cells(11).Activate
ActiveSheet.PasteSpecial Paste:=xlPasteValues
'Copier-coller de la thématique de longlet 1 vers longlet 2
Sheets("Onglet 1").Activate
'Copie la valeur cellule : Ligne 1 ; même colonne que la coche « x »
ActiveCell.EntireColumn.Cells(1).copy
'Colle la valeur cellule : Colonne N ; ligne nouvellement insérée
Sheets("Onglet 2").Activate
ActiveCell.EntireRow.Cells(14).Activate
ActiveSheet.PasteSpecial Paste:=xlPasteValues
'Copier-coller du risque lié de longlet 1 vers longlet 2
Sheets("Onglet 1").Activate
'Copie la valeur cellule : Ligne 2 ; même colonne que la coche « x »
ActiveCell.EntireColumn.Cells(2).copy
'Colle la valeur cellule : Colonne O ; ligne nouvellement insérée
Sheets("Onglet 2").Activate
ActiveCell.EntireRow.Cells(15).Activate
ActiveSheet.PasteSpecial Paste:=xlPasteValues
End If
End Sub |
Au delà du coté sans doute trop basique de mon code (j'apprends seul), l'insertion de ligne ne se fait pas correctement dans l'onglet 2.
D'autre part, il peut y avoir plusieurs fois la valeur recherchée dans l'onglet 2, il faut donc que j'intègre une boucle à cette macro pour que les modifications se fassent sur toutes les valeurs identiques, cependant il y a des lignes masquées sur lesquelles le "find" ne doit pas se faire... :roll:
Ce qui m'importe c'est surtout de comprendre même si en conséquence le code n'est pas hyper optimisé... chaque chose en son temps!
Je remercie donc toute âme charitable souhaitant me faire profiter de ses compétences.
Bien à vous.:coucou:
Edit:
Bonjour à tous,
56 visites sans réponses, a priori mon problème n'inspire pas grand monde...:roll: ou manque de précision.
En respect des articles III-C et IV-G du règlement, je me permets de préciser la demande (remarque au cas où: je ne souhaite pas qu'on fasse le boulot à ma place si c'est ce qui inquiète !)
Voici ce que j'obtiens au lancement du double-clic :
http://img4.hostingpics.net/thumbs/m...79Onglet21.gif
Pourtant la référence est bien présente en L14 et L38 ce qui implique que ma méthode Find ne fonctionne pas correctement... Quelqu'un connait la raison?
Le reste fonctionne presque comme souhaité, je me demande s'il est possible d'appliquer les modifications à toutes les valeurs trouvées à partir du Find sans faire de boucle? Si oui est ce que ça impactera les lignes masquées?
Merci de votre aide!