Mettre a jour et completer un classeur VBA EXCEL
ney_ney25
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Cette demande est dédiées a toutes âmes charitable !
N'ayant jamais eu l'occasion de travailler sur le langage VBA, j'ai malgré tout, tenté d'essayé de comprendre mais je dois avoué que les macros et moi maintenant ça n'est pas vraiment une histoire d'amour.. :p n tant qu'apprenti on ma demandé de faire une macro qui permettrait de mettre a jour un fichier xlsm en local via un autre fichier excel qui, lui , est exporté depuis une base de donnée mais également de rajouter les nouvelles lignes à la suite dans mon fichier en local.
Je m'explique, mon fichier en local contient des "tickets incidents" qui datent d'il y a plusieurs mois. Et tous les lundi je dois :
1) faire un export de la base de donnée
2) rajouter à la suite de mon fichier en local ( à partir de la première ligne vierge) les nouveau ticket qui ont été créés la semaine précédente
3) mettre ajour les autres tickets si des informations ont été modifiées ( ex : si un ticket passe d'un état "en cours" à un état "clos" )
les étapes 2 et 3 seraient les fonctions que devrait faire ma macro ..
J'avais pensé de prendre le numéro d'id existant pour chaque ticket comme référence pour comparer etc ..
J'espère avoir été assez clair sinon n'hésité pas :)
merci d'avance vraiment à tous ceux qui prendront le temps de me répondre ! je compte un peu beaucoup sur votre aide ...
voila un "debut " pas forcement juste de la macro présente sur mon fichier en local ..
Option Explicit
Sub Comparaison()
'Evite de voir les opérations intermédiaire sur les fichiers
Application.ScreenUpdating = False
'déclarations des variables
Dim i As Integer
Dim j As Integer
Dim Trouve As Integer
Dim nom_fichier As String
Dim chemin_fichier As String
i = 2 'initialisation du compteur à 2 car la ligne 1 contient l'en-tête de chaque donnée
chemin_fichier = "C:\Users\MOHA\Desktop\macro\"
nom_fichier = "export.xlsm"
Workbooks.Open chemin_fichier & nom_fichier
While (Workbooks("local.xlsm").Sheets("Feuil1").Cells(i, 1).Value <> "") 'tant que dans le fichier local la cellule en (ligne i, colonne A) n'est pas vide
j = 2
Trouve = 0 'cette variable sert d'indicateur si c'est à 0 on a rien trouvé ou 1 on a trouvé la cellule correspondante
While (Workbooks("export.xlsm").Sheets("Feuil1").Cells(j, 1).Value <> "") And (Trouve = 0)
'si la cellule du fichier export correspond à celle de local alors
If (Workbooks("export.xlsm").Sheets("Feuil1").Cells(j, 1).Value = _
Workbooks("local.xlsm").Sheets("Feuil1").Cells(i, 1).Value) Then
Trouve = 1
'On passe à la ligne suivante de export
j = j + 1
Else
'On copie le contenu à la ligne actuelle dans une nouvelle ligne
End If
Wend
i = i + 1
Wend
End Sub
Merci d'avanceeeeeeeeeeeeeeeeeee :)
Cette demande est dédiées a toutes âmes charitable !
N'ayant jamais eu l'occasion de travailler sur le langage VBA, j'ai malgré tout, tenté d'essayé de comprendre mais je dois avoué que les macros et moi maintenant ça n'est pas vraiment une histoire d'amour.. :p n tant qu'apprenti on ma demandé de faire une macro qui permettrait de mettre a jour un fichier xlsm en local via un autre fichier excel qui, lui , est exporté depuis une base de donnée mais également de rajouter les nouvelles lignes à la suite dans mon fichier en local.
Je m'explique, mon fichier en local contient des "tickets incidents" qui datent d'il y a plusieurs mois. Et tous les lundi je dois :
1) faire un export de la base de donnée
2) rajouter à la suite de mon fichier en local ( à partir de la première ligne vierge) les nouveau ticket qui ont été créés la semaine précédente
3) mettre ajour les autres tickets si des informations ont été modifiées ( ex : si un ticket passe d'un état "en cours" à un état "clos" )
les étapes 2 et 3 seraient les fonctions que devrait faire ma macro ..
J'avais pensé de prendre le numéro d'id existant pour chaque ticket comme référence pour comparer etc ..
J'espère avoir été assez clair sinon n'hésité pas :)
merci d'avance vraiment à tous ceux qui prendront le temps de me répondre ! je compte un peu beaucoup sur votre aide ...
voila un "debut " pas forcement juste de la macro présente sur mon fichier en local ..
Option Explicit
Sub Comparaison()
'Evite de voir les opérations intermédiaire sur les fichiers
Application.ScreenUpdating = False
'déclarations des variables
Dim i As Integer
Dim j As Integer
Dim Trouve As Integer
Dim nom_fichier As String
Dim chemin_fichier As String
i = 2 'initialisation du compteur à 2 car la ligne 1 contient l'en-tête de chaque donnée
chemin_fichier = "C:\Users\MOHA\Desktop\macro\"
nom_fichier = "export.xlsm"
Workbooks.Open chemin_fichier & nom_fichier
While (Workbooks("local.xlsm").Sheets("Feuil1").Cells(i, 1).Value <> "") 'tant que dans le fichier local la cellule en (ligne i, colonne A) n'est pas vide
j = 2
Trouve = 0 'cette variable sert d'indicateur si c'est à 0 on a rien trouvé ou 1 on a trouvé la cellule correspondante
While (Workbooks("export.xlsm").Sheets("Feuil1").Cells(j, 1).Value <> "") And (Trouve = 0)
'si la cellule du fichier export correspond à celle de local alors
If (Workbooks("export.xlsm").Sheets("Feuil1").Cells(j, 1).Value = _
Workbooks("local.xlsm").Sheets("Feuil1").Cells(i, 1).Value) Then
Trouve = 1
'On passe à la ligne suivante de export
j = j + 1
Else
'On copie le contenu à la ligne actuelle dans une nouvelle ligne
End If
Wend
i = i + 1
Wend
End Sub
Merci d'avanceeeeeeeeeeeeeeeeeee :)
A voir également:
- Mettre a jour et completer un classeur VBA EXCEL
- Word et excel gratuit - Guide
- Mettre a jour chrome - Accueil - Applications & Logiciels
- Liste déroulante excel - Guide
- Mise a jour windows 10 - Accueil - Mise à jour
- Mettre a jour chromecast - Accueil - Guide TV et vidéo
2 réponses
Bonjour,
Au lieu de parcourir le fichier export, je ferai plutot une copie de l'onglet feuil1 dans local.xlm, pour eviter les aller/retour classeurs
question:
Peut-il y avoir de nouveaux tickets ouverts dans export avant le dernier inscrit dans local ?????
A+
Au lieu de parcourir le fichier export, je ferai plutot une copie de l'onglet feuil1 dans local.xlm, pour eviter les aller/retour classeurs
'recherche onglet export et suppression
For Each wh In Worksheets
If wh.Name = "export" Then
Application.DisplayAlerts = False
Sheets("export").Delete
Application.DisplayAlerts = True
Exit For
End If
Next
chemin_fichier = "C:\Users\MOHA\Desktop\macro\"
nom_fichier = "export.xlsm"
Workbooks.Open chemin_fichier & nom_fichier
Sheets("Feuil1").Copy Before:=Workbooks("local.xlsm").Sheets(1)
ActiveSheet.Name = "Export"
Windows(nom_fichier).Activate
ActiveWorkbook.Close False
question:
Peut-il y avoir de nouveaux tickets ouverts dans export avant le dernier inscrit dans local ?????
A+
Re,
le code que j'ai ecrit permet de:
_ supprimer l'onglet export du fichier local.xlsm s'il est present
_ copier l'onglet feuil1 du fichier export.xlsm dans le fichier local.xlsm et de le nommer export ceci afin de faciliter la suite de la programmation
Peut-il y avoir de nouveaux tickets ouverts dans export avant le dernier inscrit dans local ????? Dans le fichier local.xlsm onglet feuil1, si vous avez deja des tickets enregistres, est-ce que dans le fichier export.xlsm suivant, il y aura des tickets enregitres avant le dernier de l'onglet feuil1 de local.xlsm
ou
comment sont enregistres les tickets dans la feuil1 de export, par chronologie de date ou par chronologie des tickets (qui peut etre la meme que les dates) ou portnawak
le code que j'ai ecrit permet de:
_ supprimer l'onglet export du fichier local.xlsm s'il est present
_ copier l'onglet feuil1 du fichier export.xlsm dans le fichier local.xlsm et de le nommer export ceci afin de faciliter la suite de la programmation
Peut-il y avoir de nouveaux tickets ouverts dans export avant le dernier inscrit dans local ????? Dans le fichier local.xlsm onglet feuil1, si vous avez deja des tickets enregistres, est-ce que dans le fichier export.xlsm suivant, il y aura des tickets enregitres avant le dernier de l'onglet feuil1 de local.xlsm
ou
comment sont enregistres les tickets dans la feuil1 de export, par chronologie de date ou par chronologie des tickets (qui peut etre la meme que les dates) ou portnawak
Re,
l'onglet export ne servira qu'a faire la recherche des tickets nouveaux a transferer et a la mise a jour des status des tickets, il pourra meme etre supprimer en fin de traitement. L'objet de cette manip, c'est de n'avoir qu'un seul fichier a tester, rien a voir avec ce que vous avez ecrit sur ce sujet
l'onglet export ne servira qu'a faire la recherche des tickets nouveaux a transferer et a la mise a jour des status des tickets, il pourra meme etre supprimer en fin de traitement. L'objet de cette manip, c'est de n'avoir qu'un seul fichier a tester, rien a voir avec ce que vous avez ecrit sur ce sujet
je voudrais tout d'abord te remercier pour m'avoir répondu aussi rapidement, t'assure vraiment :)
je voudrais s'il te plait si possible que tu m'explique un peu ton code car j'ai pas tous compris, pour pas dire rien ... je suis vraiment débutant en vba .. ton code permettrait le copier-coller des nouveau ticket à la suite de mon fichier en local ainsi que la mise a jour des tickets existant ?
J'ai vu qu'il y avait une suppression ??
et je n'ai pas vraiment compris ta question .. peut tu m'eclairer STP :)))
merci d'avance et merci encore pour ta réponse !
A+