Loop avec critères vba [Résolu]

Signaler
Messages postés
178
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
16 février 2020
-
via55
Messages postés
11766
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 février 2020
-
Bonsoir,

Je souhaiterai faire un boucle pour concatener les critères en jaune dans la dernière colonne "Code", pour un TCD.



On peut être amené à insérer d'autres colonnes (d'autres critères), et je me demande quel serait le bon moyen de faire une loop avec seulement les colonnes ciblées?

En partant de Range("Tableau1[#Headers,[Type]]") et offset, peut être?

J'aimerai mettre la macro dans une feuille TCD, quand on l'active, donc il faudrait qu'elle ne soit pas trop lente idéalement :)

Si vous avez une piste...

Merci beaucoup!

(Edit, je pense qu'il faudrait faire un array mais je ne sais pas du tout comment ça marche. Si vous aviez un début de solution, je pourrais peut être bricoler...)

Configuration: Windows / Firefox 72.0

3 réponses

Messages postés
11766
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 février 2020
1 668
Bonjour Anthelm

Je peux te proposer une fonction personnalisée ( à mettre dans un Module de l'éditeur VBA)
Function concatA(plage As Range)
For Each cell In plage
cod = cod & cell.Value & "-"
Next
concatA = cod
End Function


Ainsi dans ton exemple = concatA(C3:F3) en K3 renverrait FE1-1920-1080-

Cdlmnt
Via


Anthelm
Messages postés
178
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
16 février 2020
1
C'est parfait Via, merci infiniment!

C'est excellent pour trier les doublons et afficher le code de manière lisible.
Tu penses qu'avec 1000-1500 lignes ça restera utilisable?

Function concatA(plage As Range)
For Each cell In plage
If cell.Value <> "" Then
col = cell.Column
cod = cod & Cells(2, col).Value & " " & cell.Value & vbCrLf
End If
Next
concatA = cod
End Function


via55
Messages postés
11766
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 février 2020
1 668 > Anthelm
Messages postés
178
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
16 février 2020

Re

Oui 1500 lignes ce n'est pas beaucoup
A tester quand même
Messages postés
11766
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
20 février 2020
1 668
Bonjour Anthelm

Pourquoi passer par une macro ?
Rajoute une colonne vide entre Critère et Commentaires, ensuite tu peux même masquer cette nouvelle colonne H
En L3 la formule = CONCAT(C3:H3) à étirer vers le bas
Si par la suite tu rajoutes des colonnes de critère avant la colonne H elles seront prises en compte dans la concaténation

Cdlmnt
Via
Anthelm
Messages postés
178
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
16 février 2020
1
Bonjour Via,

Ca va poser problème, car le code sera:
FE119201080

Donc, je ne pourrais pas retrouver ou est la largeur et ou est la hauteur. Pareil si j'ai des réponses "Oui" aux critères.

CONCAT(C3:H3) seulement ne pourra pas, je prend un exemple bête mais pour donner l'idée, différencier:
FE1-1010-100 et FE1-10-10100, car ça donnera FE11010100 dans les deux cas.

Il faut donc faire effectivement quelque chose proche de CONCAT(C3:H3) , mais en intercalant quelque chose:
FE1Hauteur1920Largeur1080 ...

C'est pour ça que je pensais partir sur une macro!
Messages postés
178
Date d'inscription
lundi 15 octobre 2018
Statut
Membre
Dernière intervention
16 février 2020
1
Quelque chose du type:

For each row in Tableau1
Code = "Entête" + première cellule + 2eme entete + 2 eme cellule...

Déjà ça, ensuite j'essaierai de faire en sorte que les cellules vides ne soient pas comptées.

J'essaierai d'avancer comme ça en fin d'après midi aujourd'hui, mais si tu as une idée ou un début de code, je suis vraiment preneur.

Je pense partir sur une loop avec offset, mais j'ai peur que ce soit pas "optimal", même si ça devrait marcher. Rien que ton avis sur ça serait précieux car j'ai peur de passer des heures dessus et me rendre compte après que ce n'était pas la bonne méthode!

J'hésite à essayer d'utiliser "Array", aussi.