macro remplissage cellule par incrémentation suivant plusieurs valeurs

racoune

XLDnaute Nouveau
Bonsoir à vous tous,

et comme l'intitulé du sujet n'est surement pas clair, je vais tenter de vous éclairer sur mon problème.

En gros, j'essaye de trouver une macro qui me permettrait de remplir des cellules (d'une même colonne) en fonction d'une valeur initiale "X", à partir de 1 avec incrémentation de +1 jusqu'à atteindre la valeur initiale "A" .

Bon, pour cela, il existe la simple formule:
en cellule [A7]
Code:
SI(A6>=$B$1;"";A6+1)
où, pour le tableur utilisé, [B1] donne la valeur à atteindre (de 3 à 40), [A7] la cellule à partir de laquelle l'incrémentation commence (avec pour départ [A6] = 1)
et cela de [A7] jusque [A95] voire plus.

S'il n'y avait que ça, aucun problème. Formule bateau. Mais le problème se corse car je n'ai pas qu'une valeur initiale mais 4.
valeur "X" ([B1] dans le cas cité au-dessus)
Valeur "A": lorsque la valeur A est atteinte, les cellules (par ligne) suivantes doivent reprendre de 1 jusque "B" avec cette fois l'ajout d'un texte avant le chiffre (soit "cpltA_", ce qui donne "cpltA_1" jusque "cpltA_[valeur B]")
Valeur "B": idem, dans les cases qui suivent la valeur B atteinte avec un autre texte concaténé ("cpltB_") et le décompte s’arrête lorsque la valeur B est atteinte
Valeur "C": même principe mais le texte devient "cpltC_"

Les valeurs X, A, B et C sont chiffrables (de 1 à 40) et notées par l'utilisateur.
Chacune doit normalement dans cet ordre et non de manière chaotique et le tout de haut en bas sur une même colonne.

Donc, j'ai essayé de bidouiller la formule précédente avec des "SI" partout mais ça ne fonctionne pas. Non seulement les textes ne sont pas concaténés avec les cellules contenant les chiffres, mais en plus, je n'arrive pas à faire en sorte qu'une fois la valeur initiale atteinte, la cellule suivante reprend à 1 jusqu'à atteindre la deuxième valeur. Ca part sur une boucle.

Peut-être qu'une macro faciliterait la tâche mais je me perds totalement dans les "IF THEN ELSE" "RANGE" ou "FOR EACH". Désolé car je n'ai aucune compétence en vba et le temps disponible ne me permet pas de m'y pencher convenablement.

Après tout ce blabla et des recherches à droite, à gauche, je me tourne vers vous pour trouver une aide précieuse et salvatrice.

Merci par avance.

PS: vous trouverez un exemple en pièce jointe pour clarifier le tout.
 

Pièces jointes

  • essai.xls
    35 KB · Affichages: 28
  • essai.xls
    35 KB · Affichages: 32
  • essai.xls
    35 KB · Affichages: 35

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : macro remplissage cellule par incrémentation suivant plusieurs valeurs

Bonsoir racoune,

Un essai avec une formule matricielle en A6 à valider par Ctrl+Maj+Entrée puis à recopier suffisamment vers le bas jusqu'à obtenir des cellules vides.
VB:
=SI(LIGNES(A$6:A6)>SI(ESTNA(EQUIV(0;B$1:B$4;0));SOMME(B$1:B$4);SOMME(DECALER(B$1;0;0;EQUIV(0;B$1:B$4;0);1)));"";CHOISIR(EQUIV(VRAI;LIGNES(A$6:A6)<=SOUS.TOTAL(9;DECALER(B$1;0;0;{1;2;3;4};1));0);LIGNES(A$6:A6);"cpltA_" & LIGNES(A$6:A6)-B$1;"cpltB_" & LIGNES(A$6:A6)-B$1-B$2;"cpltC_" & LIGNES(A$6:A6)-B$1-B$2-B$3))

rem: dès qu'un zéro est rencontré dans les valeurs de X ,A ,B ,C, on arrête le remplissage.
 

Pièces jointes

  • racoune-essai-v1.xls
    188.5 KB · Affichages: 25
Dernière édition:

racoune

XLDnaute Nouveau
Re : macro remplissage cellule par incrémentation suivant plusieurs valeurs

merci mapomme. C'est merveilleux. Parfait. You are a master, si je puis me permettre.

Bon je vais mettre le code à exécution et le sujet peut être mis en résolu.

Encore merci.
 

racoune

XLDnaute Nouveau
Re : macro remplissage cellule par incrémentation suivant plusieurs valeurs

double post pour avoir une information avant la clôture du sujet.

Ton code est parfait mapomme mais puis-je pousser le bouchon un peu plus loin en te demandant comment insérer automatiquement une ligne "vide" (non remplie) entre chaque "valeur X, A, B et C"?

Grossièrement, à la place de:
1
2
cpltA_1
cpltB_1

il faudrait obtenir quelque chose de ce genre
1
2
(ligne vide)
cpltA_1
(ligne vide)
cpltB_1, etc.

Ca permettra d'améliorer la lisibilité du tableur.

Sinon pour le moment j'essaye de voir s'il est possible de modifier ta formule pour obtenir le résultat demandé. Peut-être avec la fonction "Décaler"?
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : macro remplissage cellule par incrémentation suivant plusieurs valeurs

Bonsoir racoune,

(...) comment insérer automatiquement une ligne "vide" (non remplie) entre chaque "valeur X, A, B et C"?

Grossièrement, à la place de:
1
2
cpltA_1
cpltB_1

il faudrait obtenir quelque chose de ce genre
1
2
(ligne vide)
cpltA_1
(ligne vide)
cpltB_1, etc.

Ça permettra d'améliorer la lisibilité du tableur. (...)



Un essai avec une formule matricielle en A6 à valider par Ctrl+Maj+Entrée puis à recopier suffisamment vers le bas jusqu'à obtenir au moins deux cellules vides.

VB:
=SI(LIGNES(A$6:A6)>SI(ESTNA(EQUIV(0;B$1:B$4;0));SOMME(B$1:B$4)+3;EQUIV(0;B$1:B$4;0)-1+SOMME(DECALER(B$1;0;0;EQUIV(0;B$1:B$4;0);1)));"";CHOISIR(EQUIV(VRAI;LIGNES(A$6:A6)<=({1;2;3;3}+SOUS.TOTAL(9;DECALER(B$1;0;0;{1;2;3;4};1)));0);SI(LIGNES(A$6:A6)=B$1+1;"";LIGNES(A$6:A6));SI(LIGNES(A$6:A6)=B$1+B$2+2;"";"cpltA_"&LIGNES(A$6:A6)-B$1-1);SI(LIGNES(A$6:A6)=B$1+B$2+B$3+3;"";"cpltB_"&LIGNES(A$6:A6)-B$1-B$2-2);SI(LIGNES(A$6:A6)=B$1+B$2+B$3+B$4+4;"";"cpltC_"&LIGNES(A$6:A6)-B$1-B$2-B$3-3)))
 

Pièces jointes

  • racoune-essai-v2.xlsx
    130.2 KB · Affichages: 29
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 023
Messages
2 084 715
Membres
102 637
dernier inscrit
TOTO33000