Automatisation de taches
Résolu/Fermé
fresid
-
18 juil. 2013 à 09:23
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 2 août 2013 à 16:12
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 2 août 2013 à 16:12
A voir également:
- Automatisation de taches
- Windows 11 barre des taches a gauche - Guide
- Comment remettre la barre des tâches à la normale ? - Guide
- Changer la couleur de la barre des taches - Guide
- Gestionnaire des taches - Guide
- Gestionnaire des taches windows 11 - Guide
40 réponses
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 13:53
24 juil. 2013 à 13:53
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...
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 14:13
24 juil. 2013 à 14:13
- 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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
24 juil. 2013 à 14:20
24 juil. 2013 à 14:20
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???
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 14:35
24 juil. 2013 à 14:35
oui mais sauf que "permit" sera la valeur trouvée en b5 plutot.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 24/07/2013 à 14:40
Modifié par pijaku le 24/07/2013 à 14:40
oui oui, pardon faute de frappe.
Bon ben je te propose d'attendre un instant...
Tu peux aller prendre un café si tu aimes.
Bon ben je te propose d'attendre un instant...
Tu peux aller prendre un café si tu aimes.
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 14:51
24 juil. 2013 à 14:51
ok ça marche, mais disons que je vais en prendre deux!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
24 juil. 2013 à 15:11
24 juil. 2013 à 15:11
peut être même trois... ça risque de durer un peu.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 15:13
24 juil. 2013 à 15:13
bon bah d'accord...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 24/07/2013 à 15:54
Modifié par pijaku le 24/07/2013 à 15:54
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
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 15:56
24 juil. 2013 à 15:56
ok, je vais appliquer tout ça et puis je tiens informé...
tks
tks
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 16:18
24 juil. 2013 à 16:18
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
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 16:38
24 juil. 2013 à 16:38
c bon, je suis distrait..
tkss
tkss
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 16:40
24 juil. 2013 à 16:40
j'avais pas compris que cela devais etre fait avc les fichiers que t'as joint
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
24 juil. 2013 à 16:41
24 juil. 2013 à 16:41
C'est bon?
sidyy
Messages postés
20
Date d'inscription
lundi 22 juillet 2013
Statut
Membre
Dernière intervention
24 juillet 2013
24 juil. 2013 à 16:45
24 juil. 2013 à 16:45
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
31 juil. 2013 à 11:55
31 juil. 2013 à 11:55
Bonjour,
Pas de souci.
Dans le fichier source, les cellules concernées, on sait ou elles sont. Toutes les 6 lignes, colonne B.
Dans le fichier cible, tu m'as dit au départ, ne pas connaitre le nombre de colonnes. Donc on demande à l'utilisateur...
Pas de souci.
Dans le fichier source, les cellules concernées, on sait ou elles sont. Toutes les 6 lignes, colonne B.
Dans le fichier cible, tu m'as dit au départ, ne pas connaitre le nombre de colonnes. Donc on demande à l'utilisateur...
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
31 juil. 2013 à 12:05
31 juil. 2013 à 12:05
t'as pas l'impression d'exagérer en changeant tout le temps d'avis.
Moi perso j'arrête.
Vois ça avec quelqu'un d'autre
A+
Moi perso j'arrête.
Vois ça avec quelqu'un d'autre
A+
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
31 juil. 2013 à 12:41
31 juil. 2013 à 12:41
De rien.
Le problème c'est qu'un "petit" changement comme celui que tu demandes aujourd'hui nécessite la refonte de toute la macro.
Alors non.
A+
Le problème c'est qu'un "petit" changement comme celui que tu demandes aujourd'hui nécessite la refonte de toute la macro.
Alors non.
A+
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
2 août 2013 à 15:24
2 août 2013 à 15:24
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,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
2 août 2013 à 15:34
2 août 2013 à 15:34
Tant que tu y es, vires les |--- de ta feuille et du code...
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
le problème est résolu. merci pour ta patience et ton aide, merci.
bien cdlt,
bien cdlt,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
2 août 2013 à 16:12
2 août 2013 à 16:12
de rien.
A+
A+
24 juil. 2013 à 14:11
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.