base de données

S

Silene

Guest
Bonjour,
J'aimerai savoir comment procéder pour trier une base de données et mettre les résultats dans un tableau automatiquement.
(Voir piece jointe).
Merci de me répondre.
Silene
 

Pièces jointes

  • BD.zip
    3.6 KB · Affichages: 19
  • BD.zip
    3.6 KB · Affichages: 13
  • BD.zip
    3.6 KB · Affichages: 11
G

Gérard DEZAMIS

Guest
Bonsoir Silene

=SOMMEPROD((C5:C12="A")*(D5:D12=D17)*(E5:E12)) pour la cellule D18
Regarde si cela te convient

@+
GD
child029.gif
 
M

Monique

Guest
Bonjour,

A essayer.

En D18 et à copier-coller sur tout ton tableau :
=SOMMEPROD(($D$5:$D$12=D$17)*($C$5:$C$12=DECALER($B18;-MOD((LIGNES(D$18:D18)-1);5);0))*(DECALER($D$5:$D$12;0;EQUIV($C18;$E$4:$I$4;0))))

Format de nombre personnalisé (pour que les 0 ne se voient pas) :
[=0]"";0
 
G

Gérard DEZAMIS

Guest
Bonsoir Monique et Re-Silene

Je le savais bien que j'étais toujours en rodage !

Alors Monique toujours avec le Turbo ? Pense à allumer tes "codes"

Je n'ai pas tout compris ! Decaler Equiv et -MOD dans la même formule.
Faut le faire exprès !
En passant (lentement) - MOD ? Une petite explication ne serait pas réfusée.

Bises par avance

@+ GD
 
C

CBernardT

Guest
Bonsoir Silene, Gérard et Monique

La base est placée dans la première feuille et le tableau dans la seconde.

Il est supposé que la base est extensible vers le bas mais que le Tableau est fixe.

Il est supposé également qu'il peut y avoir plusieurs données à transférer sur une même ligne de la base.

Un bouton commande la macro de transfert depuis la feuille Tableau, également, cette opération s'effectue automatiquement à l'activation de la feuille Tableau.

Cordialement

CBernardT
 

Pièces jointes

  • BDV1.zip
    14 KB · Affichages: 16
M

Monique

Guest
Re,

Suite.
Les plages sont nommées, c'est plus facile à lire :
=SOMMEPROD((Service=D$17)*(Bureau=DECALER($B18;-MOD((LIGNES(D$18:D18)-1);5);0))*(DECALER(Service;0;EQUIV($C18;Motif;0))))

Et puis il y a une 2ème formule, utilisant la fonction Indirect() en ayant donné un nom aux 5 colonnes de motifs

Comme explication, j'ai fait des "formules-phrases"
 

Pièces jointes

  • BDSolene.zip
    11.1 KB · Affichages: 21
S

Silene

Guest
Bonjour à tous et merci pour vos réponses qui sont d'ailleurs super.

J'ai une petite question pour " CBernardT ".

Comme j'aime bien comprendre ce que je fais j'aimerai avoir une petite explication sur le morceau de code qui suit:


For Each C In Plage
If C <> "" Then
For Each Cbis In Table
If Cbis.EntireRow.Range("C1") = C.EntireColumn.Range("A4") And _
Cbis.EntireColumn.Range("A3") = C.EntireRow.Range("D1") And _
Cbis.EntireRow.Range("B1") = C.EntireRow.Range("C1") Then
Cbis = Cbis + C
End If
Next Cbis
End If
Next C

merci de me répondre

Silene
 
C

CBernardT

Guest
Bonjour Silene

La puissance des propriétés "EntireRow" et "EntireColumn" ainsi d'ailleurs que la propriété "Offset" est d'offrir des outils souples pour calculer de nouveaux objets Range à partir d'une plage d'origine.

C'est très pratique pour comparer des variables aux étiquettes d'un tableau et inscrire au croisement une valeur. Ton projet en est l'exemple type.

Explications sur la première ligne de code :
Cbis.EntireRow.Range("C1") = C.EntireColumn.Range("A4")

La propriété EntireRow renvoie toute la ligne de la cellule Cbis et .Range("C1") limite le renvoie à la cellule 3 (C troisième lettre) de cette ligne.

La propriété EntireColumn renvoie toute la colonne de la cellule C et .Range("A4") limite le renvoie à la cellule 4 de la colonne.

Explication de la condition If et And :

If Cbis.EntireRow.Range("C1") = C.EntireColumn.Range("A4") And _
Cbis.EntireColumn.Range("A3") = C.EntireRow.Range("D1") And _
Cbis.EntireRow.Range("B1") = C.EntireRow.Range("C1") Then
Cbis = Cbis + C
End If

If (Si) Condition1 And (Et) Condition2 And Condition3 then
Action
end if

Si les trois conditions sont réalisées alors Action sinon aller à la fin.

Enfin,
For Each C In Plage
For Each Cbis In Table
If..... Then
Cbis = Cbis + C
End If
Next Cbis
Next C

For Each In Next, est une boucle qui assigne à tour de rôle chaque objet d'une collection. Ici tous les objets C dans la Collection Plage sont comparés à tous les objets Cbis de la collection Table, si les conditions de If sont vrai alors il ajoute la valeur de C à Cbis.

Cordialement

CBernardT
 

Statistiques des forums

Discussions
313 060
Messages
2 094 924
Membres
106 128
dernier inscrit
lopierre