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
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.

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
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...
0
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:11
Que veux tu que je te réponde....???
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.
0
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
- 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
0
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
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???
0
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
oui mais sauf que "permit" sera la valeur trouvée en b5 plutot.
0
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
oui oui, pardon faute de frappe.
Bon ben je te propose d'attendre un instant...
Tu peux aller prendre un café si tu aimes.
0
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
ok ça marche, mais disons que je vais en prendre deux!
0
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
peut être même trois... ça risque de durer un peu.
0

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
bon bah d'accord...
0
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
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 :
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
0
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
ok, je vais appliquer tout ça et puis je tiens informé...

tks
0
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
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
0
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
c bon, je suis distrait..
tkss
0
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
j'avais pas compris que cela devais etre fait avc les fichiers que t'as joint
0
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
C'est bon?
0
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
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
0
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
0
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
0
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
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...
0
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
0
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
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+
0
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
0
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
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+
0
ok. et encore merci.
0
bonjour,

quelqu'un d'autre pourrait-il m'aider svp?


merci
0
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,
0
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
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 :
|--- 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
0
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,
0
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
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
0
le problème est résolu. merci pour ta patience et ton aide, merci.

bien cdlt,
0
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
de rien.
A+
0