Loop avec critères vba

Résolu
Anthelm Messages postés 202 Statut Membre -  
via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    1. Anthelm Messages postés 202 Statut Membre 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


      0
      1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759 > Anthelm Messages postés 202 Statut Membre
         
        Re

        Oui 1500 lignes ce n'est pas beaucoup
        A tester quand même
        0
  2. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    1. Anthelm Messages postés 202 Statut Membre 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!
      0
  3. Anthelm Messages postés 202 Statut Membre 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.
    0