Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête croisée Excel 2003

4 réponses
Avatar
thomas
Bonjour,

Ca fait quelques temps que je cherche à créer une requête un peu
particulière sans y parvenir

Comment écrire une requête pour obtenir ce résultat :
http://cjoint.com/data/kDtAMRr3im.htm

Merci pour votre aide!

4 réponses

Avatar
FFO
Salut thomas

Je ne vois pas trop quelle requète te proposer compte tenu d'une certaine
compléxité de ton contexte
Mais cette macro relativement simple aboutit au même résultat :

For Each c In Worksheets("Feuil1").Range("A4", "A" &
Sheets("Feuil1").Range("A65535").End(xlUp).Row)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(1, 0) = c.Offset(0, 1)
i = 1
For Each d In Worksheets("Feuil1").Range("D4", "D" &
Sheets("Feuil1").Range("D65535").End(xlUp).Row)
If d = c Then
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i) = d.Offset(0, 1)
i = i + 1
End If
Next
Next

à actualiser :

Feuil1 et Feuil2 (Onglet données source et Onglet Résultat) en fonction du
nom des Onglets attribués

Range("A4", "A" & Sheets("Feuil1").Range("A65535").End(xlUp).Row) en
fonction de la position des indexes de la table 1 dans la feuille

Range("D4", "D" & Sheets("Feuil1").Range("D65535").End(xlUp).Row) en
fonction de la position des indexes de la table 2 dans la feuille

Ce code te donne le résultat souhaité en Feuil2

sur ce lien ton fichier avec la macro

http://www.cijoint.fr/cjlink.php?file=cj200810/cijstwO3ov.xls

Effaces en Feuil2 le résultat (lignes 2 à 4) et actives la macro "Requète"

Fais des essais et dis moi !!!!
Avatar
thomas
merci mais je m'etais planté de forum.. C'etait pour access

"FFO" a écrit dans le message de groupe de
discussion :
Salut thomas

Je ne vois pas trop quelle requète te proposer compte tenu d'une certaine
compléxité de ton contexte
Mais cette macro relativement simple aboutit au même résultat :

For Each c In Worksheets("Feuil1").Range("A4", "A" &
Sheets("Feuil1").Range("A65535").End(xlUp).Row)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(1, 0) = c.Offset(0, 1)
i = 1
For Each d In Worksheets("Feuil1").Range("D4", "D" &
Sheets("Feuil1").Range("D65535").End(xlUp).Row)
If d = c Then
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i) = d.Offset(0, 1)
i = i + 1
End If
Next
Next

à actualiser :

Feuil1 et Feuil2 (Onglet données source et Onglet Résultat) en fonction du
nom des Onglets attribués

Range("A4", "A" & Sheets("Feuil1").Range("A65535").End(xlUp).Row) en
fonction de la position des indexes de la table 1 dans la feuille

Range("D4", "D" & Sheets("Feuil1").Range("D65535").End(xlUp).Row) en
fonction de la position des indexes de la table 2 dans la feuille

Ce code te donne le résultat souhaité en Feuil2

sur ce lien ton fichier avec la macro

http://www.cijoint.fr/cjlink.php?file=cj200810/cijstwO3ov.xls

Effaces en Feuil2 le résultat (lignes 2 à 4) et actives la macro "Requète"

Fais des essais et dis moi !!!!
Avatar
J&B
Bonsoir,

La lecture et le test de cette macro est presque ce que je cherche.
Par contre dans la table 2 j'ai plusieurs champs description (decription2,
decription3, ....que je voudrai donc ajouter
dans la feuille 2

Merci pour l'aide


"thomas" <nomail> a écrit dans le message de news:

merci mais je m'etais planté de forum.. C'etait pour access

"FFO" a écrit dans le message de groupe de
discussion :
Salut thomas

Je ne vois pas trop quelle requète te proposer compte tenu d'une certaine
compléxité de ton contexte
Mais cette macro relativement simple aboutit au même résultat :

For Each c In Worksheets("Feuil1").Range("A4", "A" &
Sheets("Feuil1").Range("A65535").End(xlUp).Row)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(1, 0) = c.Offset(0, 1)
i = 1
For Each d In Worksheets("Feuil1").Range("D4", "D" &
Sheets("Feuil1").Range("D65535").End(xlUp).Row)
If d = c Then
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i) = d.Offset(0, 1)
i = i + 1
End If
Next
Next

à actualiser :

Feuil1 et Feuil2 (Onglet données source et Onglet Résultat) en fonction du
nom des Onglets attribués

Range("A4", "A" & Sheets("Feuil1").Range("A65535").End(xlUp).Row) en
fonction de la position des indexes de la table 1 dans la feuille

Range("D4", "D" & Sheets("Feuil1").Range("D65535").End(xlUp).Row) en
fonction de la position des indexes de la table 2 dans la feuille

Ce code te donne le résultat souhaité en Feuil2

sur ce lien ton fichier avec la macro

http://www.cijoint.fr/cjlink.php?file=cj200810/cijstwO3ov.xls

Effaces en Feuil2 le résultat (lignes 2 à 4) et actives la macro "Requète"

Fais des essais et dis moi !!!!



Avatar
FFO
Salut J&B

Pour étendre cette macro à des champs supplémentaires de la table 2 il faut
rajouter autant de fois la ligne de commande qu'il y a de champs:

Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i) = d.Offset(0, 1)


en rajoutant un indice de déplacement représenté par l'Offset ainsi :

1° champ
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i) = d.Offset(0, 1)
2° champ
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i+1) = d.Offset(0, 1+1)
3° champ
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i+2) = d.Offset(0, 1+2
4° champ
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i+3) = d.Offset(0, 1+3)

Etc....

et faire évoluer la variable i en fonction de ce nombre de champ
Pour 1 champ :
i = i+1
Pour 2 champs :
i = i+2
Pour 3 champs :
i = i+3
Pour 4 champs
i = i+4

Etc....

ce qui donne ce code pour 4 champs :

For Each c In Worksheets("Feuil1").Range("A4", "A" &
Sheets("Feuil1").Range("A65535").End(xlUp).Row)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(1, 0) = c.Offset(0, 1)
i = 1
For Each d In Worksheets("Feuil1").Range("D4", "D" &
Sheets("Feuil1").Range("D65535").End(xlUp).Row)
If d = c Then
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i) = d.Offset(0, 1)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i + 1) = d.Offset(0, 2)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i + 2) = d.Offset(0, 3)
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(0, i + 3) = d.Offset(0, 4)
i = i + 4
End If
Next
Next

Sur ce lien un exemple pour 4 champs

http://www.cijoint.fr/cjlink.php?file=cj200810/cij3ej657U.xls

En Feuil2 vides les lignes 2 à 4 et actives la macro "Requête"

Fais des essais et dis moi !!!!