MaJ Tableau
Vanitas71
Messages postés
3
Statut
Membre
-
Patrice33740 Messages postés 8400 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8400 Date d'inscription Statut Membre Dernière intervention -
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!
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
-
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-
-
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 -
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- Re,
Il serait plus simple de répondre avec ton fichier,
débarassé des informations confidentielles s'il y lieu.
Déposes le fichier avec des commentaires explicatifs sur
https://www.cjoint.com/
et mets le lien obtenu dans ton prochain message.
Tuto : Comment utiliser C.joint.fr
-