Recopier données sous condition

Bonjour à tous,

je me casse un peu les dents sur un problème dans Excel.

Je ne maîtrise pas du tout le VBA donc j'essaie au travers de formules mais en vain.

J'ai un fichier nommé 2017.xls qui est structuré avec des onglets numérotés (1.2.3.4....)

J'ai un autre fichier nommé 2016 ayant la structure des onglets quasi identique (certains numéros d'onglet sont supprimé dans le fichier 2017)

j'aimerais automatiquement reprendre la valeur de la cellule G7 du fichier 2016 et que celle-ci soit copiée dans le fichier 2017 au bon onglet dans la cellule G2.

Vu le nombre d'onglet, je trouve ça fastidieux de passer par un =(chemin de la cellule en 2016)

Merci d'avance

Bonjour,

Tu as tes fichiers (avec données anonymes) pour nous aiguiller un peu? Pour adapter directement le code à ton cas, vu que tu ne connais pas le VBA que tu ne sois pas trop perdu

Bonjour,

voici le fichier demandé.

Donc pour être explicite, mes onglets portent des numéros et sont dans le fichier 2018.

Je prend l'onglet 447150 :

En case G3, je dois reporter le résultat de l'année précédente (donc 2017) mais qui se trouve dans un autre fichier identique appelé 2017. Le résultat que je veux copier se trouve donc dans l'onglet 447150 du fichier 2017.

Je voudrais automatiser le report pour que dans chaque onglet en 2018, la cellule G3 soit remplie avec la valeur de la cellule g7 des onglets correspondant de 2017.

Je pensais pouvoir m'en sortir sans VBA??

Merci d'avoir déjà répondu

152018exemple.xlsx (204.19 Ko)

bonjour

d'où viennent tous ces onglets ?

j'ai déjà vu ça parce qu'un patron ignare en Excel avait demandé à un programmeur (très heureux de facturer des heures de codage) de créer des exports de son logiciel de gestion d'entreprise. Exports "comme on faisait du temps du papier+crayon +calculette).

il a suffit de virer ces exports et de travailler sur un unique export de la base (ou des 3 bases) en csv ou xls (ou i, plus de 50 000 lignes pour faciliter le traitement des données.

Bonjour

En préambule, pour l'exemple,il est important que les fichiers soient dans le même répertoire.

Tu peux faire avec un Code dans ThisWorkBook qui s'activera à l'ouverture du fichier:

Private Sub Workbook_Open()
Dim i As Byte
Application.ScreenUpdating = False
For i = 1 To Worksheets.Count
Worksheets(i).Activate
Range("G3").FormulaR1C1 = _
        "=""=""&""'[2017.xlsx]""&MID(CELL(""nomfichier"",R[-2]C[-6]),SEARCH(""]"",CELL(""nomfichier"",R[-2]C[-6]))+1,31)&""'!$G$7"""
[G3] = Range("G3").Value
Next i
End Sub

ou un Code quasi identique dans un module

Sub MAJ()
Dim i As Byte
Application.ScreenUpdating = False
For i = 1 To Worksheets.Count
Worksheets(i).Activate
Range("G3").FormulaR1C1 = _
        "=""=""&""'[2017.xlsx]""&MID(CELL(""nomfichier"",R[-2]C[-6]),SEARCH(""]"",CELL(""nomfichier"",R[-2]C[-6]))+1,31)&""'!$G$7"""
[G3] = Range("G3").Value
Next i
End Sub

Les deux sont dans le fichier pour tester.

Cordialement

112018exemple.xlsm (231.78 Ko)
jmd a écrit :

bonjour

d'où viennent tous ces onglets ?

j'ai déjà vu ça parce qu'un patron ignare en Excel avait demandé à un programmeur (très heureux de facturer des heures de codage) de créer des exports de son logiciel de gestion d'entreprise. Exports "comme on faisait du temps du papier+crayon +calculette).

il a suffit de virer ces exports et de travailler sur un unique export de la base (ou des 3 bases) en csv ou xls (ou i, plus de 50 000 lignes pour faciliter le traitement des données.

Je tairais l'endroit où je bosse mais en résumé ils travaillent en mode "papier informatisé"

Donc ils impriment les données puis les recopient manuellement dans le fichiers Excel. J'ai fait la demande pour avoir les données de source en version informatisée. Ces données viennent de 3 bases de données distinctes et je dois les regrouper pour ensuite envoyer les détails aux clients. Donc plutôt que de passer 2 jours par mois à encoder ces données, je pense automatiser les tableaux Excel. Récupérer les données depuis les bases, ça semble aisé mais je me cassais les dents sur le transfert des données d'une année à l'autre.

Merci pour ces solutions, je vais tester tout ça

Re bonjour,

Je viens de tester le code dans un module. J'ai juste adapté le nom du fichier source.

Cela donne comme sur la capture annexée :/

capture

Bonjour

J'ai mis dans mon code initial 2017.xlsx

et en relisant ton post, je vois 2017.xls

enlève le x final dans les 2 codes (Module et ThisWorkBook)

J'ai testé les 2 options sans rencontrer de problème.

Cordialement

92018exemple.xlsm (233.34 Ko)

J'ai modifié le fichier source comme ceci :

Sub MAJ()

Dim i As Byte

Application.ScreenUpdating = False

For i = 1 To Worksheets.Count

Worksheets(i).Activate

Range("G3").FormulaR1C1 = _

"=""=""&""'[2017controleGLparastat.xltm]""&MID(CELL(""nomfichier"",R[-2]C[-6]),SEARCH(""]"",CELL(""nomfichier"",R[-2]C[-6]))+1,31)&""'!$G$7"""

[G3] = Range("G3").Value

Next i

End Sub

Bonjour

J'ai modifié le fichier source comme ceci :

Oui, et....?

Marche ou marche pas???

Cordialement

hé bien hier ça ne voulait pas.

je viens de tester et ça marche

merci beaucoup


J'ai parlé trop vite...

ça me met "#valeur" dans toutes les cases :/


J'ai trouvé,

quand j'ouvre le document de référence dans la formule, il le renomme automatiquement en lui mettant un petit 1 au bout du nom.

Je ne sais pas si ce phénomène est normal?

Bonjour

Toi seul étant détenteur du fichier source, il n'est pas possible de t'aider plus avant.

De plus, en te lisant, un coup "ça marche", un coup non.

Un code fait toujours les mêmes actions...

Cordialement

Maintenant il me met une erreur 1004 : erreur définie par l'application ou par l'objet

capture
Rechercher des sujets similaires à "recopier donnees condition"