problème transposition colonne en ligne

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 !

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

Dernière édition:
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,
 
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
 
- 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

Retour