Automatisation de taches
Résolu
fresid
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
bonjour,
je suis actuellement en stage de 1ere année et il m'est demandé d'automatiser une tache sous excel, cette tache consiste a entrer plusieurs valeur , très souvent identiques dans plusieurs cellules et colonnes, ils disent qu'ils aimeraient qu'un copier collé puisse completer les colonnes et cellules de manière automatique.
a vrai dire j'ai aucune idée de comment m'y prendre.
merci par avance.
je suis actuellement en stage de 1ere année et il m'est demandé d'automatiser une tache sous excel, cette tache consiste a entrer plusieurs valeur , très souvent identiques dans plusieurs cellules et colonnes, ils disent qu'ils aimeraient qu'un copier collé puisse completer les colonnes et cellules de manière automatique.
a vrai dire j'ai aucune idée de comment m'y prendre.
merci par avance.
A voir également:
- Automatisation de taches
- Windows 11 barre des taches a gauche - Guide
- Barre des taches - Guide
- Gestionnaire des taches windows 11 - Guide
- Changer la couleur de la barre des taches - Guide
- Gestionnaire des taches - Guide
40 réponses
en selectionnant la cellule F5 par exemple, il devrait etre demandé ce qui veut etre importé dans cette cellule et proposer l'emplacement pour aller chercher...c'est une façon que j'ai eu de comprendre, après je peux me tromper...
- chercher dans les colonnes A et B du fichier cible, le contenu des catégories, mais seulement les 2 premières ligne, de la colonne B du fichier source.
- dans la colone F du fichier cible.
mais toutefois, les il doit y avoir une correspondance entre les entités, si c'est par expl "permit" pour abortion dans le fichier source, il doit aller mettre le resultat dans la cellule correspondant a "abortion" dans le fichier cible.
voilà, c'est cela ce que je dois faire.
tks
- dans la colone F du fichier cible.
mais toutefois, les il doit y avoir une correspondance entre les entités, si c'est par expl "permit" pour abortion dans le fichier source, il doit aller mettre le resultat dans la cellule correspondant a "abortion" dans le fichier cible.
voilà, c'est cela ce que je dois faire.
tks
On avance...
Quand tu dis seulement les 2 premières lignes de la colonne B du fichier source, tu veux tout de même parler des cellules B4:B5, B10:B11, B16:B17, B22:B23 etc...?
Je repère, par exemple, en B4 le mot "Abortion". J'enregistre la valeur en B5 ("permit"), je vais chercher, dans le fichier cible, dans les colonnes A et B si je trouve "Abortion", si je le trouve, j'écris "permit" (valeur trouvée en B6) dans la colonne F, en face de Abortion.
OK???
Quand tu dis seulement les 2 premières lignes de la colonne B du fichier source, tu veux tout de même parler des cellules B4:B5, B10:B11, B16:B17, B22:B23 etc...?
Je repère, par exemple, en B4 le mot "Abortion". J'enregistre la valeur en B5 ("permit"), je vais chercher, dans le fichier cible, dans les colonnes A et B si je trouve "Abortion", si je le trouve, j'écris "permit" (valeur trouvée en B6) dans la colonne F, en face de Abortion.
OK???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alors, voici ma proposition.
Tout d'abord, les classeurs exemples :
Fichier SOURCE
Fichier CIBLE qui est le tien intégralement inchangé....
!!!! Il faudra adapter le nom de la feuille contenant les données du fichier_source, directement dans le code de la macro. C'est indiqué en toutes lettres...!!!!!
Ensuite, l'explication :
La procédure va te faire participer...
Tu va devoir :
1- depuis la feuille contenant les données du fichier source, taper ALT+F8, choisir ExporterActionsParCategories, puis cliquer sur Exécuter.
2- à l'apparition du message "Choix du fichier cible" : CLIQUER SUR OUI!,
3- dans la boite de dialogue suivante, CHERCHER LE FICHIER CIBLE puis CLIQUER SUR OUVRIR,
4- à l'apparition du message "Sélectionner une seule cellule de la colonne ou vous voulez transférer les données", CLIC SUR UNE CELLULE DE LA COLONNE F (UNE SEULE!!!), par exemple F5 du fichier cible. Va alors s'afficher : $F$5,
5- à l'apparition du message "Sélectionner la plage contenant les catégories", SÉLECTIONNE à la souris, la plage A5:B93 du fichier cible
6- puis laisser couler jusqu'au dernier message : "Exportation terminée en XX secondes."
Et le code à placer dans un module standard du classeur source :
Cordialement,
Franck P
Tout d'abord, les classeurs exemples :
Fichier SOURCE
Fichier CIBLE qui est le tien intégralement inchangé....
!!!! Il faudra adapter le nom de la feuille contenant les données du fichier_source, directement dans le code de la macro. C'est indiqué en toutes lettres...!!!!!
Ensuite, l'explication :
La procédure va te faire participer...
Tu va devoir :
1- depuis la feuille contenant les données du fichier source, taper ALT+F8, choisir ExporterActionsParCategories, puis cliquer sur Exécuter.
2- à l'apparition du message "Choix du fichier cible" : CLIQUER SUR OUI!,
3- dans la boite de dialogue suivante, CHERCHER LE FICHIER CIBLE puis CLIQUER SUR OUVRIR,
4- à l'apparition du message "Sélectionner une seule cellule de la colonne ou vous voulez transférer les données", CLIC SUR UNE CELLULE DE LA COLONNE F (UNE SEULE!!!), par exemple F5 du fichier cible. Va alors s'afficher : $F$5,
5- à l'apparition du message "Sélectionner la plage contenant les catégories", SÉLECTIONNE à la souris, la plage A5:B93 du fichier cible
6- puis laisser couler jusqu'au dernier message : "Exportation terminée en XX secondes."
Et le code à placer dans un module standard du classeur source :
Sub ExporterActionsParCategories() Dim fichier, t Dim Wbk_Source As Workbook, Wbk_Cible As Workbook Dim Wsh_Source As Worksheet Dim Tbl_In(), Tbl_Temp() Dim Plage As Range, Cel As Range Dim i As Long, drlig As Long, fin As Long, cpt As Long, Pos As Long Dim Colonne As String, maVar As String t = Timer '********** COLLECTE DES INFOS "Category" & "Action" ************* Set Wbk_Source = ThisWorkbook '************************************************************************ A ADAPTER 'remplacer Feuil1 par le nom de la feuille contenant les category, actions etc. Set Wsh_Source = Wbk_Source.Worksheets("Feuil1") '**********************************************************************************FIN ADAPTATION With Wsh_Source drlig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row fin = (drlig - 4) / 6 cpt = 0 ReDim Tbl_In(1 To 2, 1 To fin) For i = 4 To drlig Step 6 cpt = cpt + 1 Tbl_In(1, cpt) = .Range("B" & i).Value Tbl_In(2, cpt) = .Range("B" & i + 1).Value Next i End With '************ FIN COLLECTE **************************************** '************ OUVERTURE FICHIER CIBLE ***************************** MsgBox "Choix du fichier cible" fichier = Application.GetOpenFilename If VarType(fichier) = vbBoolean Then MsgBox "Abandon opérateur", vbCritical, "Annulation" Exit Sub End If Set Wbk_Cible = Workbooks.Open(fichier) '************* Le fichier cible est ouvert ************************ '********** Choix de la colonne ou transférer les données ********* Set Plage = Application.InputBox("Sélectionner une seule cellule de la colonne ou vous voulez transférer les données", "Column choice", Type:=8) If Not Plage Is Nothing And Plage.Count = 1 Then Colonne = Split(Plage.Address(ColumnAbsolute:=False), "$")(0) Else MsgBox "Abandon opérateur", vbCritical, "Annulation" Wbk_Cible.Close Exit Sub End If '**************** FIN CHOIX COLONNE ******************************* '**************** Restitution des données ************************* Set Plage = Application.InputBox("Sélectionner la plage contenant les catégories", "Category", Type:=8) If Plage Is Nothing Then MsgBox "Abandon opérateur", vbCritical, "Annulation" Wbk_Cible.Close Exit Sub Else Application.ScreenUpdating = False For Each Cel In Plage For i = LBound(Tbl_In, 2) To UBound(Tbl_In, 2) If Cel.Value Like "*" & "|---" & Tbl_In(1, i) & "*" Then Cells(Cel.Row, Colonne) = Tbl_In(2, i): Exit For Next i Next Cel Application.ScreenUpdating = True End If '****************** FIN RESTITUTION ******************************** MsgBox "Exportation terminée en " & Timer - t & " secondes." End Sub
Cordialement,
Franck P
la combinaison de touches alt+f8 m'ouvre l'enregistrement de macro...j'utilise excel 2007. j'ai essayé d'autre combinaisons mais aucune ne m'affiche ce qui est précisé...
tks
tks
oui, le test fonctionne, je vais prendre le temps de tout adapter et puis je te dit si tout marche comme il faut...
encore merci
encore merci
bonjour,
merci pijaku, ca marche en effet, meme si maintenant que jai refais pour les autres jai des cases vides, je ne sais pas trop pourquoi encore. j'ai ete malade, c'est pourquoi j'ai pris du temps.
merci
merci pijaku, ca marche en effet, meme si maintenant que jai refais pour les autres jai des cases vides, je ne sais pas trop pourquoi encore. j'ai ete malade, c'est pourquoi j'ai pris du temps.
merci
bonjour,
désolé de t'importuner à nouveau, mais il y a un petit détail qui m'échappe,
pourquoi est ce que la sélection de la plage contenant les catégories s'effectue à partir du fichier cible et non du fichier source?
merci
désolé de t'importuner à nouveau, mais il y a un petit détail qui m'échappe,
pourquoi est ce que la sélection de la plage contenant les catégories s'effectue à partir du fichier cible et non du fichier source?
merci
d'accord, et dans le cas ou je voudrais inversé le processur, c'est à dire sélectionner les cellules avant , je veux dire que la première action soit de sélectionner la plage contenant les categories et le reste après...?
vivement merci pour tn aide
vivement merci pour tn aide
Désolé,
c'est pas de ma faute, j'ai bien appliqué la solution de départ et elle marche bien, mais ils trouvent que ce serait plus facile si ça deroulais plutot comme je te l'ai dit, ils préfèrent que je le fasse comme cela. c'est pourquoi je suis retourné vers toi.
mais si t'en a marre désolé, merci pour l'aide que tu m'a apporté jusqu'ici
merci
c'est pas de ma faute, j'ai bien appliqué la solution de départ et elle marche bien, mais ils trouvent que ce serait plus facile si ça deroulais plutot comme je te l'ai dit, ils préfèrent que je le fasse comme cela. c'est pourquoi je suis retourné vers toi.
mais si t'en a marre désolé, merci pour l'aide que tu m'a apporté jusqu'ici
merci
bonjour,
encore moi, j'èspère que t pas trop contrarié pijaku, mais je reviens vers toi pour un souci avec le code.
en fait a chaque fois qu'il retrouve des mots identiques dans le fichier il ne renvoi pas la valeur excate(l'action qui y correspond).par exemple pour "entertainment" et "entertainment video" ou encore "educational material" et "educational video". j'ai comme l'impression qu'il retourne l'action qui correspond au premier mot...
en espérant que tu veuille bien encore te pencher sur mon cas...
cdlt,
encore moi, j'èspère que t pas trop contrarié pijaku, mais je reviens vers toi pour un souci avec le code.
en fait a chaque fois qu'il retrouve des mots identiques dans le fichier il ne renvoi pas la valeur excate(l'action qui y correspond).par exemple pour "entertainment" et "entertainment video" ou encore "educational material" et "educational video". j'ai comme l'impression qu'il retourne l'action qui correspond au premier mot...
en espérant que tu veuille bien encore te pencher sur mon cas...
cdlt,
Bonjour,
Le problème ...
...
est insoluble.
Dans l'état du fichier, il n'y a pas de solutions.
J'explique.
Tes données sont stockées sous la forme :
Avec des espaces pour certains, d'autres sans etc...
Alors, pour reconnaitre ces données, je suis obligé de :
- ne pas tenir compte de ce qu'il y a avant,
- ne pas tenir compte de ce qu'il y a après,
Donc contraint d'utiliser l'opérateur Like, avec des * comme ceci :
Si tu arrives à "assainir" ta base de données, c'est à dire supprimer tous les espaces inutiles d'un côté comme de l'autre, tu pourras remplacer cette partie du code :
Par :
ce qui sera plus propre et plus fonctionnel
Le problème ...
...
est insoluble.
Dans l'état du fichier, il n'y a pas de solutions.
J'explique.
Tes données sont stockées sous la forme :
|--- entertainment |--- entertainment material etc etc...
Avec des espaces pour certains, d'autres sans etc...
Alors, pour reconnaitre ces données, je suis obligé de :
- ne pas tenir compte de ce qu'il y a avant,
- ne pas tenir compte de ce qu'il y a après,
Donc contraint d'utiliser l'opérateur Like, avec des * comme ceci :
If Cel.Value Like "*" & "|---" & Tbl_In(1, i) & "*"
Si tu arrives à "assainir" ta base de données, c'est à dire supprimer tous les espaces inutiles d'un côté comme de l'autre, tu pourras remplacer cette partie du code :
For Each Cel In Plage For i = LBound(Tbl_In, 2) To UBound(Tbl_In, 2) If Cel.Value Like "*" & "|---" & Tbl_In(1, i) & "*" Then Cells(Cel.Row, Colonne) = Tbl_In(2, i): Exit For Next i Next Cel
Par :
For Each Cel In Plage For i = LBound(Tbl_In, 2) To UBound(Tbl_In, 2) If Cel.Value = "|---" & Tbl_In(1, i) Then Cells(Cel.Row, Colonne) = Tbl_In(2, i): Exit For Next i Next Cel
ce qui sera plus propre et plus fonctionnel
d'accord, je vais supprimer les espaces et symboles quelconques avant et apres et je remplacerai la partie du code correspondante par celui-ci.
merci.
bien cdlt,
merci.
bien cdlt,
Reviens quand tu sauras...
En fait, une automatisation, quel que soit le langage de programmation, va répéter ou faire à ta place, une tâche bien précise. Sans plus de précision, je ne peux guère t'aider...
Dis moi, une fois pour toute, ce que tu dois faire.