problème transposition colonne en ligne

erics83

XLDnaute Impliqué
Bonjour,

J'ai une BD avec des nom et des dates, et des demi-journées, le tout lié à des activités (je mets un classeur test pour plus de compréhension, car je sais que je suis pas toujours très clair....). J'essaye de mettre sous forme de tableau, via VBA, les dispo des personnes....

Dans mon classeur, je cherche à n'analyser que nom3 et nom4 et si l'activité est "Activité15 ou Activité16, alors je peux compter que la personne est disponible...(toutes les autres activités sont contraintes..).

J'ai essayé de reproduire le BDTbaleau de JB en faisant (Feuille "Essais") une transposition des dates pour le matin, et une transposition pour l'après midi, en me disant qu'ensuite, je pourrais mettre des IF histoire d'additionner le nombre des activités 15 et 16.....

Car c'est la somme des ressources disponibles par jour qui m’intéresse....

Mais cela ne fonctionne pas.....et surtout, je pense qu'il y a peut être plus simple....

Merci pour votre aide et pistes.....
 

Pièces jointes

  • Classeur test.xlsm
    22.5 KB · Affichages: 35
Dernière édition:

erics83

XLDnaute Impliqué
Bonjour,

Après plusieurs essais, je pense avoir réussi, mais le code est assez "lourd" (en plus, j'ai 80000 lignes), pas moyen d'optimiser ?

Code:
Sub essai()
Dim i As Long
Dim j As Long
Dim nb As Integer

Dim d(100000, 5)

For i = 2 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row
d(i, 1) = Feuil1.Cells(i, 1) 'nom
d(i, 2) = Feuil1.Cells(i, 6) 'date
d(i, 3) = Feuil1.Cells(i, 7) 'demi
d(i, 4) = Feuil1.Cells(i, 8) 'activité
Next
For i = 5 To 11
nb = 0
For j = 2 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row
If (d(j, 2) = Feuil3.Cells(1, i) And (d(j, 1) = "nom3" Or d(j, 1) = "nom4")) Then
If (d(j, 4) = "Activité15" Or d(j, 4) = "Activité16") Then nb = nb + 1
End If
Next
If nb = 0 Then Feuil3.Cells(2, i) = "" Else Feuil3.Cells(2, i) = nb / 2
Next

End Sub
En vous remerciant pour votre aide,
 

gosselien

XLDnaute Barbatruc
Bonjour,

en mettant le tableau en mémoire peut être :)
VB:
Sub essai()
Dim i As Long
Dim j As Long
Dim nb As Integer
Dim d(100000, 5)
Dim a
a = Feuil1.[A1].CurrentRegion.Value ' dans un tableau en mémoire
For i = 2 To UBound(a, 1)
   If a(i, 1) = "nom3" Or a(i, 1) = "nom4" Then
      d(i, 1) = a(i, 1)   'nom
      d(i, 2) = a(i, 6)   'date
      d(i, 3) = a(i, 7)   'demi
      d(i, 4) = a(i, 8)   'activité
   End If
Next
For i = 5 To 11
   nb = 0
   For j = 2 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row
      If (d(j, 2) = Feuil3.Cells(1, i) And (d(j, 1) = "nom3" Or d(j, 1) = "nom4")) Then
         If (d(j, 4) = "Activité15" Or d(j, 4) = "Activité16") Then nb = nb + 1
      End If
   Next
   If nb = 0 Then Feuil3.Cells(2, i) = "" Else Feuil3.Cells(2, i) = nb / 2
Next
End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa