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
souris - 21 juil. 2008 à 20:04
A voir également:
- Macro sous excel : besoin d'aide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
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
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
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
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
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
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
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
13 juil. 2008 à 08:40
Au lieu de:
col=cells(lig,100).end(xltoleft).column
Lire
col=cells(lig,100).end(xltoleft).column +1
col=cells(lig,100).end(xltoleft).column
Lire
col=cells(lig,100).end(xltoleft).column +1
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
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.
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.
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
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
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
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
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.
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.
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
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
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
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 .
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 .