Excel Macro traitement de numéros (suite) :)
Résolu
informatifien
Messages postés
741
Date d'inscription
Statut
Membre
Dernière intervention
-
informatifien Messages postés 741 Date d'inscription Statut Membre Dernière intervention -
informatifien Messages postés 741 Date d'inscription Statut Membre Dernière intervention -
Re-bonjour à tous,
Bon ce matin je me suis un peu égaré et posté mes problèmes dans un mauvais ordre mais on a quand même réussi merci à pijaku,moiced59 et Michel_m et tous les autres pour leur patience. . .bon j'ai pris le temps de bien développer le but de mon fichier et tout et tout j'espere avoir mieux orienté le sujet cette fois:
Alors voilà dans la finalité comment je vois marcher mon fichier : je l’ouvre, je lance l’USF (il compte les trous) je vois où il y a de la place (dans les serie 8000,9000 . . . ), je demande la première place libre dans la série choisie, je l’utilise il s’ajoute donc dans la liste et à la place correspondante.
Et voilà comment est fait mon fichier :
J’ai 25 onglets, un qui contient tous les numéros existants (plus trop utile mais bon) et la liste des séries, que j’utilise dans l'USF. Dans chaque autres onglet il y a les numéros triés de chaque série 8000,9000 . . .chacun peut contenir 1000 numéros maxi de 8000 à 8999,de 9000 à 9999 qui seront donc toujours inscrit dans la plage A1 :A1000, le problème c’est que les liste comporte des trous on peut par exemple avoir 8523-8525 (1 saut) ou pire 8523-8533 (10 sauts plus à certain endroits) dans certain onglet j’ai la cellule A1 vide car la liste peut commencé à 8001 ou pire 9400 auquel cas je place le numéro en question à la ligne correspondante A401 pour 9400 par exemple. Le but est d’insérer autant de cellules vides que de numéros manquant entre 2, ensuite c’est là qu’il me faut faire le comptage pour savoir combien de place dispo dans tel ou tel série (via un affichage en TxtBox sur mon USF) et au final j’ouvre mon USF vois qu’il y a de la place en 9000 je demande quel est le premier numéro libre et bam ma macro me le donne (ça j’ai réussi j’ai fai un test) et si je l’utilise et bien crac ça inscrit le numéro à son emplacement le comptage se met à jour une place de moins dans la série des 9000 .
Voilà n'hésitez pas si besoin plus d'infos. . . .c'est vraiment pas facil d'ecrire ce qu'on a dans la tete :s
Meric d'avance
Bon ce matin je me suis un peu égaré et posté mes problèmes dans un mauvais ordre mais on a quand même réussi merci à pijaku,moiced59 et Michel_m et tous les autres pour leur patience. . .bon j'ai pris le temps de bien développer le but de mon fichier et tout et tout j'espere avoir mieux orienté le sujet cette fois:
Alors voilà dans la finalité comment je vois marcher mon fichier : je l’ouvre, je lance l’USF (il compte les trous) je vois où il y a de la place (dans les serie 8000,9000 . . . ), je demande la première place libre dans la série choisie, je l’utilise il s’ajoute donc dans la liste et à la place correspondante.
Et voilà comment est fait mon fichier :
J’ai 25 onglets, un qui contient tous les numéros existants (plus trop utile mais bon) et la liste des séries, que j’utilise dans l'USF. Dans chaque autres onglet il y a les numéros triés de chaque série 8000,9000 . . .chacun peut contenir 1000 numéros maxi de 8000 à 8999,de 9000 à 9999 qui seront donc toujours inscrit dans la plage A1 :A1000, le problème c’est que les liste comporte des trous on peut par exemple avoir 8523-8525 (1 saut) ou pire 8523-8533 (10 sauts plus à certain endroits) dans certain onglet j’ai la cellule A1 vide car la liste peut commencé à 8001 ou pire 9400 auquel cas je place le numéro en question à la ligne correspondante A401 pour 9400 par exemple. Le but est d’insérer autant de cellules vides que de numéros manquant entre 2, ensuite c’est là qu’il me faut faire le comptage pour savoir combien de place dispo dans tel ou tel série (via un affichage en TxtBox sur mon USF) et au final j’ouvre mon USF vois qu’il y a de la place en 9000 je demande quel est le premier numéro libre et bam ma macro me le donne (ça j’ai réussi j’ai fai un test) et si je l’utilise et bien crac ça inscrit le numéro à son emplacement le comptage se met à jour une place de moins dans la série des 9000 .
Voilà n'hésitez pas si besoin plus d'infos. . . .c'est vraiment pas facil d'ecrire ce qu'on a dans la tete :s
Meric d'avance
A voir également:
- Excel Macro traitement de numéros (suite) :)
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Déplacer colonne excel - Guide
32 réponses
Bonjour,
Comme expliqué au poste 25 dont voici la procédure:
Salutations.
Jean-Pierre
Comme expliqué au poste 25 dont voici la procédure:
Sub CherchePremier(numserie) Dim y As Long 'trier la liste Columns("A:A").Sort Key1:=Columns(1), Order1:=xlAscending, Header:=xlGuess For y = 1 To WorksheetFunction.Count(Columns(1)) If Cells(y, 1) <> numserie + (y - 1) Then z = numserie + (y - 1) Exit Sub End If Next y End Sub--
Salutations.
Jean-Pierre
Bonjour,
Petite explication pas par pas de la procédure (P = procédure et E = explication) :
P.- Sub CherchePremier(numserie)
E.- nom de la procédure avec argument (numserie) qui récupère le numéro de série de la valeur de la UserForm
P.- Columns("A:A").Sort Key1:=Columns(1), Order1:=xlAscending, Header:=xlGuess
E.- Trier la colonne pour l’ordonner et éliminer les vides éventuels
P.- For y = 1 To WorksheetFunction.Count(Columns(1))
E.- Boucle sur la colonne pour la plage de valeur présente la dernière ligne est trouvé avec ; [WorksheetFunction.Count(Columns(1))]
P.- If Cells(y, 1) <> numserie + (y - 1) Then
z = numserie + (y - 1)
Exit Sub
End If
E.- Contrôle si le numéro de la colonne est différent du compteur
Si oui alors on attribue le numéro à la variable [Z] qui sera reprise dans la procédure pour la UserForm.et le [Exit Sub] sort de la procédure puisque le numéro est trouvé
Si non le [Next y] renvoie au début de la boucle.
Pour finir End Sub.
Petite explication pas par pas de la procédure (P = procédure et E = explication) :
P.- Sub CherchePremier(numserie)
E.- nom de la procédure avec argument (numserie) qui récupère le numéro de série de la valeur de la UserForm
P.- Columns("A:A").Sort Key1:=Columns(1), Order1:=xlAscending, Header:=xlGuess
E.- Trier la colonne pour l’ordonner et éliminer les vides éventuels
P.- For y = 1 To WorksheetFunction.Count(Columns(1))
E.- Boucle sur la colonne pour la plage de valeur présente la dernière ligne est trouvé avec ; [WorksheetFunction.Count(Columns(1))]
P.- If Cells(y, 1) <> numserie + (y - 1) Then
z = numserie + (y - 1)
Exit Sub
End If
E.- Contrôle si le numéro de la colonne est différent du compteur
Si oui alors on attribue le numéro à la variable [Z] qui sera reprise dans la procédure pour la UserForm.et le [Exit Sub] sort de la procédure puisque le numéro est trouvé
Si non le [Next y] renvoie au début de la boucle.
Pour finir End Sub.
Ce que tu viens de décrire n'est pas du tout le ou les m^mes problèmes...
Aurait on bosser pour rien ?
Aurait on bosser pour rien ?
non du tous les autres problèmes été le début de mon projet et concerné le meme fichier, mais je m'y été mal pris là je résume le projet le reste est bel est bien réglé grace à vous tous, en faite j'ai tendance à attaquer un truc je me dis comment je fais.... hop j'ai une idée en tete, j'attaque je tombe sur un "os" et je me trouve bloqué j'essaye de le resoudre sur ccm et en attendant je part sur autre chose et je me retrouve bloqué encore une fois j'essaye de ne pas trop vous embéter alors je pose des problèmes au compte goutte alors que je devrais exposer mon projet et demander conseil avant d'attquer comme me la soufflé pijaku. c'est que j'apprend vraiment à l'arrache le VBA, je n'ai suivi aucun cours, je n'ai comme base les seules macro que j'ai dejà faite en partie sur CCM, donc meme si parfois je comprends certain cheminement d'autres me parraisse incomprehenssible. . . .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Donc, on a bien bossé pour rien...malgré les conseils de Pijaku.
Prend pas ca mal, mais tu me fais penser à une abeille contre la vitre....
Si tu veux apprendre commence par des problèmes simples et progresse petit pas par petits pas
si j'ai compris(...) ta demande
TU écris un nombre (peu importe comment)
la partie entière du nombre/1000 te donne le préfixe de ton onglet
les noms d'onglet étant du texte il faut transformer le nombre en "strIng"
sheets(cstr(int(tonnombre/1000))*1000)
la partie décimal du nombre cad le modulo 1 du nombre te donne la ligne du nombre -1 (ligne1 on a 12000 par ex)
donc la ligne est déterminée par
(tonnombre/1000 MOdulo 1)+1
lig=((tonnombre/1000) MOD 1)+1
et tu as donc
sheets(cstr(int(tonnombre/1000))*1000).cells(lig,1)=tonnombre
non testé
Prend pas ca mal, mais tu me fais penser à une abeille contre la vitre....
Si tu veux apprendre commence par des problèmes simples et progresse petit pas par petits pas
si j'ai compris(...) ta demande
TU écris un nombre (peu importe comment)
la partie entière du nombre/1000 te donne le préfixe de ton onglet
les noms d'onglet étant du texte il faut transformer le nombre en "strIng"
sheets(cstr(int(tonnombre/1000))*1000)
la partie décimal du nombre cad le modulo 1 du nombre te donne la ligne du nombre -1 (ligne1 on a 12000 par ex)
donc la ligne est déterminée par
(tonnombre/1000 MOdulo 1)+1
lig=((tonnombre/1000) MOD 1)+1
et tu as donc
sheets(cstr(int(tonnombre/1000))*1000).cells(lig,1)=tonnombre
non testé
euuuuuh non vous avez pas bossé pour rien j'ai résolu certain des problème et par contre oui le dernier code que tu as posté est arrivé trop tard j'avai "retourné ma veste " à la manière de jacques dutronc lol et pris la décision de faire les choses à la main mais j'ai gardé ton code car je risque de devoir traité une autre extreaction.
pour ce que tu viens de me dire euuuh je t'avourai que j'ai pas compris grand chose, exépté le fait que mon post n'est pas plus clair que les autres :s, car tu n'as (et ne le prned pa smal non plus) apparement pas saisi le truc, et donc histoire de ne pas vous faire bosser pour des pruneaux et de ne pas me retrouver ecrasé sur un carreaux tel une abeille :) je pense que je vais poster le fichier en question ce soir, vous aurez ainsi tout le plaisir de mieux saisir mon objectif. . .
Le menu se lance avec un ptit Ctrl+m je vais mettre un onglet "mode d'emploi" pour refaire un exposé de ce que je recherche . . .
Pour ce qui est de l'apprentissage, ben j'essaye de faire ce qu'on me demande ma situation est "complexe" j'était dans la mécanique, je suis réformé donc dans les bureaux, et ayant fais une formation de technicien d'assistance informatique mes employeur pense que je suis !!""INFORMATICIEN""!! donc je sais faire un jeux video,un logiciel,construire un CPU aussi tant qu'on y est enfin bref . . .plein de bonne volonté j'essaye comme je peux d'arriver à faire les outils qu'on me demande mais je reste conscient que sans CCM (vous) . . . .peux de ces outils marcherai c'est pourquoi je remerci souvent et encore toute la communauté CCM
pour ce que tu viens de me dire euuuh je t'avourai que j'ai pas compris grand chose, exépté le fait que mon post n'est pas plus clair que les autres :s, car tu n'as (et ne le prned pa smal non plus) apparement pas saisi le truc, et donc histoire de ne pas vous faire bosser pour des pruneaux et de ne pas me retrouver ecrasé sur un carreaux tel une abeille :) je pense que je vais poster le fichier en question ce soir, vous aurez ainsi tout le plaisir de mieux saisir mon objectif. . .
Le menu se lance avec un ptit Ctrl+m je vais mettre un onglet "mode d'emploi" pour refaire un exposé de ce que je recherche . . .
Pour ce qui est de l'apprentissage, ben j'essaye de faire ce qu'on me demande ma situation est "complexe" j'était dans la mécanique, je suis réformé donc dans les bureaux, et ayant fais une formation de technicien d'assistance informatique mes employeur pense que je suis !!""INFORMATICIEN""!! donc je sais faire un jeux video,un logiciel,construire un CPU aussi tant qu'on y est enfin bref . . .plein de bonne volonté j'essaye comme je peux d'arriver à faire les outils qu'on me demande mais je reste conscient que sans CCM (vous) . . . .peux de ces outils marcherai c'est pourquoi je remerci souvent et encore toute la communauté CCM
re bonsoir voilà mon fichier j'espere qu'il vous aidera plus que mes explication. . . .
https://www.cjoint.com/?mEustuddZj
https://www.cjoint.com/?mEustuddZj
Bonjour,
J'ai juste donné un oeil en diagonal et il ressort que les nombres disponibles dans une série semblent correctes.
Par contre la recherche du premier numéro disponible est incorrecte : exemple avec la série 8000, je peux sans autre obtenir des nouveaux numéros de 9000, 9001, 9002, et se qui est faux.
Je ne peux pas en faire plus pour l'instant.
J'ai juste donné un oeil en diagonal et il ressort que les nombres disponibles dans une série semblent correctes.
Par contre la recherche du premier numéro disponible est incorrecte : exemple avec la série 8000, je peux sans autre obtenir des nouveaux numéros de 9000, 9001, 9002, et se qui est faux.
Je ne peux pas en faire plus pour l'instant.
voila :
http://www.cijoint.fr/cjlink.php?file=cj200912/cijEjXoVr2.xls
je t mis un bouton sur chaque feuille pour executer la macro1 je me suis arreter au 18
voila bonne nuit dis moi si tu est content?
http://www.cijoint.fr/cjlink.php?file=cj200912/cijEjXoVr2.xls
je t mis un bouton sur chaque feuille pour executer la macro1 je me suis arreter au 18
voila bonne nuit dis moi si tu est content?
Re bonjour le pingou (j'ai répondu à l'autre post), et bonjour moiced59,
Euh Le Pingou pour votre post N°10 je ne comprend pas j'ai testé chez moi avant d'envoyer et celà marchait et me donnai 8001 en premier numéro dispo. . . donc moi pas comprendre :s après je sais que j'avais le problème quand la cellule A1 été vide ma macro buguée bien entendu. . . .
Donc pour ce qui est de vos essais étant donné que je suis au travail et que je ne peux pas cjointer et que ce soir j'ai une ptite fete prevu ;) ( vodka malabard,ricard,champagne,bière et je crois qu'il y a mangé. . . lol) je regarderai ça en 2010 maintenant mais je vous remerci déjà à l'avance car je ne doute pas de trouver 2 fichiers fonctionnels et n'aurait plus qu'à choisir lequel me convient le mieux ou prendre un peu des 2 qui sait. . ..
Je vous remerci pour toute l'aide apportée en 2009, vous souhaite un bon réveillon et n'oubliez pas: boire ou conduire il faut choisir moi conduire je trouve ça fatiguant :)) de plus l'alcool est un ennemi fuire l'ennemi c'est lâche . . . lool
Euh Le Pingou pour votre post N°10 je ne comprend pas j'ai testé chez moi avant d'envoyer et celà marchait et me donnai 8001 en premier numéro dispo. . . donc moi pas comprendre :s après je sais que j'avais le problème quand la cellule A1 été vide ma macro buguée bien entendu. . . .
Donc pour ce qui est de vos essais étant donné que je suis au travail et que je ne peux pas cjointer et que ce soir j'ai une ptite fete prevu ;) ( vodka malabard,ricard,champagne,bière et je crois qu'il y a mangé. . . lol) je regarderai ça en 2010 maintenant mais je vous remerci déjà à l'avance car je ne doute pas de trouver 2 fichiers fonctionnels et n'aurait plus qu'à choisir lequel me convient le mieux ou prendre un peu des 2 qui sait. . ..
Je vous remerci pour toute l'aide apportée en 2009, vous souhaite un bon réveillon et n'oubliez pas: boire ou conduire il faut choisir moi conduire je trouve ça fatiguant :)) de plus l'alcool est un ennemi fuire l'ennemi c'est lâche . . . lool
Bonjour :
En réponse à ceci : Euh Le Pingou pour votre post N°10 je ne comprends pas j'ai testé chez moi avant d'envoyer et cela marchait et me donnai 8001 en premier numéro dispo . . . donc moi pas comprendre : s
Moi non plus je ne comprends pas pourquoi vous ne poursuivez pas le test plus loin. Ainsi vous constateriez par vous-même et comprendriez l’avertissement de mon message.
Pour poursuivre dans se sens, sauf erreur de ma part, la proposition de moiced59 ne tiens pas compte des numéros qui peuvent manquer dans une série.
En réponse à ceci : Euh Le Pingou pour votre post N°10 je ne comprends pas j'ai testé chez moi avant d'envoyer et cela marchait et me donnai 8001 en premier numéro dispo . . . donc moi pas comprendre : s
Moi non plus je ne comprends pas pourquoi vous ne poursuivez pas le test plus loin. Ainsi vous constateriez par vous-même et comprendriez l’avertissement de mon message.
Pour poursuivre dans se sens, sauf erreur de ma part, la proposition de moiced59 ne tiens pas compte des numéros qui peuvent manquer dans une série.
pour les fichiers je ne pourrait regarder que demain ou après demain, pour les test je n'ai pas voulu aller trop vite, comme je l'ai dis je part un peu trop vite sur les projets et veux tout faire en meme temps. . .
et ce par ce que je n'ai aucune bonne base, j'ai demandé une formation à mon taf car je trouve le VBA intéréssant mais dur. . . .que faite vous tous dans la vie? si ce n'est pas indiscret du VBA toute la journée dans une SSII ou dans une société?
et ce par ce que je n'ai aucune bonne base, j'ai demandé une formation à mon taf car je trouve le VBA intéréssant mais dur. . . .que faite vous tous dans la vie? si ce n'est pas indiscret du VBA toute la journée dans une SSII ou dans une société?