Séquence automatique avec Excel

Bonjour à tous,

j'espère que vous pourrez m'aider. Je ne pense pas que le problème soit très compliqué, mais il me semble qu'il faille utiliser du VBA, et là je bloque....Je vous ai joint le fichier, et voici l'explication.

Dans une de mes colonnes ("manuel") je rentre dans le désordre une séquence de chiffre de 1 à x. Mes chiffres sont donc dans le désordre, peuvent être espacés par une ou plusieurs cases vides.

Dans ma colonne suivante ("autom"), je rentre la séquence dans l'ordre. C'est à dire en partant du haut de la colonne, dès que ma case directement à gauche est renseigné, j'incrémente de 1.

Au final, j'ai dans la colonne "manuel" une liste dans le désordre et dans ma case "autom" ma liste mise dans l'ordre. C'est l'apparition de cette liste dans l'ordre que j'aimerais automatiser. Càd que dès que je copie colle ma liste dans le désordre, excel me donnerait dans la colonne suivante ma liste dans l'ordre. ***tout en respectant les cases vides toujours présentes ainsi que la taille de mon tableau***

Est ce que vous pensez que c'est possible? J'espère avoir été assez clair. Je vous remercie beaucoup d'avance! et je vous souhaite un bon week-end.

https://www.excel-pratique.com/~files/doc2/explication_problA_me.xls

Julien

Bonjour,

Pour ta première variante, je te propose ceci en B4 :

=SI(A4="";"";NB($A$4:A4))

à recopier vers le bas

Je te laisse adapter pour les colonnes D et F.

Pour ta 2ème variante, je regarde, mais plus tard (car l'estomac me rappelle à l'ordre )

@+

Merci beaucoup , c'est super ça marche . Je ne connaissais pas, il faut que je me fasse une liste des fonctions intéressantes. Je vais mettre en pratique tout de suite! encore merci

re,

Pour ta deuxième hypothèse, c'est moins évident.

J'ai cherché une formule sans colonne intermédiaire.

Je te propose ceci (mais on doit (devrait) pouvoir faire plus simple :

Sur la base de ton fichier, en B31 :

=SI(OU(ESTNA(SI(NB.SI(B32:$B$51;1)=1;MAX(DECALER($B$30;EQUIV(1;$B$31:$B$50;0);0;50-30-EQUIV(1;$B$31:$B$50;0)))+NB($A$31:A31);MAX(DECALER($B$30;EQUIV(1;$B$31:$B$50;0);0;LIGNE()-30-EQUIV(1;$B$31:$B$50;0)))+1));A31="");"";SI(NB.SI(B32:$B$51;1)=1;MAX(DECALER($B$30;EQUIV(1;$B$31:$B$50;0);0;50-30-EQUIV(1;$B$31:$B$50;0)))+NB($A$31:A31);MAX(DECALER($B$30;EQUIV(1;$B$31:$B$50;0);0;LIGNE()-30-EQUIV(1;$B$31:$B$50;0)))+1))

à recopier vers le bas.

Ensuite, tu inscris 1 où tu souhaite et le compteur s'adapte selon ton souhait.

Pour réinitialiser, ne pas oublier de recopier la formule là où tu avais précédemment mis un 1 (car formule écrasée).

Je vais quand même tenter de trouver plus simple (et plus court), mais sans trop de garantie.

@+

Bonjour thibo

Autre solution.

https://www.excel-pratique.com/~files/doc2/0cgC1explication_problA_me.xls

Nul doute qu'avec la formule, un "VBAiste" va améliorer tout cela

Bon dimanche à tous

Bonjour à tous,

Voici une solution en VBA : Fichier

Macro améliorable (tant au niveau du code que de la gestion d'erreur...) mais elle fait le principal

A+

Merci encore, j'ai mis la macro sur mon fichier, c'est vraiment puissant. J'essaie de m'y mettre en même temps et de comprendre comment ça marche. J'ai commencé à lire les bases, j'espère bientôt m'en sortir.

J'ai essayé de développer mon fichier. Je voulais faire un tableau croisé dynamique, mais ça ne marche pas. Je voudrais essayer avec du VBA. J'explique. J'ai toujours le même tableau. Je fais dans une ligne en dessous, la somme des valeurs de la colonne (1 colonne sur 2, même principe que dans le premier fichier que vous m'avez passé).

On considère que les colonnes sont des jours, et au dessus j'ai fait apparaitre à quelle semaine ils appartenaient (encore qqch trouvé sur votre site ).

Pour résumer, j'ai mes mes semaines, mes colonnes qui correspondent à des jours. Je fais la somme des valeurs qui sont dans ces colonnes (1col/2). Je voudrais avec du VBA faire la moyenne de ces sommes en prenant bien sur en compte la semaine. Et faire apparaître ça comme dans l'exemple, un petit tableau sur le côté. A savoir, si dans la colonne il n'y a pas de valeurs, alors je voudrais ne pas inclure cette colonne dans le calcul de ma moyenne.

Voici le fichier excel explicatif.

https://www.excel-pratique.com/~files/doc2/yDVpMexplication_problA_me_V1.xls

Vous pensez que vous pourriez m'aider? Comme ça, ça ne me semble pas très difficile, mais je n'y arrive pas. J'ai essayé de reprendre des macros existantes pour faire du copier coller, mais bof. Je vous remercie beaucoup d'avance, bonne fin de journée

Bonsoir julianito,

Oui c'est possible, voir Fichier

J'ai vu que tu as rajouté une ligne au 2è tableau, j'ai donc réadapté la première macro.

Pour le calcul des moyennes des semaines, je t'ai créé une autre macro.

Si jamais elle ne marche pas avec plus de données, reviens

A+

Salut!!!! alors ça marche très bien, je l'ai adapté à mon fichier, mais par contre je n'arrive pas à inclure une condition. J'ai aggrandi mon tableau (voir lien) et donc rajouté des colonnes. Dans mon exemple, en semaine 3, je n'ai pas de valeurs, je voudrais donc afficher dans mon tableau de moyenne une info, ex: "pas de données". Ensuite pour ma semaine 5, j'ai une colonne ou j'ai des valeurs et une autre où je n'en ai pas, je veux donc faire la moyenne uniquement sur la colonne où j'ai des valeurs (facile ), la colonne comportant la somme 0 est donc à exclure de la boucle.

J'y ai quand même réfléchi, et je pense qu'on peut garder le m=m+cells(52,i), mais lorsque que ce cells=0 alors on ne doit pas incrémenter k. Par contre, si on se retrouve dans un cas où la colonne vide est en première position, alors on a une div par 0... Mieux qu'un long discours, le fichier directement )).

https://www.excel-pratique.com/~files/doc2/yDVpMexplication_problA_me_V3.xls

Je pense que ce sera difficile, je ne sais pas si c'est possible de tout gérer.

Salut julianito,

En effet ça me semble compliqué ce que tu demandes

Dès que j'ai le temps, je regarde ça à tête reposée et je te dis ce qu'il en est est

Re,

Voilà une mise à jour de la macro : Fichier

Ça devrait marcher

Si problème, reviens

A+

Merci encore! Ca marche, tout du moins dans l'exemple

j'aurais toutefois une question, car les macros que tu me donnes, je les reproduis ensuite dans d'autres fichiers, en essayant de les comprendre. Pourrais-tu m'expliquer cette ligne? Je comprends que c'est pour définir une plage de données, mais je ne vois pas comment ça fonctionne .

derCol = Range("IV29").End(xlToLeft).Column

Le reste j'ai compris .

J'ai déclaré m comme single aussi pour pouvoir avoir mes résulats quand ils sont décimaux.

Merci beaucoup en tout pour toute l'aide, avec ça je vais essayer de le reproduire sur beaucoup de mes fichiers et ainsi me simplifier la vie )).

A bientôt!

Il n'y a pas de quoi julianito!

l'instruction :

derCol = Range("IV29").End(xlToLeft).Column 

permet juste de trouver la dernière colonne de ton tableau, faut bien que la macro s'arrête quelque part!

Cette instruction se place à la colonne limite (IV) du fichier et à la ligne 29 (Range("IV29").End), puis cherche à gauche (xlToLeft)

jusqu'à ce qu'il rencontre une cellule non vide. Le .Column renvoi le numéro de colonne.

Je sais pas trop si c'est clair

Oui c'est clair, je comprends. Toutefois, me revoilà .

J'avais oublié de te poser une question. J'ai vu que tu tapais tes macros sur le même module. Moi pour chaque macro je créée un nouveau module. Quelle est la différence? ça ne pose pas de problème?

J'ai repris le fichier excel, et sur un même onglet j'ai recopié mon tableau 2 fois.

Ensuite j'ai essayé de refaire toutes les macros que tu m'as données, donc tri et moy.

Le tri fonctionne très bien, sur les 2 tableaux (j'ai donc fait un module par tableau)

Mais le moy, lui ne fonctionne pas sur mon 2ème tableau. C'est bizarre je ne vois pas où est l'erreur. Excel me parle d'erreur 13 "incompatibilité de type". Pourtant mes types n'ont pas changé! As tu une idée là dessus? Je ne sais pas très bien comment fonctionne VBA encore, mais j'ai changé le nom des variables pour voir si ça pouvait avoir une influence, mais le problème est toujours là.

je te joins mon fichier --> je n'ai pas réussi à le joindre, il était trop gros (180ko), je ne sais pas si mes explications sont suffisantes.

Signé Julien ou l'histoire sans fin

Re julien,

J'avais oublié de te poser une question. J'ai vu que tu tapais tes macros sur le même module. Moi pour chaque macro je créée un nouveau module. Quelle est la différence? ça ne pose pas de problème?

Alors là, je n'en sais fichtre rien! Il faudra demander l'avis à plus pros que moi!

Sinon, as-tu essayé de compressé ton fichier?

Pas mal l'idée de compresser le fichier

https://www.excel-pratique.com/~files/doc2/fichier.zip

Waou, tu m'as fait peur avec ton fichier

Il y a une petite erreur de formule. Regarde les lignes 33 et 76, en colonne E par exemple :

En E33, tu as ça :

=SI(ESTERREUR(1-E32*1/(C32));"0";1-E32*1/(C32))

et en E76, tu as ça :

=SI(ESTERREUR(1-E75*1/(C75));"";1-E75*1/(C75))

Il manque le 0 sur la ligne 76, colonnes E, H, K, N, Q,...

J'ai regardé tes codes, et personnellement, j'aurais pas mis les ActiveWorkbook.Save en fin de macro.

Imagine qu'il y ait une erreur et que ton fichier soit enregistré!

Et pour plus de clarté, si tu veux mettre les différentes macros dans différents modules,

renomme-les en conséquence (clic sur un module puis sur F4 pour ouvrir les propriétés)

Rechercher des sujets similaires à "sequence automatique"