Raccourcir une macro
Résolu
stitchbouck
Messages postés
137
Statut
Membre
-
stitchbouck Messages postés 137 Statut Membre -
stitchbouck Messages postés 137 Statut Membre -
Bonjour,
j'ai composé une macro très répétitive, et je me demandais si quelqu'un voyait un moyen de la raccourcir.
J'intègre manuellement des données de compteur électrique sur une feuille nommée "ordre de relevé" selon leur emplacements physiques (donc selon le chemin que je prends pour aller les relever), et la macro s'occupe de distribuer ces données sur les feuilles correspondantes.
Au passage, la macro vérifie les données et renvoie un message selon la donnée erronée (indique la ou les colonnes fautives). C'est à ce niveau qu'il y a de multiples redondances...
ça fonctionne, mais c'est moche et ça pourrait surement être plus précis (indication de la cellule au lieu de la colonne seule, par exemple)
Voici donc un extrait de la macro
etc...
A votre avis ? un moyen de condenser un peu tout ça, d'éviter de répéter un "corps" de msgbox identique ?
merci !!
j'ai composé une macro très répétitive, et je me demandais si quelqu'un voyait un moyen de la raccourcir.
J'intègre manuellement des données de compteur électrique sur une feuille nommée "ordre de relevé" selon leur emplacements physiques (donc selon le chemin que je prends pour aller les relever), et la macro s'occupe de distribuer ces données sur les feuilles correspondantes.
Au passage, la macro vérifie les données et renvoie un message selon la donnée erronée (indique la ou les colonnes fautives). C'est à ce niveau qu'il y a de multiples redondances...
ça fonctionne, mais c'est moche et ça pourrait surement être plus précis (indication de la cellule au lieu de la colonne seule, par exemple)
Voici donc un extrait de la macro
' Compteur ERDF 70 For i = 6 To Range("A65536").End(xlUp).Row If IsNumeric(Sheets("Compteur électrique").Cells(i - 1, 10)) And Sheets("Compteur électrique").Cells(i, 10) <> "" And Sheets("Compteur électrique").Cells(i, 10) < Sheets("Compteur électrique").Cells(i - 1, 10).Value Then MsgBox ("Erreur : relevé 'Compteur électrique' inférieur au précédent." & Chr(10) & "En colonne 10" & Chr(10) & "Vérifiez et modifiez sur feuille 'Ordre de relevé'" & "en colonne 27" & "puis relancez le transfert de donnée. ") End If Next ' Compteur ERDF 71 For i = 6 To Range("A65536").End(xlUp).Row If IsNumeric(Sheets("Compteur électrique").Cells(i - 1, 11)) And Sheets("Compteur électrique").Cells(i, 11) <> "" And Sheets("Compteur électrique").Cells(i, 11) < Sheets("Compteur électrique").Cells(i - 1, 11).Value Then MsgBox ("Erreur : relevé 'Compteur électrique' inférieur au précédent." & Chr(10) & "En colonne 11" & Chr(10) & "Vérifiez et modifiez sur feuille 'Ordre de relevé'" & "en colonne 28" & "puis relancez le transfert de donnée. ") End If Next ' Compteur ERDF 72 For i = 6 To Range("A65536").End(xlUp).Row If IsNumeric(Sheets("Compteur électrique").Cells(i - 1, 12)) And Sheets("Compteur électrique").Cells(i, 12) <> "" And Sheets("Compteur électrique").Cells(i, 12) < Sheets("Compteur électrique").Cells(i - 1, 12).Value Then MsgBox ("Erreur : relevé 'Compteur électrique' inférieur au précédent." & Chr(10) & "En colonne 12" & Chr(10) & "Vérifiez et modifiez sur feuille 'Ordre de relevé'" & "en colonne 29" & "puis relancez le transfert de donnée. ") End If Next
etc...
A votre avis ? un moyen de condenser un peu tout ça, d'éviter de répéter un "corps" de msgbox identique ?
merci !!
A voir également:
- Raccourcir une macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Raccourcir url - Guide
- Raccourcir mp3 - Guide
7 réponses
Bonjour,
Déjà, pourquoi faire 3 boucles alors qu'elles sont identiques ?
Ensuite, le début de ton msgbox étant identique, tu pourrais le mettre dans une variable
Un truc du genre
Déjà, pourquoi faire 3 boucles alors qu'elles sont identiques ?
Ensuite, le début de ton msgbox étant identique, tu pourrais le mettre dans une variable
Un truc du genre
Dim msgStart as String Dim msg2 as String Dim sh as WorkSheet Set Sh = Sheets("Compteur électrique") msgStart = "Erreur : relevé 'Compteur électrique' inférieur au précédent." & Chr(10) & "En colonne " msg2 = "Vérifiez et modifiez sur feuille 'Ordre de relevé'" & "en colonne " For i = 6 To Range("A65536").End(xlUp).Row If IsNumeric(Sh.Cells(i - 1, 10)) And Sh.Cells(i, 10) <> "" And Sh.Cells(i, 10) < Sh.Cells(i - 1, 10).Value Then MsgBox (msgStart & "10" & Chr(10) & msg2 & "27" & "puis relancez le transfert de donnée. ") End If If IsNumeric(Sh.Cells(i - 1, 11)) And Sh.Cells(i, 11) <> "" And Sh.Cells(i, 11) < Sh.Cells(i - 1, 11).Value Then MsgBox (msgStart & "11" & Chr(10) & msg2 & "28" & "puis relancez le transfert de donnée. ") End If If IsNumeric(Sh.Cells(i - 1, 12)) And Sh.Cells(i, 12) <> "" And Sh.Cells(i, 12) < Sh.Cells(i - 1, 12).Value Then MsgBox (msgStart & "12" & Chr(10) & msg2 & "29" & "puis relancez le transfert de donnée. ") End If Next
jordane45
Messages postés
40050
Statut
Modérateur
4 754
Dans l'idée de michel, toujours pour éviter de faire plusieurs boucles (et donc ralentir le programme...)
Bonjour,
peut-^tre avec une macro parametrée
mais il m'est impossible de vérifier n'ayant pas le classeur sous les yeux
ta ligne de code pourrait être plus concise (et donc lisible) en utilisant les blocs
peut-^tre avec une macro parametrée
Option Explicit
'------------------------------------------------
Sub vérifier_compteurs()
Dim Colonne As Byte
For Colonne = 10 To 12 (12? etc)
Call analyser_compteur(Colonne)
Next
End Sub
Sub analyser_compteur(Col)
Dim i As Integer
For i = 6 To Range("A65536").End(xlUp).Row
If IsNumeric(Sheets("Compteur électrique").Cells(i - 1, Col)) And Sheets("Compteur électrique").Cells(i, Col) <> "" And Sheets("Compteur électrique").Cells(i, Col) < Sheets("Compteur électrique").Cells(i - 1, Col).Value Then
MsgBox ("Erreur : relevé 'Compteur électrique' inférieur au précédent." & Chr(10) & "En colonne " & Col & Chr(10) & "Vérifiez et modifiez sur feuille 'Ordre de relevé'" & "en colonne " & Col + 17 & "puis relancez le transfert de donnée. ")
End If
Next
End Sub
mais il m'est impossible de vérifier n'ayant pas le classeur sous les yeux
ta ligne de code pourrait être plus concise (et donc lisible) en utilisant les blocs
Waouh ! merci à tous !
je décortique tout ça, je teste dans mon classeur et reviens vers vous !!
encore merci :)
je décortique tout ça, je teste dans mon classeur et reviens vers vous !!
encore merci :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je me demandais pourquoi dans la msgbox vous mettiez "col +17". Et j'ai compris, mais la feuille "ordre de donnée" n'a pas toujours des colonnes qui se suivent (dsl, je n'avais pas pensé à ce point important). Ici on a 27 28 29 , mais pour d'autres c'est complètement disparate, donc "col +17" ne fonctionne plus.
J'en conclue que c'est la réponse de Jordane qui me convient le plus, car il faut malgré tout indiquer la colonne nominativement.
J'aimerai envoyer un extrait du fichier pour que ça soit plus clair, mais je n'arrive pas à trouver comment on fait... ?
J'en conclue que c'est la réponse de Jordane qui me convient le plus, car il faut malgré tout indiquer la colonne nominativement.
J'aimerai envoyer un extrait du fichier pour que ça soit plus clair, mais je n'arrive pas à trouver comment on fait... ?
Tu peux le déposer sur un site comme cijoint
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
Je t'ai répondu en te faisant remarquer que tu m'avais bossé pour rien mais le dénommé Jordane, tout imbu de sa médaille de modérateur, l'a censuré
Pour rien ??? ben non... je n'avais pas penser qu'on pouvait faire ce que tu m'as donné (Sub vérifier_compteurs()).
Sois bien sur qu'à mon niveau limité, toute aide de ce type me fait avancer !!
alors, oui, il manquait un paramètre, d'importance qui plus est, mais rien n'est jeté : ça me servira probablement ailleurs.
Donc, merci à vous deux pour ce beau coup de main :)
Sois bien sur qu'à mon niveau limité, toute aide de ce type me fait avancer !!
alors, oui, il manquait un paramètre, d'importance qui plus est, mais rien n'est jeté : ça me servira probablement ailleurs.
Donc, merci à vous deux pour ce beau coup de main :)
Bonjour,
j'espère que vous avez passé un agréable mois de mai !! :)
https://www.cjoint.com/c/HEwiPGsVIVD
Ci-joint le lien vers le fichier entier pas encore modifier par vos remarques. j'ai bien compris que je pouvais simplifier la lecture au moins par des déclarations pour simplifier le nom des feuilles...
Si vous voyez d'autres simplification, je suis preneur !!
Merci à vous et bonne journée !
j'espère que vous avez passé un agréable mois de mai !! :)
https://www.cjoint.com/c/HEwiPGsVIVD
Ci-joint le lien vers le fichier entier pas encore modifier par vos remarques. j'ai bien compris que je pouvais simplifier la lecture au moins par des déclarations pour simplifier le nom des feuilles...
Si vous voyez d'autres simplification, je suis preneur !!
Merci à vous et bonne journée !