Loop avec critères vba

Résolu/Fermé
Anthelm Messages postés 198 Date d'inscription lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 - Modifié le 6 févr. 2020 à 20:33
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 - 11 févr. 2020 à 22:53
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

via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
Modifié le 8 févr. 2020 à 16:47
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


1
Anthelm Messages postés 198 Date d'inscription lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 1
Modifié le 11 févr. 2020 à 22:07
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


0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > Anthelm Messages postés 198 Date d'inscription lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024
11 févr. 2020 à 22:53
Re

Oui 1500 lignes ce n'est pas beaucoup
A tester quand même
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
7 févr. 2020 à 16:55
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
0
Anthelm Messages postés 198 Date d'inscription lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 1
8 févr. 2020 à 13:59
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!
0
Anthelm Messages postés 198 Date d'inscription lundi 15 octobre 2018 Statut Membre Dernière intervention 2 mars 2024 1
Modifié le 8 févr. 2020 à 14:06
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.
0