Bonjour,
Toute débutante que je suis en VBA, j’avoue que j’ai trouvé dans un livre la formule magique de l’étape 1 de la macro que j’essaie de construire, et tâtonne depuis plusieurs jours pour l’adapter.
L’objectif est de compléter un tableau de suivi de la mise à jour de documents (« SuiviMaJ ») à l’aide d’un rapport hebdomadaire.
Ce rapport liste les documents qui ont changé de statut dans la semaine. Etant envoyé par mail par un outil de Gestion Electronique de Documents, il est copié manuellement dans une feuille du même classeur que le tableau de suivi (feuille « ExploitReport »). Les valeurs « DocNumber » « Statut » et « DateStatut » sont extraites des cellules importées grâce des formules déjà en place dans respectivement les colonnes A,B et C.
Les documents sont identifiés par leur « DocNumber » dans les deux tableaux.
Dans le tableau « SuiviMaJ », la macro doit parcourir toutes les cellules de la colonne des « DocNumber » et compléter les colonnes « Statut » et « DateStatut » avec les valeurs trouvées pour les « DocNumber » présents dans la feuille « « ExploitReport » (pour mémo, ce sont les résultats des formules).
De plus,si les cellules Statut et Date du tableau « SuiviMaJ » sont déjà renseignées, la macro doit passer au « DocNumber » suivant, sans copier les valeurs trouvées (les valeurs initiales ne doivent pas être remplacées).
Le problème : la macro balaye bien tous les « DocNumber » du tableau « SuiviMaJ » et n’écrase pas les valeurs déjà renseignées … mais elle écrit « #VALEUR ! » à la place de « Statut » et « DateStatut ».
Le disfonctionnement est sans doute est à l'étape 1 (cf. code): mauvaise utilisation de la fonction « Find » ou pb lors de la transformation de la cellule trouvée en n° de ligne ?
Je me lance donc pour la première fois à poser une question sur un forum ! Merci d’avance à qui viendra m’aider. Et déjà merci pour toutes les réponses que j’ai déjà trouvées !
Voici le code en question :
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 Sub Macro1() Dim Report As Worksheet Set Report = Worksheets("ExploitReport") Dim DocNumber As Variant Dim Ligne As Variant Dim Statut As Variant Dim DateStatut As Variant Sheets("SuiviMaJ").Range("E2").Select While ActiveCell.Value <> Empty DocNumber = ActiveCell.Value If IsEmpty(ActiveCell.Offset(0, 5)) Then 'Etape 1 - Trouver la cellule de DocNumber dans ExploitReport, et convertir ses coordonnées en ligne puis donner le n° de ligne à la variable Ligne' Ligne = [Report.Range("A1:A100").Find(What:=DocNumber, LookIn:=xlFormulas, LookAt:=xlWhole).Address] Ligne = [Range(Ligne).Row] Ligne = CInt(Ligne) 'Etape 2 - Rechercher les valeurs Satut et DateStatut dans ExploitReport' Statut = [Report.Cells(Ligne, 2).Value] DateStatut = [Report.Cells(Ligne, 3).Value] 'Etape 3 - copier Statut et date statut dans le tableau SuiviMaJ' ActiveCell.Offset(0, 5).Range("A1").Select ActiveCell.FormulaR1C1 = Statut ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = DateStatut ActiveCell.Offset(1, -6).Range("A1").Select End If If Not IsEmpty(ActiveCell.Offset(0, 5)) Then ActiveCell.Offset(1, 0).Range("A1").Select End If Wend Set Report = Nothing End Sub
Partager