Sinon tu fais un fichier exemple avec des noms bidons genre dupont durand, etc...
Sinon tu fais un fichier exemple avec des noms bidons genre dupont durand, etc...
Pour ton message d'erreur : https://annalear.ca/2010/06/10/why-e...csv-is-a-sylk/
Bonjour, j'ai besoin d'utiliser Excel pour une tache très répétitive que j'aimerais automatiser.
J'ai des tableaux contenant chacun un titre et une série de nombre dont je dois diviser avec le premier nombre de la série. Ensuite je créé un graphe avec ces données.
Puis vu que j'ai quelques centaines de tableaux de ce type qui se suivent sur la même feuille avec lesquels je dois faire la même chose, un raccourci clavier ça me serait pratique.
C'est un truc de ce genre.
Je chercherais à avoir une macro qui me permette de générer le graphe en sélectionnant une plage de données (le deux premières colonnes).
Merci d'avance.
Tu pourrais filer un fichier excel bidon de 1 ou 2 pages que je regarde les datas pour te faire ce qu'il faut si j'y arrive ?
Hello !
Déterrage de topic
J'ai un truc super relou à faire à mon travail, ça consiste à déclarer les paies, pour le service paie..
En gros je leurs remplis un fichier où je note chaque absence, chaque congés, le nombre de dimanche travaillés, le nombre de tickets restau, et ça pour 20 personnes.
Le truc ULTRA chiant quoi.
J'ai donc mis pas mal de temps pour appréhender des macros simples car je suis plutôt dans la catégorie "débutant j'écris un bout de code et je sers les fesses pour que ça fonctionne" (cf questions posées sur la page précédente), mais je progresse un peu, et je suis arrivé avec ceci :
Ca copie colle les données de 3 plannings dans le fameux fichiers atroce à remplir.
Je fais un collage spécial "valeurs", d'où leCode:Sub maj() 'on assigne les variables Dim dim_debut_bx As String, dim_debut_cv As String, dim_debut_tlse As String Dim dim_fin_bx As String, dim_fin_cv As String, dim_fin_tlse As String Dim tr_debut_bx As String, tr_debut_cv As String, tr_debut_tlse As String Dim tr_fin_bx As String, tr_fin_cv As String, tr_fin_tlse As String Dim fastpaie_copier_debut_bx As String, fastpaie_copier_debut_cv As String, fastpaie_copier_debut_tlse As String Dim fastpaie_copier_fin_bx As String, fastpaie_copier_fin_cv As String, fastpaie_copier_fin_tlse As String Dim fastpaie_coller_bx As String, fastpaie_coller_cv As String, fastpaie_coller_tlse As String Dim fastpaie_coller_dim_bx As String, fastpaie_coller_dim_cv As String, fasptaie_coller_dim_tlse As String Dim fastpaie_coller_tr_bx As String, fastpaie_coller_tr_cv As String, fastpie_coller_tr_tlse As String dim_debut_bx = Worksheets("miseajour").Range("B3").Value dim_debut_cv = Worksheets("miseajour").Range("D3").Value dim_debut_tlse = Worksheets("miseajour").Range("C3").Value dim_fin_bx = Worksheets("miseajour").Range("B4").Value dim_fin_cv = Worksheets("miseajour").Range("D4").Value dim_fin_tlse = Worksheets("miseajour").Range("C4").Value tr_debut_bx = Worksheets("miseajour").Range("B5").Value tr_debut_cv = Worksheets("miseajour").Range("D5").Value tr_debut_tlse = Worksheets("miseajour").Range("C5").Value tr_fin_bx = Worksheets("miseajour").Range("B6").Value tr_fin_cv = Worksheets("miseajour").Range("D6").Value tr_fin_tlse = Worksheets("miseajour").Range("C6").Value fastpaie_copier_debut_bx = Worksheets("miseajour").Range("B7").Value fastpaie_copier_debut_cv = Worksheets("miseajour").Range("D7").Value fastpaie_copier_debut_tlse = Worksheets("miseajour").Range("C7").Value fastpaie_copier_fin_bx = Worksheets("miseajour").Range("B8").Value fastpaie_copier_fin_cv = Worksheets("miseajour").Range("D8").Value fastpaie_copier_fin_tlse = Worksheets("miseajour").Range("C8").Value fastpaie_coller_bx = Worksheets("miseajour").Range("B9").Value fastpaie_coller_cv = Worksheets("miseajour").Range("D9").Value fastpaie_coller_tlse = Worksheets("miseajour").Range("C9").Value fastpaie_coller_dim_bx = Worksheets("miseajour").Range("B10").Value fastpaie_coller_dim_cv = Worksheets("miseajour").Range("D10").Value fastpaie_coller_dim_tlse = Worksheets("miseajour").Range("C10").Value fastpaie_coller_tr_bx = Worksheets("miseajour").Range("B11").Value fastpaie_coller_tr_cv = Worksheets("miseajour").Range("D11").Value fastpaie_coller_tr_tlse = Worksheets("miseajour").Range("C11").Value 'on ouvre les différents fichier et on leur assigne des noms MsgBox "Ouvrir le planning de Bordeaux" Bx = Application.GetOpenFilename("Classeurs Excel,*.xlsm") If Bx = False Then Exit Sub Workbooks.Open fileName:=Bx Dim Bordeaux As String Bordeaux = ActiveWorkbook.Name 'toulouse MsgBox "Ouvrir le planning de Toulouse" TLS = Application.GetOpenFilename("Classeurs Excel,*.xlsm") If TLS = False Then Exit Sub Workbooks.Open fileName:=TLS Dim Toulouse As String Toulouse = ActiveWorkbook.Name 'charente vendée MsgBox "Ouvrir le planning de Charente Vendée" CV = Application.GetOpenFilename("Classeurs Excel,*.xlsm") If CV = False Then Exit Sub Workbooks.Open fileName:=CV Dim Charente As String Charente = ActiveWorkbook.Name 'fastpaie MsgBox "Ouvrir le Fastpaie" Fastp = Application.GetOpenFilename("Classeurs Excel,*.xls") If Fastp = False Then Exit Sub Workbooks.Open fileName:=Fastp Dim Fastpaie As String Fastpaie = ActiveWorkbook.Name 'copier coller des données du planning de bordeaux 'planning Windows(Bordeaux).Activate Sheets(2).Select Range(fastpaie_copier_debut_bx, fastpaie_copier_fin_bx).Copy Windows(Fastpaie).Activate Sheets(1).Select Range(fastpaie_coller_bx).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'prime de dimanche Windows(Bordeaux).Activate Range(dim_debut_bx, dim_fin_bx).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_dim_bx).Select ActiveSheet.Paste Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'tickets restaurant Windows(Bordeaux).Activate Range(tr_debut_bx, tr_fin_bx).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_tr_bx).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'copier coller des données du planning de charente vendée 'planning Windows(Charente).Activate Sheets(2).Select Range(fastpaie_copier_debut_cv, fastpaie_copier_fin_cv).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_cv).Select ActiveSheet.Paste Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'prime de dimanche Windows(Charente).Activate Range(dim_debut_cv, dim_fin_cv).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_dim_cv).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'tickets restaurant Windows(Charente).Activate Range(tr_debut_cv, tr_fin_cv).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_tr_cv).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'copier coller des données du planning de toulouse 'planning Windows(Toulouse).Activate Sheets(2).Select Range(fastpaie_copier_debut_tlse, fastpaie_copier_fin_tlse).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_tlse).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'prime de dimanche Windows(Toulouse).Activate Range(dim_debut_tlse, dim_fin_tlse).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_dim_tlse).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'tickets restaurant Windows(Toulouse).Activate Range(tr_debut_tlse, tr_fin_tlse).Copy Windows(Fastpaie).Activate Range(fastpaie_coller_tr_tlse).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False MsgBox "Mise à jour du Fastpaie effectuée !" End Sub
J'ai trouvé ça en utilisant l'enregistreur de macros, mais je pense qu'il doit y avoir un code moins dégueulasse qui existe non ?Code:Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
Idem pour tout le processus pour coller des données :
est-ce qu'il n'y a pas moyen d'alléger le code ?Code:Windows(Fastpaie).Activate Sheets(1).Select Range(fastpaie_coller_bx).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
Je demande car le pc sur lequel je fais ça n'est pas une foudre de guerre et prend cher quand il ouvre les fichiers plannings qui contiennent un bon millier de fonctions si en tout genre..
Egalement à la fin j'aimerai bien fermer mes 3 fichiers plannings Bordeaux, Charente, et Toulouse, et que ça l'enregistre pas, mais là c'est pas juste du copier coller donc je sais pas faire
Si quelqu'un pouvait me donner le petit bout de code qui fait ça !
Dernière modification par dingo47 ; 27/07/2017 à 12h31.
La fonction pour clore c'est Workbooks.close de mémoire.
Perso je pense que tu devrais envisager de le faire différemment si la machine a du mal.
Là tu ouvres tout, tu copies tout et tu colles tout. Perso je ferais :
-Ouverture d'un fichier
-Copier
-Coller
-Fermeture du fichier
en boucle.
Si tu veux un coup de main, ça serait pas mal de fournir des fichiers exemples (avec des noms / montants modifiés) si tu veux bien
Ah oui je n'avais pas pensé à ça !! Du coup j'ai mis la workbooks(nomdufichier).close savechanges:=false à la fin de chaque cycle de copier/coller et ça a bien accéléré les choses ! Dans le même esprit au lieu d'ouvrir tous les fichiers au début, je les ouvre au fur et à mesure.
merci
Je note ta proposition mais ce n'est pas nécessaire je suis à peu près arrivé à ce que je voulais. Après y'aurait toujours des améliorations à apporter, du genre faire détecter à excel le nombre de collaborateurs par région pour qu'il définisse tout seul les valeurs des cellules qui me servent à paramétrer le truc (B3 à D11); mais bon ça me va bien comme c'est !
Dernière modification par dingo47 ; 27/07/2017 à 14h07.
Content d'avoir pu aider
A savoir, que tu as moyen de passer par des sources de données (tes fichiers sources), récupérer ses données et les insérer dans l'Excel que tu souhaites (sans passer par l'émulation du copié-collé).
ah ? bien ça !! tu aurais une documentation ou un tutoriel à me conseiller sur le sujet ? Après j'arrive à peu près à me débrouiller en général
Regarde ce genre de liens :
https://officetricks.com/different-m...al-excel-file/
ou ça :
https://stackoverflow.com/questions/...containing-vba (en virant le côté ouverture du fichier manuelle)
Logiquement ça devrait être BEAUCOUP plus rapide qu'en faisant ta technique de copié-collé
Sympa, donc si je comprends bien.. Suffit que j'adapte ça à mon cas
Code:Sub VBA_Read_External_Workbook() '''''Define Object for Target Workbook Dim Target_Workbook As Workbook Dim Source_Workbook As Workbook Dim Target_Path As String '''''Assign the Workbook File Name along with its Path '''''Change path of the Target File name Target_Path = "D:\Sample.xlsx" Set Target_Workbook = Workbooks.Open(Target_Path) Set Source_Workbook = ThisWorkbook '''''With Target_Workbook object now, it is possible to pull any data from it '''''Read Data from Target File Target_Data = Target_Workbook.Sheets(1).Cells(1, 1) Source_Workbook.Sheets(1).Cells(1, 1) = Target_Data '''''Update Target File Source_data = Source_Workbook.Sheets(1).Cells(3, 1) Target_Workbook.Sheets(1).Cells(2, 1) = Source_data '''''Close Target Workbook Source_Workbook.Save Target_Workbook.Save Target_Workbook.Close False '''''Process Completed MsgBox "Task Completed" End Sub
Je le ferai dans le sens inverse : Tu ouvres ton Excel de destination (Target_Workbook) et tes sources sont les 3 fichiers de planning
Parce que sinon, ça veut dire qu'il faut que tu ouvres les 3 fichiers et que tu lances 3 fois la macro.
Sinon, en passant par ODBC c'est aussi plutôt pas mal, parce que tu n'as plus à te soucier de vérifier que t'es à la dernière ligne de ton fichier, etc.
Dernière modification par deathdigger ; 29/07/2017 à 09h14.
Arrêtez tout, j'ai trouvé mieux qu'Excel. Son clone de LibreOffice, en version 5.
Mais je crois qu'ils prévoient d'ajouter l'arithmétique dans la version 6.
C'est une notation foireuse A$2 non ?
Après ils auraient pu faire un effort pour mettre une erreur...
Non mais je ne comprends toujours pas pourquoi toutes les sociétés du monde entier continuent à utiliser la bouze de chez Micr0$0ft alors que y'a des alternatives gratos
Sinon, j'ai testé Excel version web (office online), et c'est disponible pour ceux qui n'ont pas office (faut juste un compte MS). C'est top, et ça évite de réapprendre des formules comme avec Google Sheets.
J'ai toujours écrit mes formules avec des références absolues comme ça dans tous les tableurs que j'ai utilisé. C'est foireux ?
J'ai l'impression que le bug est dans le code qui détermine ce qu'il faut recalculer, qui se vautre quand il a des intervalles mélangeant une référence absolue et une référence relative.
La notation absolue c'est $A$2, pas A$2 si ma mémoire ne me joue pas des tours.
$A$2 pour fixer à la fois la colonne A et la ligne 2, $A2 pour fixer seulement la colonne A et A$2 pour fixer seulement la ligne 2.
Alors c'est pas absolu c'est "Mixed" #mauvaisefoi
Plus sérieusement, ça fait sacrément moche comme bug...
Bonjour à tous.
Une tranche de vie de la famille à Flad :
Madame : "comment je fais une régression linéaire dans excel ?"
Moi : "j'en sais foutre rien, mais je connais des experts ! Je les contacte de ce pas !"
Et me voilà sur ce topic ^^
S'il faut plus de renseignements, dites moi :-)
lut,
je bosse sur 2007 :
Déja faut activer l'addon d'analyse si tu n'a pas l'icone dans "utilitaire d'analyse" tout à droite dans le ruban "données".
Ensuite tu choisis, régression linéaire et tu auras une boite de dialogue pour entrer les plages de données (Y étant la variable observée, X étant la variable explicative)
voila, sinon la fonction en accès directe est =DROITEREG(
le reste, go google.....
Coin !
C'est pas une question sur Excel, mais une question sur LibreOffice Calc.
Je cherche l'équivalent de la fonctionnalité "table de données" sur Excel.
L'idée c'est de simuler n fois une même feuille de calcul et d'en tirer des statistiques
Vous avez une idée ?
Merci d'avance !
Bonjour,
Désolé de ne pouvoir apporter de réponse à ta question cher ami, après avoir testé un peu au boulot libreoffice et open office, j'ai immédiatement décidé d'abandonner :-)
Je reviens sur ce topic avec une question..
J'utilise une fonction recherche toute bête dans un de mes classeurs :
=SIERREUR(RECHERCHEV($C8;sinistres!$A:$V;5;FAUX);" ")
J'aimerai bien que quand cette fonction renvoie quelque chose (par exemple, des fois y'a pas de sinistre, et d'autre fois ça va m'afficher le numéro de sinistre correspondant), je puisse cliquer sur le quelque chose et que ça m'amène directement dans l'onglet sinistre, au bon endroit, pour que je vois les détails de ce sinistre.
Par exemple, là il faudrait qu'en cliquant sur la cellule, hop je me téléporte en ligne 98 de l'onglet sinistre !
Et pousser le vice suffisamment loin, pour que quand je suis dans cet onglet sinistre, je clique sur un bouton, et hop ça me ramène au point de départ.
Alors fantasme ou réalité ?
J'en ai besoin car je suis en train d'adapter ce tableau à des collègues, qui euh... ont certainement plein d'autres qualités que de savoir se servir d'excel.
Regarde du côté de la formule "HYPERLINK", qui permet de créer un lien vers une autre cellule de ton fichier.
Et pour le bouton qui ramène à un onglet, tu peux faire un lien sur une cellule dans chacun de tes onglets qui ramène a l'onglet voulu. Genre si c'est un onglet "home"
Merci merci j'y suis arrivé ouh qu'elle est belle =SIERREUR(LIEN_HYPERTEXTE("[FREVOS.xlsm]sinistres!E"&EQUIV(RECHERCHEV($C4;sinistres!$A:$V; 5;FAUX);sinistres!E:E;0);"OUI");"")