XL 2010 Aide macro

safranien

XLDnaute Occasionnel
Bonsoir à tous,
je sollicite votre aide pour la création d'une macro. Je dispose d'un fichier déjà fort volumineux plein de formules et pour ce que j'ai besoin de faire, le réaliser par formule alourdit considérablement le fichier et les temps de calculs. C'est pourquoi je pense que le mieux est de passer par une macro. Le problème est que je n'y connais pas grand chose et j'ai beau avoir essayé de trouver des codes sur des forums, je n'arrive pas à obtenir le résultat voulu.

Dans le fichier joint:
_ onglet "export" dans lequel je viens copier coller des données issues d'un lgiciel (qui mériterait là aussi une macro mais on vera plus tard ^^)
_ onglet SAISIE : en sélectionnant un site, je souhaiterais que la macro trouve le site en question dans l'onglet "Export", et copie / colle (spécial, valeurs) les dates du 1er janvier jusqu'à la date correspondant à la dernière cellule comportant une valeur. Par exemple, pour le site 1, copier coller les dates du 01/01/2019 00:00 jusqu'au
02/08/2019 05:00 (car c'est à cette date qu'il y a la dernière valeur) en A12 de l'onglet "SAISIE" et copier / coller (spécial, valeurs) les données associées au site site 1 en B12 dans l'onglet "SAISIE". Cela m'est égal si il y a des cellules sans valeurs dans l'onglet "Export", je souhaite que ça copie/colle tout depuis le 1er janvier.

Ensuite, si je sélectionne un autre site, la macro efface toute les données de l'onglet "SAISIE" (de A12 à B52715) et on recommence le cycle éxpliqué précédemment.

Je dispose déjà d'un bouton "Actualiser les graphique" qui vient m'actualiser mes TCD et graphiques associés dans mon fichier d'origine. J'aimerais que la macro soit liée à ce bouton et que la macro se termine par l'actualisation des données.

Pour alléger le fichier, je n'ai pas mis toute l'année, mais les données sur une année complète iront jusqu'à la ligne 52571 (52715 pour les années bissextiles).

En espérant avoir été clair et que vous pourrez m'aider.

Merci d'avance et bonne soirée.
 

Pièces jointes

  • 1 - ANAEL - COLL33 - EXCEL DOWN.xlsm
    964.2 KB · Affichages: 14

Calvus

XLDnaute Barbatruc
Bonsoir,

Voilà avec ce que j'ai compris.
Je ne suis pas allé plus loin car je ne sais pas comment sont organisées tes données suivantes.

VB:
Sub Copie()
Dim f1 As Worksheet, f2 As Worksheet, i As Long, t1

Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Export")

t1 = f1.Range("A12:A" & f1.Range("A" & Rows.Count).End(xlUp).Row)

f2.Range("B12").Resize(UBound(t1), 1) = t1
End Sub

A+

Edit : le fichier ne passe pas, même compressé, trop gros.
Il suffit de mettre le code dans un module.
 
Dernière édition:

safranien

XLDnaute Occasionnel
arf quand je lance la macro il ne se passe rien. Je dois mal faire qqch. Je continue de chercher.

Ah si ça fonctionne mais ça fait l'inverse de ce que je souhaite ^^
La macro me copie les données de SAISIE vers Export alors que ça doit être l'inverse en fonction du site que je sélectionne dans l'onglet SAISIE. J'essaie de modifier le code moi-même mais je pige pas trop ah ah
 

safranien

XLDnaute Occasionnel
Pardon pour mon manque de clarté. Je vais essayer de mieux expliquer.

Dans l'onglet SAISIE, je sélectionne le site via le menu déroulant en A5. La macro doit effacer les données de A2 à B52715 de l'onglet SAISIE, trouver la correspondance de ce site dans l'onglet EXPORT et copier/coller dans l'onglet SAISIE en A12 les dates du 1er janvier à la date de la dernière valeur présente dans la colonne de l'installation + les valeurs associées en B12. Par exemple, pour le site 2, copier coller dans SAISIE les dates du 01/01/2019 00:00 au 08/01/2018 00:10 de l'onglet EXPORT et les valeurs associées. Quand je sélectionne un autre site, on efface tout et on recommence.
 

Calvus

XLDnaute Barbatruc
Re,

Dans l'onglet SAISIE, je sélectionne le site via le menu déroulant en A5.
Ça c'est nulle part dans le fichier...

Pour le reste, voici :
VB:
Sub Bouton1_Cliquer()
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh

End Sub
Sub Copie()
Dim f1 As Worksheet, f2 As Worksheet, i As Long, t2
Dim col As Range



Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Export")
f1.Range("A12:A" & f1.Range("A" & Rows.Count).End(xlUp).Row).ClearContents

If [A5] <> "" Then Set col = f2.Range("B6:D6").Find(f2.Range("A5"))
f1.[A5] = f2.[A5]

t2 = f2.Range(f2.Cells(12, col.Column), f2.Cells(Rows.Count, col.Column).End(xlUp))

f1.Range("A12").Resize(UBound(t2), 1) = t2
End Sub

A+
 

safranien

XLDnaute Occasionnel
Merci
Lorsque j'exécute la macro, j'ai une erreur déexécution 1004 impossible de modifier une cellule fusionnée avec cette ligne en jaune
f1.Range("A12:A" & f1.Range("A" & Rows.Count).End(xlUp).Row).ClearContents

J'ai modifié par
f1.Range("A12:b52715").ClearContents

Quand je relance la macro j'ai une autre erreur Erreur d'exécution 91 variable objet ou variable de bloc With non définie avec cette ligne en jaune
t2 = f2.Range(f2.Cells(12, col.Column), f2.Cells(Rows.Count, col.Column).End(xlUp))
 

Calvus

XLDnaute Barbatruc
Re,

Tu ne peux pas faire n'importe quoi !

Ce code fonctionne, à condition de ne plus y toucher, et de renseigner la cellule A5 de la seconde feuille.
Je te l'ai déjà fait remarquer dans le post précédent.

VB:
Sub Copie()
Dim f1 As Worksheet, f2 As Worksheet, i As Long, t2
Dim col As Range



Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Export")

f1.Range("A12:B65000").ClearContents
f1.Range("A2:B10").ClearContents

If f2.[A5] <> "" Then
Set col = f2.Range("B6:D6").Find(f2.Range("A5"))
Else: Exit Sub
End If

f1.[A5] = f2.[A5]

t2 = f2.Range(f2.Cells(12, col.Column), f2.Cells(Rows.Count, col.Column).End(xlUp))

f1.Range("A12").Resize(UBound(t2), 1) = t2
End Sub

En tout cas, avec ce code, tu n'auras plus d'erreur. Normalement..

A+
 

safranien

XLDnaute Occasionnel
re

je n'ai fait qu'un copié / collé de ton code et quand je l'ai lancée ça a beugué. J'ai ensuite cherché à modifier pour montrer que je m'intéresse et que je veux comprendre et pas jsute attendre la réponse les bras croisés. Je ne pense pas faire n'importe quoi. D'ailleurs je vois que dans ton nouveau code tu as repris le clear.content comme je l'avais écrit c'est que ce n'était pas si mal.

Du coup je viens d'essayer ton nouveau code sans rien toucher et j'ai toujours un beug. Voir PJ. Du coup je me hasarde à demander pourquoi
f1.Range("A2:B10").ClearContents de l'onglet SAISIE? Le choix de mon site se fait via le menu déroulant de la première feuille SAISIE (je l'ai bien marqué dans mon avant dernier message) et non pas dans la cellule A5 de l'onglet EXPORT.

Du coup, je me tente à modifier le code ainsi mais je n'obtiens pas le résultat attendu. Ca recopie que quelques dates dans le désordre, avec l'année = 1900,, à partir de la cellule A26 au lieu de A12 et il n'y a pas les valeurs dans la colonne B. Voir PJ.

Sub Copie()
Dim f1 As Worksheet, f2 As Worksheet, i As Long, t2
Dim col As Range



Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Export")

f1.Range("A12:B65000").ClearContents

If f1.[A5] <> "" Then
Set col = f2.Range("B6:D6").Find(f1.Range("A5"))
Else: Exit Sub
End If

t2 = f2.Range(f2.Cells(12, col.Column), f2.Cells(Rows.Count, col.Column).End(xlUp))

f1.Range("A12").Resize(UBound(t2), 1) = t2
End Sub
 

Pièces jointes

  • resultat-1.jpg
    resultat-1.jpg
    215.9 KB · Affichages: 21
  • erreur 1.2.jpg
    erreur 1.2.jpg
    131.9 KB · Affichages: 18
  • erreur 1.1.jpg
    erreur 1.1.jpg
    160.7 KB · Affichages: 18
  • resultat attendu - site 1.jpg
    resultat attendu - site 1.jpg
    196.5 KB · Affichages: 17
  • resultat attendu - site 2.jpg
    resultat attendu - site 2.jpg
    213.5 KB · Affichages: 20
Dernière édition:

Calvus

XLDnaute Barbatruc
Re,

Vba n'aime pas les cellules fusionnées.
J'ai donc défusionnée tes cellules.

Voici le fichier réduit.
Aucun problème ici.


Le choix de mon site se fait via le menu déroulant de la première feuille SAISIE (je l'ai bien marqué dans mon avant dernier message) et non pas dans la cellule A5 de l'onglet EXPORT.

Pardon mais je ne suis pas devin. Comme je te l'ai dit, aucun menu déroulant dans le fichier que tu as envoyé. Comme la cellule A5 de la feuille export est en jaune, je pensais que c'était celle là.
Alors si ce n'est toujours pas ça, renvoie un petit fichier avec toutes les données qu'il faut traiter.

pourquoi
f1.Range("A2:B10").ClearContents de l'onglet SAISIE?

Parce que j'avais lu A1. Erreur de ma part.

D'ailleurs je vois que dans ton nouveau code tu as repris le clear.content comme je l'avais écrit c'est que ce n'était pas si mal.

Ce n'est pas le plus propre, mais comme tu as des cellules vides et manifestement des données qui ne sont pas sur ton fichier, j'au fait au plus sûr. Mais je n'écrirais jamais un code figé comme celui-ci si c'était pour moi.

A+
 

Pièces jointes

  • 1 - ANAEL - COLL33 - EXCEL DOWN.xlsm
    989.4 KB · Affichages: 3

safranien

XLDnaute Occasionnel
re

on a du mal à se comprendre mais on avance et je t'en remercie. Effectivement dans mon premier message j'avais omis de préciser où se trouvait mon menu déroulant mais je l'ai fait par la suite. En A5 dans l'onglet SAISIE. La même cellule que tu as défusionnée.

Ci-joint le fichier qui je l'espère est plus clair. Ton code me recopie les valeurs trouvées en colonne A de l'onglet SAISIE alors qu 'il faudrait les recopier dans la colonne B de l'onglet SAISIE (ayant comme titre de colonne VALEUR). J'ai modifié le code pour que ça colle les valeurs au bon endroit.
Il ne reste plus qu'à coller les dates qui correspondent aux valeurs collée dans la colonne A de l'onglet SAISIE et je ne t'embêterai plus. J'ai également modifié le code pour que ça aille chercher le site dans le menu déroulant de l'onglet SAISIE en A5.

Dans l'onglet Export, la celulle que j'avais laissée colorée était à la base pour saisir l'année pour qu'ensuite ça m'incrémente toutes les dates par formules. J'avais supprimé pour alléger le fichier mais je remets comme c'était.

VB:
Sub Copie()
Dim f1 As Worksheet, f2 As Worksheet, i As Long, t2
Dim col As Range



Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Export")

f1.Range("A12:B65000").ClearContents

If f1.[A5] <> "" Then
Set col = f2.Range("B6:D6").Find(f1.Range("A5"))
Else: Exit Sub
End If


t2 = f2.Range(f2.Cells(12, col.Column), f2.Cells(Rows.Count, col.Column).End(xlUp))

f1.Range("B12").Resize(UBound(t2), 1) = t2
End Sub
 

Pièces jointes

  • 1 - ANAEL - COLL33 - EXCEL DOWN (4).xlsm
    996.3 KB · Affichages: 3
Dernière édition:

Calvus

XLDnaute Barbatruc
Re,

Oui en effet, on a du mal à se comprendre.
Toujours pas de menu déroulant dans le fichier..

Alors si c'est ça, regarde si ça te convient.

VB:
Sub Copie()
Dim f1 As Worksheet, f2 As Worksheet, i As Long, t1, t2
Dim col As Range

Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Export")

f1.Range("A12:B65000").ClearContents

If f1.[A5] <> "" Then
Set col = f2.Range("B6:D6").Find(f1.Range("A5"))
Else: Exit Sub
End If

t1 = f2.Range(f2.Cells(12, 1), f2.Cells(Rows.Count, 1).End(xlUp))
t2 = f2.Range(f2.Cells(12, col.Column), f2.Cells(Rows.Count, col.Column).End(xlUp))


f1.Range("A12").Resize(UBound(t1), 1) = t1
f1.Range("B12").Resize(UBound(t2), 1) = t2
End Sub

Un petit conseil, à l'avenir essaie d'être plus concis et de mettre un petit exemple clair, avec les résultats souhaités sur le fichier.
C'est peut être évident pour toi qui travaille sur ton fichier, mais pense à celui qui débarque et lit : cellule A12 de l'onglet Saisie qui va copier la cellule B18 de l'onglet export pour coller en cellule f22 de saisie si la cellule A15 etc, etc, etc...

A+
 

Pièces jointes

  • Anael.xlsm
    972.6 KB · Affichages: 3

safranien

XLDnaute Occasionnel
Bonjour Calvus

merci pour ce nouveau retour. J'essaie de faire au mieux. La plupart des contributeurs demandent des explications détaillées ce que j'ai essayé de faire. Je travaillerai encore cela. Si je peux me permettre, de ton côté, prends un peu plus le temps de lire aussi. Dans le fichier que tu m'as retourné il y a bien le menu déroulant. Ce fameux menu pour lequel je dis depuis 4 messages qu'il se trouve en cellule A5 de l'onglet SAISIE. Je ne sais pas comment être plus concis et précis à la fois...
J'ai complété ensuite avec des captures d'écran pour les résultats attendus pour chacun des sites. Là encore je ne sais pas comment être plus concis et précis mais j'aurais peut etre du compléter avec du texte mais du coup je ne voulais pas surcharger le message pour pas embrouiller, pensant qu'une image valait mille mots. Dur dur... Je montre que pour le choix d'un site, je cherche à obtenir les valeurs du 01/01/2019 00:00 jusqu'à la dernière valeur saisie et en ce qui concerne la recopie des dates, je ne souhaite pas recopier toutes les dates mais bien les dates qui correspondent à la plage de valeurs recopiées. C'est à dire que par exemple, pour le site 1, la dernière valeur étant 17 au 01/01/2019 10:10, la recopie des dates dans l'onglet SAISIE doit être du 01/01/2019 00:00 au 01/01/2019 10:10 et pas au delà. Pour le site 2, la recopie des dates doit s'arrêter au 01/01/2019 09:10 et pour le site 3, au 01/01/2019 07:20.
Je comprendrais que tu en aies marre mais ça serait dommage de s'arrêter si près du but ;)
 

Discussions similaires

M
Réponses
9
Affichages
449
Maikales
M
Réponses
13
Affichages
339

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 942
Membres
101 849
dernier inscrit
florentMIG