remplissage optimisé d'un tabeau

  • Initiateur de la discussion Initiateur de la discussion knaekes
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

knaekes

XLDnaute Occasionnel
Bonjour,

je cherche à remplir un tableau de façon rapide.

mes données d'entrées sont fournies sous forme de liste. Je souhaite synthétiser ces données dans un tableau.

Une succession de boucle me permettrais bien entendu d'y parvenir. Mais étant donné la taille (réelle) de la liste et du tableau, je cherche à optimiser ce remplissage.

Existe t-il un moyen autre que une succession de boucle?

ci-joint le fichier exemple.

bonne journée
 

Pièces jointes

Re : remplissage optimisé d'un tabeau

Bonjour,
cf. fichier (ton exemple comporte des erreurs et tu ne dois pas oublier de remplacer les cellules vides par des "-" (ou l'inverse).
A+
 

Pièces jointes

Re : remplissage optimisé d'un tabeau

Bonjour,

A partir du fichier proposé par David84, je souhaiterai apporter qq ameliorations:

1. traduire la formule sous forme de macro (ceci afin d'exploiter les données dans des feuilles differentes)

Code:
Function sum_mang_sub(PlageEntree1 As Range, PlageEntree2 As Range, PlageEntree3 As Range, PlageEntree4 As Range, PlageEntree5 As Range, entree1 As Variant, entree2 As Variant, entree3 As Variant, entree4 As Variant, entree5 As Variant) As Double
'Application.Volatile
    Dim Cell As Range

    For Each Cell In PlageEntree1
        If Cell.Value = entree1 Then
        test1 = "OK"
        End If
    Next Cell
    
    For Each Cell In PlageEntree2
        If Cell.Value = entree2 Then
        test2 = "OK"
        End If
    Next Cell
    
    For Each Cell In PlageEntree3
        If Cell.Value = entree3 Then
        test3 = "OK"
        End If
    Next Cell
    
    For Each Cell In PlageEntree4
        If Cell.Value = entree4 Then
        test4 = "OK"
        End If
    Next Cell
        
    If test1 = "OK" And test2 = "OK" And test3 = "OK" And test4 = "OK" Then
    
        '.......... ?
 
    Next Cell
    
  End Function


2. Existe t-il un moyen d'appliquer cette fonction à l'ensemble des cellules du tableau, de maniere automatique. C'est à dire que lors du lancement de la macro la fonction créée serait associé à chaque cellules du tableau (en considerent que l'on connaisse les bornes du tableau).
 
Re : remplissage optimisé d'un tabeau

Bonsoir,
en passant par des tableaux VBA, à tester :
Code:
Sub test()
Dim Mondico As Object, Plage As Range, i&, j&, k&, Tabl1, Tabl2, EnteteEt1 As Range, _
EnteteEt2 As Range, EnteteAct As Range
Set Mondico = CreateObject("Scripting.Dictionary")
With Sheets("Feuil1")
Set Plage = .Range("A4:C" & .Range("C" & Rows.Count).End(xlUp).Row)

    For i = 1 To Plage.Rows.Count
        Mondico.Item(Plage(i, 1) & Plage(i, 2) & Plage(i, 3)) = _
        Mondico.Item(Plage(i, 1) & Plage(i, 2) & Plage(i, 3)) + 1
    Next i
Tabl1 = Mondico.keys
Tabl2 = Mondico.items
Set EnteteEt1 = .Range("G3", .[G3].End(xlToRight))
Set EnteteEt2 = .Range("G4", .[G4].End(xlToRight))
Set EnteteAct = .Range("N5", .[N5].End(xlDown))
    For i = 1 To EnteteEt1.Columns.Count
        For j = 1 To EnteteAct.Rows.Count
            For k = 1 To Mondico.Count
                If EnteteEt1(1, i) & EnteteEt2(1, i) & EnteteAct(j, 1) = Tabl1(k - 1) Then
                    Dim Zone()
                    ReDim Preserve Zone(1 To EnteteEt1.Columns.Count, 1 To EnteteAct.Rows.Count)
                    Zone(i, j) = Tabl2(i - 1)
                End If
            Next k
        Next j
    Next i
.Range("G5").Resize(EnteteAct.Rows.Count, EnteteEt1.Columns.Count) = _
Application.Transpose(Zone)
End With
End Sub
A+
 
Dernière édition:
Re : remplissage optimisé d'un tabeau

Re
Le problème , c'est que j'ai l'impression que tu compiles des bouts de codes et c'est compliqué pour moi de devoir faire le lien entre eux vu que je ne sais pas où tu veux en venir.
En plus, au niveau des précisions apportées, c'est vraiment pauvre : quelle est la macro qui pose problème ? A quel stade ?
Fais fonctionner ta macro en pas à pas et étudie l'évolution de ton code, tu verras peut-être d'où vient le problème.
A+
 
Re : remplissage optimisé d'un tabeau

Bonsoir david 84,
la macro qui me pose probleme est celle que tu m'as proposé dans le message au-dessus (elle se nomme "remplir_tableau_rouge" dans le fichier).
Bien évidemment avant de venir poster sur le forum j'ai essayé de résoudre mon probème en exécutant la macro pas à pas (mais sans succès)
la macro semble bloquer en toute fin de procédure (est-ce due à l'ordonnacement des données sources?)

la macro "liste_horizontale" créé les entêtes horizontales du tableau
la macro "liste_horizontale" créé l'ordonnée du tableau
la macro "remplir_tableau_rouge" à pour but de remplir ce tableau
le bouton rouge execute successivement ces macros

pour que mon fichier soit plus clair j'ai surligné en vert les données sources.

si cela manque encore de precisions n'hésite pas à m'en faire part. Je m'appliquerai à être encore plus précis.

merci
 

Pièces jointes

Re : remplissage optimisé d'un tabeau

Re
désolé mais trop de choses à reprendre dans ton code. C'est la 2ème fois que tu me fais le coup de placer un exemple qui ne soit pas fidèle à ton fichier original (alors que ce n'est pourtant pas compliqué !) et c'est décourageant.
Replace un fichier avec un exemple explicite et mon code d'origine, et marque manuellement le résultat attendu.
A+
 
Re : remplissage optimisé d'un tabeau

Salut David84

Je souhaite avancer pas à pas pour bien comprendre les morceaux de code et par la suite essayer de m'en sortir par moi même. Il se peut aussi que mon fichier évolue et donc que des problématique nouvelles apparaissent. Voilà pourquoi je décris d'avantage mes problématiques par des exemples simplifiés, que par un contexte souvent moins explicite.

Ci-joint tu trouveras un fichier qui je l'espère te semblera plus explicite

onglet bleu: données d'entrées adjacentes -> ça fonctionne
onglet jaune: données d'entrées non adjacentes -> ça ne fonctionne plus
onglet rouge: execution des macros

très bonne journée
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

P
Réponses
2
Affichages
861
pistachacha
P
D
Réponses
4
Affichages
1 K
H
Réponses
3
Affichages
995
H
A
  • Question Question
Réponses
24
Affichages
6 K
artlight
A
S
Réponses
4
Affichages
2 K
stage_ferrit
S
J
Réponses
0
Affichages
1 K
jeanBaptiste
J
P
  • Question Question
Réponses
5
Affichages
2 K
PierreJeanPierre
P
T
Réponses
2
Affichages
1 K
T
Retour