MaJ Tableau

Bonjour à tous.

Dans le cadre de mon travail, je souhaite créer une macro afin de mettre à jour un tableau à partir d'un autre tableau.
Voici la marche que je souhaite suivre.
Tableau de donnée d'entrée = Folio_Source
Tableau à mettre à jour = Folio
Folio_Source et Folio sont deux feuilles différentes du même fichier excel.

Chaque ligne correspond à un dossier avec différentes informations dans chaque colonnes.
Le N° des dossier est situé en colonne C, et la liste commence à la ligne 5.

Pour un i allant de 5 à jusqu'à la dernière cellule non vide de la colonne C du Folio_Source:
- Si le N° du dossier en Ci du folio_source existe dans la colonne C du Folio, alors copier les cellules Ai à Hi du Folio_Source et les coller dans la ligne correspondant à ce N° de dossier dans la feuille Folio.

- Si le N° de dossier n'existe pas, alors copier les cellules Ai à Hi du Folio_Source et les coller dans la première ligne vide à la fin du Folio

Pour cela, j'ai mis en place le code suivant:

Sub Comparer_folio()

'Comparer "Folio_Source" à "Folio"
Dim i As Integer 'Numéros de ligne à faire varier
Dim Cell_source As Range 'Cellule source du Folio Source
Dim Cell_MaJ As Range 'Cellule à mettre à jour du Folio
Dim Col_MaJ As Range 'Colonne des numéros de points à mettre à jour
Dim f As Variant
Dim DLig As Range

Set Cell_source = Sheets("Folio_Source").Range("C" & i)
Set Cell_MaJ = Sheets("Folio").Range("C" & i)
Set Col_MaJ = Sheets("Folio").Columns("C")
Set DLig = Sheets("Folio").Range("A1").End(xlDown).Row + 1

'1er bouclage: mise à jour des points + ajout des points créés
i = 5 'On commence à la ligne 5
Do While Cell_source <> ""
f = Application.WorksheetFunction.vlookup(Cell_source, Col_MaJ, 1, False)
If IsError(f) Then
Sheets("Folio_Source").Cells("Ai:Hi").Copy
Sheets("Folio").DLig.PasteSpecial
Application.CutCopyMode = False
Else
Sheets("Folio_Source").Cells("Ai:Hi").Copy
Application.WorksheetFunction.vlookup(Cell_source, Col_MaJ, 1, False).PasteSpecial
Application.CutCopyMode = False

i = i + 1
End If
Loop

End Sub

Etant jeune débutant dans le VBA, je me doute que cette macro n'est pas top. Je tombe toujours sur pleins d'erreur:
- Erreur définie par l'application ou par l'objet pour la définition des variable (Set...)
- impossible de lire la propriété vlookup

Pouvez vous m'aider?

Merci d'avance!

1 réponse

  1. Bonjour,

    Il faut définir la valeur de i avant d'utiliser la variable :
    Set Cell_source = Sheets("Folio_Source").Range("C" & i)  
    
    --
    Cordialement
    Patrice
    1. Bonjour!

      Merci pour votre réponse.
      Quand je place le i=5 avant la définition de la variable, le même message d'erreur apparaît...

      cordialement
    2. Avec :
      i = 5
      Set Cell_source = Sheets("Folio_Source").Range("C" & i) 
      le même message d'erreur ...
      Oui mais lequel exactement ?
      Selon le cas, plusieurs causes possibles :
      1 - La feuille "Folio_Source" n'existe pas
      2 - La feuille "Folio_Source" n'est pas une feuille de calcul
      3 - La feuille "Folio_Source" est protégée
      4 - ...

      Note : à partir d'Excel 2007, il est préférable de déclarer les numéros de ligne As Long
    3. Merci pour le conseil.

      Le message d'erreur est "variable objet ou variable de bloc with non définie" et il survivre la ligne Cell_source = Sheets("Folio_source").Range("C"&i).

      Vanitas