Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
A6EB8A21-FF6A-4D7E-ADC7-0C1E332E94FF@microsoft.com...
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
A6EB8A21-FF6A-4D7E-ADC7-0C1E332E94FF@microsoft.com...
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
A6EB8A21-FF6A-4D7E-ADC7-0C1E332E94FF@microsoft.com...
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
A6EB8A21-FF6A-4D7E-ADC7-0C1E332E94FF@microsoft.com...
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net
Bonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
économises réellement en faisant appel à une macro externe. Ensuite ça
rend le code de la macro principale et le déverminage beaucoup plus
facile : tu peux tester séparément chaque bout de ta macro.
Tu verras qu'en structurant ainsi tes macros, tu gagneras aussi beaucoup
de temps et de compétences : c'est bien plus pratique ensuite pour
récupérer des bouts de codes déjà écrits !
Autre point important si tu as des problèmes de macros trop longues : si
tu as utilisé pas mal l'enregistreur de macros pour écrire ton code,
rappelle toi qu'il fait deux trucs inutiles : 1) il sélectionne toujours
ce sur quoi il travaille (feuille, cellule...) ce qui est complètement
inutile dans la majorité des cas. 2) il précise toutes les valeurs pour
tous les arguments, même optionnels, de chaque instruction. On peut donc
99,9 fois sur 100 considérablement élaguer le code de l'enregistreur.
Là encore, pour tester ces instructions, tu les mets dans une macro test
que tu appelles depuis la macro principale et tu mets en commentaire
petit à petit les différentes lignes du verbiage de l'enregistreur
jusqu'à isoler la plus petite portion de code qui fait seulement ce dont
tu as besoin.
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.netBonjour a tous
J'ai donc essaye de cinder ma procedure en 2
La procedure est sur un bouton VALIDER ds un UF1, la procedure cree une
feuille puis aplique des valeurs à certaine cellule en fonction des combobox
renseignées ds UF1, puis tjs en fonction des combobox renseignee ds UF1 me
fait un tri d'une feuil pour copier ce tri sur la nouvelle feuil creer,puis
encore en fonction des combobox renseigne ds UF1 me fait etc...
J'ai donc cindé la premiere parti en la copiant ds un modul Sub SUITE()et
Call SUITE j'ai un Bug Objet Requis
Qd j'affecte cette macro a un deuxieme bouton ds UF1 (Par ex VALIDER 2) tout
fonctionne parfaitement, mais 2 bouton c'est pas terrible!!!
J'ai fait plusieur essai sans resultat c'est pourquoi je me tourne vers vous
une nouvelle fois
Merci d'avance
On peut même remplacer la boucle
For a = 39 dans la procédure proposée par
la première procédure par simplement
un copie d'une plage de cellules proposée
dans la deuxième procédure
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
For A = 1 To 39
.Cells(Ligne, A) = Cells(C.Row, A)
Next
Ligne = Ligne + 1
End If
Next
End With
End Sub
'-----------------------
par
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
Range(Cells(C.Row, 1), Cells(C.Row, 39)).Address
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
'Copie de la plage de cellule
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)).value= _
Range(Cells(C.Row, 1), Cells(C.Row, 39)).value
Ligne = Ligne + 1
End If
Next
End With
End Sub
'------------------------------
Dans la toute première procédure proposée, tu obtiendrais quelque chose dans le gennre :
Sub test()
Dim Ligne As Long, C As Range
Dim Rg As Range, A As Integer
Sheets("Archive").Select
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" And _
.ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" _
And ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
End If
End Sub
'----------------------
"IMER09" a écrit dans le message de news:
J'ai 8 Cobox ds un UF, chaque box recupere les criteres de 8 colonnes d'une
feuil archive qui comporte 39 colonnes
Avec un bouton valider je cree une feuil dont le non et une compilation des
CB renseigner je trie ensuite la feuille archive en fonction des criteres de
chaque CB que je colle ds ma new feuil cree(code ci dessous)
Pour finir je fait un certain nbre de calcul ds cette feuil cree
J'ai donc une macro tres longue que je voudrai encore agrandir
Le pb, je croix, est que mes CB n'ont pas forcement toute une valeur,
certaine reste blanche. J'ai donc du mettre ds mon code un nbr de If
important
Rien que pour le trie par ex j'ai 11 If qui corresponde a 11 critere de
trie possible
voici une partie de mon Code:
Sheets("Archive").Select
Dim Ligne As Long, C As Range
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 _
And C.Offset(, 3) = Me.ComboBox2 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
Etc...
Pour le nom de la feuil c'est la meme chose etc
J'espere avoir ete explicite merci et malgres tout pas trop long !!!
--
IMER09Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
On peut même remplacer la boucle
For a = 39 dans la procédure proposée par
la première procédure par simplement
un copie d'une plage de cellules proposée
dans la deuxième procédure
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
For A = 1 To 39
.Cells(Ligne, A) = Cells(C.Row, A)
Next
Ligne = Ligne + 1
End If
Next
End With
End Sub
'-----------------------
par
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
Range(Cells(C.Row, 1), Cells(C.Row, 39)).Address
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
'Copie de la plage de cellule
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)).value= _
Range(Cells(C.Row, 1), Cells(C.Row, 39)).value
Ligne = Ligne + 1
End If
Next
End With
End Sub
'------------------------------
Dans la toute première procédure proposée, tu obtiendrais quelque chose dans le gennre :
Sub test()
Dim Ligne As Long, C As Range
Dim Rg As Range, A As Integer
Sheets("Archive").Select
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" And _
.ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" _
And ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
End If
End Sub
'----------------------
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
EB321E71-0C17-41BF-BFB3-5F2583A712DD@microsoft.com...
J'ai 8 Cobox ds un UF, chaque box recupere les criteres de 8 colonnes d'une
feuil archive qui comporte 39 colonnes
Avec un bouton valider je cree une feuil dont le non et une compilation des
CB renseigner je trie ensuite la feuille archive en fonction des criteres de
chaque CB que je colle ds ma new feuil cree(code ci dessous)
Pour finir je fait un certain nbre de calcul ds cette feuil cree
J'ai donc une macro tres longue que je voudrai encore agrandir
Le pb, je croix, est que mes CB n'ont pas forcement toute une valeur,
certaine reste blanche. J'ai donc du mettre ds mon code un nbr de If
important
Rien que pour le trie par ex j'ai 11 If qui corresponde a 11 critere de
trie possible
voici une partie de mon Code:
Sheets("Archive").Select
Dim Ligne As Long, C As Range
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 _
And C.Offset(, 3) = Me.ComboBox2 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
Etc...
Pour le nom de la feuil c'est la meme chose etc
J'espere avoir ete explicite merci et malgres tout pas trop long !!!
--
IMER09
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
A6EB8A21-FF6A-4D7E-ADC7-0C1E332E94FF@microsoft.com...
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
On peut même remplacer la boucle
For a = 39 dans la procédure proposée par
la première procédure par simplement
un copie d'une plage de cellules proposée
dans la deuxième procédure
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
For A = 1 To 39
.Cells(Ligne, A) = Cells(C.Row, A)
Next
Ligne = Ligne + 1
End If
Next
End With
End Sub
'-----------------------
par
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
Range(Cells(C.Row, 1), Cells(C.Row, 39)).Address
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
'Copie de la plage de cellule
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)).value= _
Range(Cells(C.Row, 1), Cells(C.Row, 39)).value
Ligne = Ligne + 1
End If
Next
End With
End Sub
'------------------------------
Dans la toute première procédure proposée, tu obtiendrais quelque chose dans le gennre :
Sub test()
Dim Ligne As Long, C As Range
Dim Rg As Range, A As Integer
Sheets("Archive").Select
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" And _
.ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" _
And ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
End If
End Sub
'----------------------
"IMER09" a écrit dans le message de news:
J'ai 8 Cobox ds un UF, chaque box recupere les criteres de 8 colonnes d'une
feuil archive qui comporte 39 colonnes
Avec un bouton valider je cree une feuil dont le non et une compilation des
CB renseigner je trie ensuite la feuille archive en fonction des criteres de
chaque CB que je colle ds ma new feuil cree(code ci dessous)
Pour finir je fait un certain nbre de calcul ds cette feuil cree
J'ai donc une macro tres longue que je voudrai encore agrandir
Le pb, je croix, est que mes CB n'ont pas forcement toute une valeur,
certaine reste blanche. J'ai donc du mettre ds mon code un nbr de If
important
Rien que pour le trie par ex j'ai 11 If qui corresponde a 11 critere de
trie possible
voici une partie de mon Code:
Sheets("Archive").Select
Dim Ligne As Long, C As Range
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 _
And C.Offset(, 3) = Me.ComboBox2 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
Etc...
Pour le nom de la feuil c'est la meme chose etc
J'espere avoir ete explicite merci et malgres tout pas trop long !!!
--
IMER09Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
On peut même remplacer la boucle
For a = 39 dans la procédure proposée par
la première procédure par simplement
un copie d'une plage de cellules proposée
dans la deuxième procédure
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
For A = 1 To 39
.Cells(Ligne, A) = Cells(C.Row, A)
Next
Ligne = Ligne + 1
End If
Next
End With
End Sub
'-----------------------
par
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
Range(Cells(C.Row, 1), Cells(C.Row, 39)).Address
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
'Copie de la plage de cellule
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)).value= _
Range(Cells(C.Row, 1), Cells(C.Row, 39)).value
Ligne = Ligne + 1
End If
Next
End With
End Sub
'------------------------------
Dans la toute première procédure proposée, tu obtiendrais quelque chose dans le gennre :
Sub test()
Dim Ligne As Long, C As Range
Dim Rg As Range, A As Integer
Sheets("Archive").Select
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" And _
.ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" _
And ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
End If
End Sub
'----------------------
"IMER09" a écrit dans le message de news:
J'ai 8 Cobox ds un UF, chaque box recupere les criteres de 8 colonnes d'une
feuil archive qui comporte 39 colonnes
Avec un bouton valider je cree une feuil dont le non et une compilation des
CB renseigner je trie ensuite la feuille archive en fonction des criteres de
chaque CB que je colle ds ma new feuil cree(code ci dessous)
Pour finir je fait un certain nbre de calcul ds cette feuil cree
J'ai donc une macro tres longue que je voudrai encore agrandir
Le pb, je croix, est que mes CB n'ont pas forcement toute une valeur,
certaine reste blanche. J'ai donc du mettre ds mon code un nbr de If
important
Rien que pour le trie par ex j'ai 11 If qui corresponde a 11 critere de
trie possible
voici une partie de mon Code:
Sheets("Archive").Select
Dim Ligne As Long, C As Range
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 _
And C.Offset(, 3) = Me.ComboBox2 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
Etc...
Pour le nom de la feuil c'est la meme chose etc
J'espere avoir ete explicite merci et malgres tout pas trop long !!!
--
IMER09Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
On peut même remplacer la boucle
For a = 39 dans la procédure proposée par
la première procédure par simplement
un copie d'une plage de cellules proposée
dans la deuxième procédure
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
For A = 1 To 39
.Cells(Ligne, A) = Cells(C.Row, A)
Next
Ligne = Ligne + 1
End If
Next
End With
End Sub
'-----------------------
par
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
Range(Cells(C.Row, 1), Cells(C.Row, 39)).Address
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
'Copie de la plage de cellule
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)).value= _
Range(Cells(C.Row, 1), Cells(C.Row, 39)).value
Ligne = Ligne + 1
End If
Next
End With
End Sub
'------------------------------
Dans la toute première procédure proposée, tu obtiendrais quelque chose dans le gennre :
Sub test()
Dim Ligne As Long, C As Range
Dim Rg As Range, A As Integer
Sheets("Archive").Select
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" And _
.ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" _
And ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
End If
End Sub
'----------------------
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
EB321E71-0C17-41BF-BFB3-5F2583A712DD@microsoft.com...
J'ai 8 Cobox ds un UF, chaque box recupere les criteres de 8 colonnes d'une
feuil archive qui comporte 39 colonnes
Avec un bouton valider je cree une feuil dont le non et une compilation des
CB renseigner je trie ensuite la feuille archive en fonction des criteres de
chaque CB que je colle ds ma new feuil cree(code ci dessous)
Pour finir je fait un certain nbre de calcul ds cette feuil cree
J'ai donc une macro tres longue que je voudrai encore agrandir
Le pb, je croix, est que mes CB n'ont pas forcement toute une valeur,
certaine reste blanche. J'ai donc du mettre ds mon code un nbr de If
important
Rien que pour le trie par ex j'ai 11 If qui corresponde a 11 critere de
trie possible
voici une partie de mon Code:
Sheets("Archive").Select
Dim Ligne As Long, C As Range
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 _
And C.Offset(, 3) = Me.ComboBox2 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
Etc...
Pour le nom de la feuil c'est la meme chose etc
J'espere avoir ete explicite merci et malgres tout pas trop long !!!
--
IMER09
Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" <toto@discussions.microso.com> a écrit dans le message de news:
A6EB8A21-FF6A-4D7E-ADC7-0C1E332E94FF@microsoft.com...
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09
Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09
Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu
On peut même remplacer la boucle
For a = 39 dans la procédure proposée par
la première procédure par simplement
un copie d'une plage de cellules proposée
dans la deuxième procédure
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
For A = 1 To 39
.Cells(Ligne, A) = Cells(C.Row, A)
Next
Ligne = Ligne + 1
End If
Next
End With
End Sub
'-----------------------
par
'-------------------------
Sub Execution(Ligne As Long, Rg As Range)
With Sheets(ShDepart)
For Each C In Rg
Range(Cells(C.Row, 1), Cells(C.Row, 39)).Address
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
'Copie de la plage de cellule
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)).value= _
Range(Cells(C.Row, 1), Cells(C.Row, 39)).value
Ligne = Ligne + 1
End If
Next
End With
End Sub
'------------------------------
Dans la toute première procédure proposée, tu obtiendrais quelque chose dans le gennre :
Sub test()
Dim Ligne As Long, C As Range
Dim Rg As Range, A As Integer
Sheets("Archive").Select
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" And _
.ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" _
And ComboBox3.Value = "" And ComboBox4.Value = "" _
And ComboBox5.Value = "" And ComboBox6.Value = "" _
And ComboBox7.Value <> "FAUX" And ComboBox8.Value = "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
Set Rg = Range("AJ4", Range("AJ65536").End(xlUp))
For Each C In Rg
If C = Me.ComboBox7 And C.Offset(, 3) = Me.ComboBox2 Then
.Range(.Cells(Ligne, 1), .Cells(Ligne, 39)) = _
Range(Cells(C.Row, 1), Cells(C.Row, 39))
Ligne = Ligne + 1
End If
Next
End If
End Sub
'----------------------
"IMER09" a écrit dans le message de news:
J'ai 8 Cobox ds un UF, chaque box recupere les criteres de 8 colonnes d'une
feuil archive qui comporte 39 colonnes
Avec un bouton valider je cree une feuil dont le non et une compilation des
CB renseigner je trie ensuite la feuille archive en fonction des criteres de
chaque CB que je colle ds ma new feuil cree(code ci dessous)
Pour finir je fait un certain nbre de calcul ds cette feuil cree
J'ai donc une macro tres longue que je voudrai encore agrandir
Le pb, je croix, est que mes CB n'ont pas forcement toute une valeur,
certaine reste blanche. J'ai donc du mettre ds mon code un nbr de If
important
Rien que pour le trie par ex j'ai 11 If qui corresponde a 11 critere de
trie possible
voici une partie de mon Code:
Sheets("Archive").Select
Dim Ligne As Long, C As Range
With Sheets(ShDepart)
'CA TOTAL/1/1
If ComboBox1.Value <> "" And ComboBox2.Value = "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 And C.Offset(, -33) = Me.ComboBox1 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
'CA TOTAL/1/2
If ComboBox1.Value = "" And ComboBox2.Value <> "" And ComboBox3.Value = "" _
And ComboBox4.Value = "" And ComboBox5.Value = "" _
And ComboBox6.Value = "" And ComboBox7.Value <> "FAUX" And ComboBox8.Value > "" Then
Ligne = .Range("A65536").End(xlUp).Row + 1
For Each C In Range("AJ4", Range("AJ65536").End(xlUp))
If C = Me.ComboBox7 _
And C.Offset(, 3) = Me.ComboBox2 Then
.Cells(Ligne, 1) = Cells(C.Row, 1)
.Cells(Ligne, 2) = Cells(C.Row, 2)
.Cells(Ligne, 3) = Cells(C.Row, 3)
.Cells(Ligne, 4) = Cells(C.Row, 4)
.Cells(Ligne, 5) = Cells(C.Row, 5)
.Cells(Ligne, 6) = Cells(C.Row, 6)
.Cells(Ligne, 7) = Cells(C.Row, 7)
.Cells(Ligne, 8) = Cells(C.Row, 8)
.Cells(Ligne, 9) = Cells(C.Row, 9)
.Cells(Ligne, 10) = Cells(C.Row, 10)
.Cells(Ligne, 11) = Cells(C.Row, 11)
.Cells(Ligne, 12) = Cells(C.Row, 12)
.Cells(Ligne, 13) = Cells(C.Row, 13)
.Cells(Ligne, 14) = Cells(C.Row, 14)
.Cells(Ligne, 15) = Cells(C.Row, 15)
.Cells(Ligne, 16) = Cells(C.Row, 16)
.Cells(Ligne, 17) = Cells(C.Row, 17)
.Cells(Ligne, 18) = Cells(C.Row, 18)
.Cells(Ligne, 19) = Cells(C.Row, 19)
.Cells(Ligne, 20) = Cells(C.Row, 20)
.Cells(Ligne, 21) = Cells(C.Row, 21)
.Cells(Ligne, 22) = Cells(C.Row, 22)
.Cells(Ligne, 23) = Cells(C.Row, 23)
.Cells(Ligne, 24) = Cells(C.Row, 24)
.Cells(Ligne, 25) = Cells(C.Row, 25)
.Cells(Ligne, 26) = Cells(C.Row, 26)
.Cells(Ligne, 27) = Cells(C.Row, 27)
.Cells(Ligne, 28) = Cells(C.Row, 28)
.Cells(Ligne, 29) = Cells(C.Row, 29)
.Cells(Ligne, 30) = Cells(C.Row, 30)
.Cells(Ligne, 31) = Cells(C.Row, 31)
.Cells(Ligne, 32) = Cells(C.Row, 32)
.Cells(Ligne, 33) = Cells(C.Row, 33)
.Cells(Ligne, 34) = Cells(C.Row, 34)
.Cells(Ligne, 35) = Cells(C.Row, 35)
.Cells(Ligne, 36) = Cells(C.Row, 36)
.Cells(Ligne, 37) = Cells(C.Row, 37)
.Cells(Ligne, 38) = Cells(C.Row, 38)
.Cells(Ligne, 39) = Cells(C.Row, 39)
Ligne = Ligne + 1
End If
Next C
End If
Etc...
Pour le nom de la feuil c'est la meme chose etc
J'espere avoir ete explicite merci et malgres tout pas trop long !!!
--
IMER09Tu peux publier ton code ici ... mais pour faciliter la tâche à tous,
A ) Tu publies ton code ici par tranche de 25 lignes environ.
en expliquant ce que chaque tranche de code est supposée
faire (nul besoin d'expliquer chaque ligne de code)
B ) il y a sûrement quelqu'un qui t'aidera à améliorer chaque tranche
de code ...
C ) Tu peux à l'aide de l'aide du site de Cjoint.com publier ton fichier
en nous indiquant ici l'adresse où se trouve ton fichier ici, en ne
laissant à l'intérieur que l'essentiel. Tu as droit à 500 Kilo octets.
(sans oublier les informations sur ce que tu tentes de réaliser )
"IMER09" a écrit dans le message de news:
Bin me revoila je pietine un peu, un petit ex simple serait le bien venu
Un UF avec plusieur Box, la valeur de chaque box concatener en A1 par ex
--
IMER09Je te remerci pour ce petit cour, c'est en effet des bases que je ne connait
pas ou peu
Je vais essaye de mettre en pratique
Merci Misange
--
IMER09Bonjour
le principe c'est pas tant de couper au milieu une proc et d'appeller la
suite que d'identifier des "sous-procédures" dans ta grande macro.
Par exemple, si ta macro récupère les valeurs d'un textbox et effectue
des vérifications sur le contenu pour les valider, au lieu de mettre
dans la même macro la récup des valeurs et leur validation, tu récupères
dans la macro principale tes valeurs de textbox, tu les affectes à une
variable et tu utilises une une autre macro (ou fonction suivant le cas)
pour vérifier ces valeurs
sub mamacro()
mavariable=txtbox1.text
call verif
sheets("truc").range("machin")=mavariable
end sub
sub verif()
if mavariable .... then
'ici tu fais tous les calculs ou vérif dont tu as besoin
end if
end sub
Evidemment si ta vérif ne s'écrit que sur une seule ligne ça n'a pas
grand intérêt de faire çàa. MAis bien souvent, tu as besoin de faire le
même genre de vérif plusieurs fois dans ta macro et dans ce cas, tu