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
Onglet 2
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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...
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.
Edit:
Bonjour à tous,
56 visites sans réponses, a priori mon problème n'inspire pas grand monde... 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 :
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!
Partager