none
Excel ne répond pas à cause d'une fonction personnalisée RRS feed

  • Question

  • Bonjour,

    Bon j'ai créé une petite fonction de concaténation conditionnelle sous VB qui marche très bien mais prend beaucoup de temps quand même. Et à chaque fois que j'ouvre mon classeur ou procède à n'importe quelle opération il plante. J'ai essayé de l'optimiser mais je ne suis pas très douée en Vb.

    Voilà le code que j'ai utilisé:

    Function ConcatenerSi(Plage As Range, NumDossier As Integer, Col As Integer)
    Dim a As Range
    Application.Volatile
    For Each a In Plage
    If Not WorksheetFunction.IsNA(a.Value) Then
    toto = a.Value
    If UCase(a.Value) = NumDossier Then
    Var = Var & c.Offset(0, Col).Value & ", "
    End If
    End If
    Next a
    ConcatenerSi = Var
    End Function
    

    Où, Plage est la plage sur laquelle est testée la condition NumDossier, pour concaténer les enregistrements de la colonne Col située à Col colonnes de Plage.

    ça fais confus, mais j'espère que vous pourriez m'aider 


    jeudi 19 octobre 2017 14:36

Toutes les réponses

  • j'ai oublié de mentionner que le classeur est lié à une base de données Access.
    jeudi 19 octobre 2017 14:56
  • Bonjour,

    Je ne comprends pas cette ligne :

    Var = Var & c.Offset(0, Col).Value & ", "

    Qu'est-ce que représente la variable "c" ?

    Cordialement.

    Daniel

    jeudi 19 octobre 2017 15:50
  • C'est plutôt  

    Var = Var & a.Offset(0, Col).Value & ", "

    le "a" fait référence à la plage sur laquelle on teste le critère.

    Cette ligne permet de faire la concaténation.

    Je m'explique. J'ai une table Dossier, une table Marchandises et une troisième PrdtImport qui fait la liaison entre les précédentes (Pour obtenir plusieurs à plusieurs). Ceci pour des raisons de minimisation de saisie mais aussi des rapports quant aux marchandises les plus voulues.

    Le souci est que pour chaque dossier, on a besoin d'une fiche d'une seule page avec tous les produits importés, en quantité et en valeur. Du coup j'ai besoin de la concaténation. Celle disponible sur Excel fait la concaténation de toute la colonne et moi j'ai besoin juste des produits importés pour le dossier xxxx.

    Voilà. J'espère que j'ai tout dit.

     

    vendredi 20 octobre 2017 08:30
  • A part :

    toto = a.Value

    qui, à mon avis est inutile, je ne vois rien d'anormal. La fonction prend beaucoup de temps s'il y a beaucoup de cellules dans "Plage", auquel cas tu as intérêt à transformer "Plage" en un tableau (array).

    Autrement, Est-ce que tu peux mettre ton classeur, sans données confidentielles, sur OneDrive ou sur un autre site de partage et poster le lien correspondant ?

    Daniel

    jeudi 26 octobre 2017 12:48
  • Justement, la plage à tester est assez large. Je vais la transformer en tableau comme vous l'avez conseillé.

    Merci pour tout ^^

    jeudi 26 octobre 2017 14:33