Macro Excel VBA
Résolu/Fermé
grizzo
-
19 févr. 2010 à 10:45
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 19 févr. 2010 à 17:01
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 19 févr. 2010 à 17:01
A voir également:
- Macro Excel VBA
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si et excel - Guide
- Déplacer une colonne excel - Guide
19 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 11:01
19 févr. 2010 à 11:01
Bonjour,
Je n'ai pas testé mais :
Je n'ai pas testé mais :
Sub test() 'déclaration de la variable Dim derlig as Integer 'fonction VBA qui affecte à notre variable le n° de la dernière ligne saisie dans la col A sous A12 derlig = ActiveSheet.Range("A12").Endxl(Down).Row 'définit la plage d'impression en fonction de notre variable ActiveSheet.PageSetup.PrintArea = "A12:X" & derlig End Sub
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 11:29
19 févr. 2010 à 11:29
Bonjour,
Merci pour votre aide, mais apparament cela ne fonctionne pas. Excel me dit :
Erreur d'execution '438'
Propriété ou méthode non gérée par cet objet
J'ai essayé de voir si la cellule sélectionnée était la bonne en mettant
Dim derlig as Integer
derlig = ActiveSheet.Range("A12").Endxl(Down).Row
Range("A" & derling).Select
Mais ça ne fonctionne pas non plus.
Pourriez-vous m'aider ?
D'avance merci
Merci pour votre aide, mais apparament cela ne fonctionne pas. Excel me dit :
Erreur d'execution '438'
Propriété ou méthode non gérée par cet objet
J'ai essayé de voir si la cellule sélectionnée était la bonne en mettant
Dim derlig as Integer
derlig = ActiveSheet.Range("A12").Endxl(Down).Row
Range("A" & derling).Select
Mais ça ne fonctionne pas non plus.
Pourriez-vous m'aider ?
D'avance merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 11:41
19 févr. 2010 à 11:41
Normal, j'm'a gouré dans la place des parenthèses sur xlDown ceci fonctionne mieux...
derlig = ActiveSheet.Range("A12").End(xlDown).Row
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 13:50
19 févr. 2010 à 13:50
Bonjour,
Ca y est ça fonctionne merci beaucoup
Par contre comment faire pour lui de manger de répéter cette macro sur plusieurs onglets précisémment (car sur certains onglet non)
Je vous remercie par avance de votre réponse.
Cordialement,
Ca y est ça fonctionne merci beaucoup
Par contre comment faire pour lui de manger de répéter cette macro sur plusieurs onglets précisémment (car sur certains onglet non)
Je vous remercie par avance de votre réponse.
Cordialement,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 13:57
19 févr. 2010 à 13:57
"pour lui de manger " vas y si t'as faim!!
Quels sont les noms des feuilles (ou leur numéro) sur lesquelles tu veux que ce fasse cette procédure?
Quels sont les noms des feuilles (ou leur numéro) sur lesquelles tu veux que ce fasse cette procédure?
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 14:04
19 févr. 2010 à 14:04
Excuse moi pour le "lui de manger" , c'était "lui demander" lol
Les feuilles ce sont "02 P","27 P" et "25 P"
Ensuite, étant donné que pour les feuilles "02 C","27 C" et "25 C", il faut l'impression aille jusqu'à la colonne AA (et non X comme celle qu'on vient de créer), comment je peux faire ?
Je te remercie par avance.
Les feuilles ce sont "02 P","27 P" et "25 P"
Ensuite, étant donné que pour les feuilles "02 C","27 C" et "25 C", il faut l'impression aille jusqu'à la colonne AA (et non X comme celle qu'on vient de créer), comment je peux faire ?
Je te remercie par avance.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 14:19
19 févr. 2010 à 14:19
toujours pas testé, mais cela devrait te convenir :
Sub test()
Dim derlig As Integer
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = "02 P" Or Ws.Name = "27 P" Or Ws.Name = "25 P" Then
MsgBox Ws.Name
derlig = ActiveSheet.Range("A12").End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:X" & derlig
ElseIf Ws.Name = "02 C" Or Ws.Name = "27 C" Or Ws.Name = "25 C" Then
MsgBox Ws.Name
derlig = ActiveSheet.Range("A12").End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:AA" & derlig
End If
Next Ws
End Sub
Sub test()
Dim derlig As Integer
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = "02 P" Or Ws.Name = "27 P" Or Ws.Name = "25 P" Then
MsgBox Ws.Name
derlig = ActiveSheet.Range("A12").End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:X" & derlig
ElseIf Ws.Name = "02 C" Or Ws.Name = "27 C" Or Ws.Name = "25 C" Then
MsgBox Ws.Name
derlig = ActiveSheet.Range("A12").End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:AA" & derlig
End If
Next Ws
End Sub
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 14:34
19 févr. 2010 à 14:34
Lorsque j'execute le macro une fenêtre s'ouvre et il est juste marqué "02 P" avec comme seule possibilité le bouton "OK". En cliquant sur "OK" , il y a un message d'erreur :
Erreur d'execution '6'
Dépassement de capacité
Je ne comprend pas ce que cela peut signifier.
Aurriez-vous une idée ?
Je vous remercie par avance
Erreur d'execution '6'
Dépassement de capacité
Je ne comprend pas ce que cela peut signifier.
Aurriez-vous une idée ?
Je vous remercie par avance
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 14:43
19 févr. 2010 à 14:43
J'avais prévu cette possibilité d'erreur, d'où les MsgBox... En fait, dans certaines feuilles tu n'as qu'une ou 2 lignes. Fait comme ceci :
Sub test()
Dim derlig As Integer
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = "02 P" Or Ws.Name = "27 P" Or Ws.Name = "25 P" Then
derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:X" & derlig
ElseIf Ws.Name = "02 C" Or Ws.Name = "27 C" Or Ws.Name = "25 C" Then
derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:AA" & derlig
End If
Next Ws
End Sub
Sub test()
Dim derlig As Integer
Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name = "02 P" Or Ws.Name = "27 P" Or Ws.Name = "25 P" Then
derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:X" & derlig
ElseIf Ws.Name = "02 C" Or Ws.Name = "27 C" Or Ws.Name = "25 C" Then
derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A12:AA" & derlig
End If
Next Ws
End Sub
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 14:50
19 févr. 2010 à 14:50
La fenêtre où il était juste marqué "02 P" avec comme seule possibilité le bouton "OK", n'apparait plus.
Par contre, j'ai toujours le même message d'erreur:
Erreur d'execution '6'
Dépassement de capacité
La ligne qui pose problème apparament, vu qu'elle apparait en jaune, est :
derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row
D'avance merci pour votre réponse
Par contre, j'ai toujours le même message d'erreur:
Erreur d'execution '6'
Dépassement de capacité
La ligne qui pose problème apparament, vu qu'elle apparait en jaune, est :
derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row
D'avance merci pour votre réponse
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 14:53
19 févr. 2010 à 14:53
dans tes feuilles y en a t'il qui ne comportent qu'une, 2 ou 3 lignes en comptant A12?
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 15:00
19 févr. 2010 à 15:00
Non le minimum c'est 4 lignes après A12.
J'ai créé la macro en répétant bêtement 6 fois les lignes (en modifiant le nom des feuilles) et en modifiant la colone X en AA pour celle concernées et cela a fonctionné:
Sheets("02 P").Select
derlig = ActiveSheet.Range("A12").End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A1:X" & derlig
Donc je pense pas que le problème viennent de la feuille, mais plutot de la formule, non ?
Je vous remercie par avance,
J'ai créé la macro en répétant bêtement 6 fois les lignes (en modifiant le nom des feuilles) et en modifiant la colone X en AA pour celle concernées et cela a fonctionné:
Sheets("02 P").Select
derlig = ActiveSheet.Range("A12").End(xlDown).Row
ActiveSheet.PageSetup.PrintArea = "A1:X" & derlig
Donc je pense pas que le problème viennent de la feuille, mais plutot de la formule, non ?
Je vous remercie par avance,
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 15:07
19 févr. 2010 à 15:07
Il faut alors compléter notre macro par quelques tests :
Essaye et tiens moi au courant
Sub test() Dim derlig As Integer Dim Ws As Worksheet For Each Ws In ThisWorkbook.Worksheets 'si la feuille s'appelle 02 P ou 27 P ou 25 P alors If Ws.Name = "02 P" Or Ws.Name = "27 P" Or Ws.Name = "25 P" Then Ws.Activate 'si la cellule A12 est vide on passe à la feuille suivante If Ws.Range("A12") = "" Then GoTo suivante If Ws.Range("A13") = "" Then ActiveSheet.PageSetup.PrintArea = "A12:X12" GoTo suivante End If If Ws.Range("A14") = "" Then ActiveSheet.PageSetup.PrintArea = "A12:X13" GoTo suivante End If derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row ActiveSheet.PageSetup.PrintArea = "A12:X" & derlig ElseIf Ws.Name = "02 C" Or Ws.Name = "27 C" Or Ws.Name = "25 C" Then Ws.Activate If Ws.Range("A12") = "" Then GoTo suivante If Ws.Range("A13") = "" Then ActiveSheet.PageSetup.PrintArea = "A12:X12" GoTo suivante End If If Ws.Range("A14") = "" Then ActiveSheet.PageSetup.PrintArea = "A12:X13" GoTo suivante End If derlig = ActiveSheet.Range("A12").CurrentRegion.End(xlDown).Row ActiveSheet.PageSetup.PrintArea = "A12:AA" & derlig End If suivante: Next Ws End Sub
Essaye et tiens moi au courant
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 15:25
19 févr. 2010 à 15:25
Cela fonctionne très très bien !!!!
Je vous remercie sincèrement car cela va beaucoup m'aider.
J'aurai 2 autre questions qui sont la suite de cette macro :
- Je souhaiterai créer une macro qui n'imprime que les feuilles dont la cellule G36 est différente de '0.
- Je souhaiterai créer une macro (M2) qui éxécute plusieurs fois une macro (M1) que j'ai d'ores et déjà programmé. Par contre, je souhaite qu'au lancement de la macro (M2) on me demande combien de fois je souhaite qu'il exécute l'autre macro (M1).
L'objectif est d'imprimer un rapport qui est composé de plusieurs feuilles dans plusieurs fichier, mais dans un ordre précis et de définir au départ le nombre de rapport que je souhaite.
Je vous remercie par avance
Je vous remercie sincèrement car cela va beaucoup m'aider.
J'aurai 2 autre questions qui sont la suite de cette macro :
- Je souhaiterai créer une macro qui n'imprime que les feuilles dont la cellule G36 est différente de '0.
- Je souhaiterai créer une macro (M2) qui éxécute plusieurs fois une macro (M1) que j'ai d'ores et déjà programmé. Par contre, je souhaite qu'au lancement de la macro (M2) on me demande combien de fois je souhaite qu'il exécute l'autre macro (M1).
L'objectif est d'imprimer un rapport qui est composé de plusieurs feuilles dans plusieurs fichier, mais dans un ordre précis et de définir au départ le nombre de rapport que je souhaite.
Je vous remercie par avance
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 15:45
19 févr. 2010 à 15:45
pour l'impression si G36 est non vide :
pour l'exécution multiple de macro :
Sub imprime_si() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets If ws.Range("G36") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If End Sub
pour l'exécution multiple de macro :
Sub lancer_plusieurs_fois() Dim i As Integer, n As Integer n = CInt(InputBox("saisir le nombre de fois ou vous souhaitez exécuter la macro")) For i = 1 To n Application.Run ("nom_de_la_macro_que_tu_veux_lancer_plusieurs_fois") MsgBox i Next i End Sub
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 16:12
19 févr. 2010 à 16:12
Pour l'impression si G36 est non vide :
La fonction imprime si ne fonctionne pas : elle n'envoie rien à l'impression.
Je pense qu'elle ne sélectionne pas les onglets.
pour l'exécution multiple de macro :
La macro fonctionne très bien par contre à chaque fois qu'elle termine la macro M1, une fenêtre s'ouvre avec marqué "1" et il attend que je clique sur "ok" pour lancer la deuxième execution.
Y-a-til un moyen de ne pas afficher ce message ? car si j'ai 20 rapports à faire je dois à chaque fois valider pour lancer l'impression du second rapport...
La fonction imprime si ne fonctionne pas : elle n'envoie rien à l'impression.
Je pense qu'elle ne sélectionne pas les onglets.
pour l'exécution multiple de macro :
La macro fonctionne très bien par contre à chaque fois qu'elle termine la macro M1, une fenêtre s'ouvre avec marqué "1" et il attend que je clique sur "ok" pour lancer la deuxième execution.
Y-a-til un moyen de ne pas afficher ce message ? car si j'ai 20 rapports à faire je dois à chaque fois valider pour lancer l'impression du second rapport...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 16:29
19 févr. 2010 à 16:29
oups... vivement ce soir!!
et re oups...
Pourquoi tu n'aimes pas devoir cliquer?????
pfff exigeant avec ça!!
Sub imprime_si() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets If ws.Range("G36") <> "" Then ws.Activate 'ben oui quoi si on ne l'active pas on ne peux pas imprimer... ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If End Sub
et re oups...
Pourquoi tu n'aimes pas devoir cliquer?????
pfff exigeant avec ça!!
Sub lancer_plusieurs_fois() Dim i As Integer, n As Integer n = CInt(InputBox("saisir le nombre de fois ou vous souhaitez exécuter la macro")) For i = 1 To n Application.Run ("nom_de_la_macro_que_tu_veux_lancer_plusieurs_fois") Next i End Sub
grizzo
Messages postés
11
Date d'inscription
vendredi 19 février 2010
Statut
Membre
Dernière intervention
19 février 2010
19 févr. 2010 à 16:58
19 févr. 2010 à 16:58
Tout fonctionne super bien!!!
Je vous remercie sincèrement pour le temps que vous avez passez à m'aider à réaliser ces macros.
Bonne continuation
@ bientot
Je vous remercie sincèrement pour le temps que vous avez passez à m'aider à réaliser ces macros.
Bonne continuation
@ bientot
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 758
19 févr. 2010 à 17:01
19 févr. 2010 à 17:01
@ +