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