Macro sous excel : besoin d'aide

Résolu/Fermé
caribou38 Messages postés 30 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 28 août 2008 - 12 juil. 2008 à 22:01
 souris - 21 juil. 2008 à 20:04
Bonjour,

Je souhaite réaliser une macro sous excel me permettant de récupérer
des donnees renseignées par des opérateurs dans une fiche de travail pour le recuperer et
remplir une feuille excel récapitulative de tous les bons de travaux créés par opés.
Problématique :
Les opé renseignent :

Une feuille avec nom de la machine a arrêter (choix dans une liste box /
ils peuvent en arreter 4 maxi par bon de travail).
Pour ? : Nom
Consigné le : date de consignation
Numero de bon : numero

Ces données doivent ensuite être recopiées a l'aide d'une macro dans une autre feuille excel ou se trouve toute les machines de l'usine dans une colonne
En face de chaque machine se trouve 4 colonnes a remplir : 4 colonnes avec les infos Pour ?, Numéro de bon,Consigné le, Heure (que l'ope vient de renseigner dans l'autre feuille).

LE but de la macro serait de recuperer les données : Pour ?, Numéro de bon,Consigné le, Heure et de les coller dans la ligne qui correspond a ou aux machines concernées.
Subtilitée : Il y a 7 groupes de 4 colonnes avec les infos : Pour ?, Numéro de bon,Consigné le, Heure .
LA macro doit aller coller les infos la ou les cellules sont vides.

J'ai eu comme probleme :
Coller des données a une position données qui depend de la recherche faite juste avant.
Rêcherche de cellule vide pour coller les données.

Pourriez vous m'aider ?
Mrci beaucoup




A voir également:

3 réponses

caribou38 Messages postés 30 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 28 août 2008
18 juil. 2008 à 16:56
bonjour

j'utilise cette macro pour rechercher une valeur dans un tableau et reporter la valeur de la cellule a coté dans une liste
que lorsque la macro sort du champ (A11,A16) elle envoie un message et ne plante pas comme elle fait actuellement
j'ai l'écran qui passe d'une feuille a l'autre pendant l'exécution de la macro comment l'éviter ou placer la commande

Application.ScreenUpdating = True

ou placer activesheet.protect et unprotect dans mes macro

merci de votre aide

With Sheets("bon consignation")


.Cells(28, 1) = tablo(1, 1)
.Cells(9, 2) = tablo(1, 2)
.Cells(5, 4) = Range("num_bon")
.Cells(7, 5) = tablo(1, 3)

Sheets("bon consignation").Activate
Range("A11:A16").Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell = Cells(28, 1)
Range("A12").Select


'inscrit le local électrique dans le bon

With Sheets("bon consignation")
Columns("J:J").Select
Selection.Find(What:=Range("A28"), After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select

ActiveCell.Copy

Range("A12:A16").Select
Selection.Find(What:=Range("A28"), After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 2).Select

ActiveSheet.Paste


Columns("J:J").Select
Selection.Find(What:=Range("A28"), After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 2).Select

ActiveCell.Copy

Range("A12:A16").Select
Selection.Find(What:=Range("A28"), After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 3).Select

ActiveSheet.Paste

Sheets("Liste moteur").Select
Selection.AutoFilter Field:=20, Criteria1:="1"

Sheets("feuille de saisie").Activate

End With

End With

End With
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
12 juil. 2008 à 23:27
bonsoir,

1/ tu peux trouver la ligne par une fonction "FIND"

par ex: liste dans colonne A

lig=columns(1).find(nomdelamachine,range("A65536")).row

2/ 1°colonne vide dans la ligne "lig"

col=cells(lig,100).end(xltoleft).column

mais il faut que tu t'assures que la saisie des 4 renseignements à reporter soit effective

Michel
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
13 juil. 2008 à 08:40
Au lieu de:
col=cells(lig,100).end(xltoleft).column

Lire
col=cells(lig,100).end(xltoleft).column +1
0
caribou38 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
13 juil. 2008 à 12:53
Bonjour michel,

Merci beaucoup de ta reponse, je suis néanmoins encore bloqué :
J'ai mis ci joint le document sur lequel je travaille, la macro que j'ai commence est la macro2.

http://teamhosto.free.fr/fo1uw6aqey/Type_Consignations_electrique_S.xls

En fait je dois trouver la manière pour aller recopier les infos qui se trouvent dans la feuil3 en face des machines concernées.
Sachant que celle ci changent a chaque fois.
J'ai essayé de definir lig comme étant la ligne ou il doit se positionner apres avoir trouver le nom de la machine correspondante dans la colonne Q, mais lig reste toujours vide :-(( .

Une aide serait la bienvenue.

Merci d'avance,
Caribou38.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310 > caribou38
13 juil. 2008 à 17:28
Salut Caribou

Ci joint proposition:
https://www.cjoint.com/?hnrnjFxgVN

Je n'ai travaillé que sur la zone PCR et viré le reste surtout question d'encombrement du fichier!

le gros problème est que tu utilises des cellules fusionnées. Si cette technique convient à des tableaux très simples, elle devient une tare dès que tu utilises des fonctions de recherche et une vraie calamité en VBA. En horizontal, il vaut mieux utiliser le centrage sur plusieurs colonnes (format-cellule-alignement) et éviter les fusions verticales...TU as des commentaires là dessus dans le code.

La saisie se fait sur une zone unique (toujours la même, coloriée en bleu) a l'appui sur le bouton, les saisies sont reportées en feuille "moteur" et également sur la fiche feuil3 afin de conserver par l'opérateur une mémoire des saisies
effectuées...

Bon courage pour le reste!...

Michel
0
caribou38 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
13 juil. 2008 à 18:29
Merci beaucoup pour le coup de main ...
J'ai finalement réussi a utiliser la fonction find sans défusionner les cellules et ca marche (cf code ci dessous)

'Selection et copie du nom de la machine N°1 dans la fiche de bon de travail
Sheets("Feuil3").Select
Range("B3").Select
nomdelamachine = Range("B3")

'Recherche de la ligne correspondant au nom de la premiere machine du BT
Sheets("liste moteur").Select
Range("Q4:Q65536").Select
ActiveSheet.Cells.Find(nomdelamachine, LookIn:=xlValues).Activate

'Ligne correspondant au nom de la machine
lig = ActiveCell.Row

'Trouver la premiere colonne vide en face du nom de la machine
col = Cells(lig, 100).End(xlToLeft).Column + 1

'Selection et copie des infos a mettre dans les 4 colonnes en face du nom de la machine
'Pour ?
Sheets("Feuil3").Select
Range("C3").Select
Selection.Copy
Sheets("Liste moteur").Select
Cells(lig, col).Select
ActiveSheet.Paste

La macro fonctionne, je vais m'inspirer de ton bouton de commande pour lancer la macro et effacer les données saisies a la fin....

En tout cas merci encore pour tes réponses rapides et très utiles.

Caribou38.
0
caribou38 Messages postés 30 Date d'inscription samedi 12 juillet 2008 Statut Membre Dernière intervention 28 août 2008 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
14 juil. 2008 à 22:37
Salut Michel

et merci encore pour l'aide que tu m'as fournie
je revient vers toi car j'ai encore besoin de ton aide je bloque complètement
ta macro me permet de remplir mon tableau excel .
la suite de mon programme était de remplir un bon de consignation (4 moteur max par numéro de bon) et un bon de déconsignation les enregistrer dans un répertoire pour les imprimer et vider mes bons pour une prochaine saisie
mais je n'arrive pas a recopier la selection des moteurs.

mais j'ai vu trop grand pour mes compétences (débutant en macro)
je joint mon fichier excel et te remercie d'avance pour l'aide que tu pourrais m'apporter.

http://vtsteam.free.fr/rfm0l53ycz/consigneselec.xls
0
Hello caribou,


Application.ScreenUpdating = False --> Au tout debut de la macro juste apres Sub recuperer ()
Application.ScreenUpdating = True -> A la fin de la macro juste avant End Sub

Pareil pour activesheet.unprotect --> Au debut
activesheet.protect --> A la fin ..

Pour le reste, il faudrait que tu charges la dernieres version excel de ta macro, ca sera plus simple pour reproduire le plantage.

Bon courage .
0