VBA incrémentation automatique alpha-num. [Résolu/Fermé]

Signaler
Messages postés
45
Date d'inscription
samedi 20 février 2010
Statut
Membre
Dernière intervention
21 août 2012
-
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
-
Bonjour,
suite à mon précédent poste :

https://forums.commentcamarche.net/forum/affich-25722936-probleme-base-de-donnee#newanswer

Je souhaiterais réaliser un programme capable de trier automatiquement de A à Z et ensuite d'incrémenter mes fiches techniques automatiquement en fonctions des informations contenues dans certaines cellules de la nomenclature.
Voici un exemple :

Ma première ligne aura toujours le repérage en D1="A1"
Ma seconde ligne devra comparer plusieurs lignes : Si A2=A1 = vrai, alors vérifier si B2=B1.
Si B2=B1 = vrai, alors vérifier si C2=C1. Si C2=C1, alors D2=D1 (soit "A1").
Ou si A2<>A1, alors D2="A2"
Ou si A2=A1= vrai mais si B2<>B1, alors D2="A2"
Ou si A2=A1 = vrai, si B2=B1 = vrai mais si C2<>C1, alors D2="A2"

Au début si souhaitais faire :

en D1 : =SI(A1<>"";"A1";"")
en D2 : =Si(ET(A2=A1;B2=B1;C2=C1);D1;"A2")
en D3 : =SI(ET(A3=A2;B3=B2;C3=C2);D2;"A3")
etc.

Mais si j'utilise la fonction si/et, je suis obliger de créer une formule pour chaque ligne. Or je souhaite que cela se fasse automatiquement en fonction des cellules non vides après avoir fait un trie de A à Z.

Merci de vos réponses.




10 réponses

Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 061
Bonjour,
Difficile de comprendre votre problème... !
Est-il possible de voir le dernier fichier pour se rendre compte de la faisabilité ?
Messages postés
45
Date d'inscription
samedi 20 février 2010
Statut
Membre
Dernière intervention
21 août 2012

Bonjour,
Merci Le Pingou de vous pencher sur mon problème.

Le fichier se trouve ici : https://www.cjoint.com/?BHnjWMBw6cX

Cependant, je vais reprendre mes explications précédentes en simplifiant les choses et avec les vrais noms de cellules :

Ma première ligne aura toujours le repérage en G3="A1"

Ma seconde ligne devra comparer plusieurs lignes : Si B4=B3 et si E4=E3 et si F4=F3, alors G4=G3 (soit "A1").

Sinon G4="A2"

Je pense qu'il faut donc faire une boucle WHILE qui dans un premier temps vérifie la présence de texte dans B3 et numérote G3 par "A1" puis passe à la ligne suivante et vérifie si mes conditions sont vraies et que G4 soit égale à G3 si les comparaisons sont vraies et à G3+1 (soit "A2) si les comparaisons sont fausses.

La boucle While serait vraie tant que du texte est présent dans la colonne B3.

Voici le principe que je comptait utiliser :


Sub incrémentation()
'Verifier que du texte est présent dans la cellule B3
If IsNumeric(Range("B3")) Then 'Ici remplacer IsNuméric par une vérification de texte
Range("G3") = "A1"
'Déclaration de la variable
Dim varTexte As String
'Début de la boucle
While (Columns("B:B")) <> "" 'Tant que les cellules de la colonne B sont non vides, la boucle est répétée
'Vérification des conditions
If Range("Ex") = Range("Ex-1) and Range("Bx") = Range("Bx-1) and Range("Fx")=("Fx-1") then' E représente la colonne et x la ligne
Gx = "Gx-1" 'Soit "A1"
Else: Gx = "Gx-1" + 1 'Soit "A2"
End If
Wend
End Sub


Merci de votre réponse.
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 061
Bonjour,
Eh bien, le fichier [Nomenclature ETDE.xlw] est vide, je ne peux pas en faire plus.
Messages postés
45
Date d'inscription
samedi 20 février 2010
Statut
Membre
Dernière intervention
21 août 2012

Désolé, cela sera mieux avec ceci : https://www.cjoint.com/?BHnqxj34EK7

Extrayez l'ensemble puis ouvrez l'espace de travail.

Cordialement.
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 061
Bonjour,
Merci. Cependant il faut éclairer ma lanterne car il y a 3 fichiers et si j'ouvre n'importe lequel j'ai toujours le classeur [Nomenclature.xlsm] qui s'ouvre ..... Pourquoi ?
Sur quel classeur et feuille se rapporte votre explication .... Pas facile à trouver, pour l'instant sans succès ... !
Messages postés
45
Date d'inscription
samedi 20 février 2010
Statut
Membre
Dernière intervention
21 août 2012

En effet, lorsque vous ouvrez un fichier, le classeur nomenclature s'ouvre car s'est sur celui-ci que je travail (cependant, il est lié au classeur [Liste des Fournisseurs]).

Donc dans le classeur [Nomenclature], mon problème est pour toutes les feuilles [Liste Matériel XXX].
Mon explication précédente fait référence au classeur [Liste Matériel Aéraulique], où vous retrouverez les colonnes citées dans les explications précédentes.
Le résultat recherché doit se trouver dans la colonne G, appelée "D.T.N°".

Un exemple est réalisé dans cette colonne G à l'aide de formules qui ne me permettent pas d'automatiser mon incrémentation.

La petite partie de programme situé dans une de mes précédentes réponses se trouve également dans le Visual sous "ThisWordbook"de ce classeur.

Veuillez m'excuser pour mon manque de renseignements.
Restant à votre disposition pour compléments d'informations.
Cordialement.
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 061
Bonjour,
Donc en colonne [G] on incrémente de A1, A2, ....Ax avec position de départ en [G3].
Si c'est correct, la valeur en [G7] devrait-être A5 car [F6] différent de [F7] ... Oui ou Non... !
Messages postés
45
Date d'inscription
samedi 20 février 2010
Statut
Membre
Dernière intervention
21 août 2012

Bonsoir,
C'est exacte, je ne vois pas pourquoi la formule n'a pas fonctionné.
En tout cas je vois que vous avez compris le principe ;-).
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 061
Bonjour,
Merci pour l'information.
Concerne feuille [Liste Matériel Aéraulique], essayez comme suit :
Cellule [G3] :
=SI(B3<>"";"A1";"")

Cellule [G4] : =
SI(B4<>"";SI(ET(ET(B4=B3;E4=E3);F4=F3);G3;"A"& (STXT(G3;2;2)+1));"") 
Et tire vers le bas jusqu'à la fin du tableau.

Salutations.
Le Pingou
Messages postés
45
Date d'inscription
samedi 20 février 2010
Statut
Membre
Dernière intervention
21 août 2012

Bonjour,
Cela marche parfaitement bien, je vous remercie pour cette aide précieuse, car cela va me faire gagner pas mal de temps pour mes prochains tableaux.
En fin de compte, le VBA n'est pas nécessaire !
Encore merci.
Messages postés
9745
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
24 juillet 2020
1 061
Bonjour,
Effectivement pas de VBA dans ce cas.
Salutations.
Le Pingou