macro ou une fonction si modifiée suffit?

fredalien

XLDnaute Junior
bonjour la communauté,

encore le boulet de service (moi) avec une question à 2 francs pour vous!!

voilà, j'ai un tableau où il y a des reférences qui peuvent posséder plusieurs dimensions. je souhaite faire apparaître lesquelles sur une autre feuille!! dois-je faire une macro (ou plutôt vous la demander:p) ou une fonction si suffirait.
je vous remercie de votre aide (encore une fois)

c'est pas très clair, mais avec le tableau joint vous allez comprendre

Fredalien
 

Pièces jointes

  • vive xld.xls
    16.5 KB · Affichages: 57
D

Denis

Guest
Re : macro ou une fonction si modifiée suffit?

Bonjour Fredalien et le Forum
ci-joint ton fichier avec les formules. Tu peux modifier les entêtes de colonne sur ta feuille 2, la formule recherche automatiquement ou se retrouve ce texte en page 1 sur la ligne 1.
Bon courage et à +
Denis
 

Pièces jointes

  • vive%20xld(1).zip
    4.3 KB · Affichages: 29

Robert

XLDnaute Barbatruc
Repose en paix
Re : macro ou une fonction si modifiée suffit?

Bonjour Frealien, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim celc As Range 'déclare la variable celc (Cellule Colonne)
Dim dest As Range 'déclare la variable dest (DESTination)
Dim cell As Range 'déclare la variable cell (Cellule Ligne)
Dim x As Byte 'déclare la variable x (incrément de décalage)
 
With Sheets("plage de données") 'prend en compte l'onglet "plage de données"
    For Each celc In .Range("A2:A" & .Range("A65236").End(xlUp).Row) 'boucle 1 : sur toutes les cellules éditée celc de la colonne A
        x = 1 'de'finit la variable x
        Set dest = Sheets("[COLOR=red]Feuil3[/COLOR]").Range("A65536").End(xlUp).Offset(1, 0) 'definit la cellule de destination
        celc.Copy dest 'copy et colle la valeur de la celluel celc dans dest
        For Each cell In .Range(.Cells(celc.Row, 2), .Cells(celc.Row, 256).End(xlToLeft)) 'boucle 2 sur toutes les cellules éditées de la ligne de celc
            If Not cell = "" Then 'condition : si la celleule cell né st pas vide
                dest.Offset(0, x).Value = .Cells(1, cell.Column).Value 'place l'étiquette de la cellule cell
                x = x + 1 'redéfinit la variable x (incrément de 1)
            End If 'fin de la condition
        Next cell 'prochaine cellule cell de la boucle 2
    Next celc 'prochaine cellule de la boucle 1
End With 'fin de la prise en compte de l'onglet "plage de données"
End Sub
Adapte l'onglet (en rouge dans le code) à ton cas...

Édition :

Bonjour Denis on s'est croisé
 

fredalien

XLDnaute Junior
Re : macro ou une fonction si modifiée suffit?

salut Denis,

merci de ta réponse, c cool!!
ça va me servir à fond, mais je t'explique pour quoi ça va servir et tu vas comprendre.

ces reférences (015.4 ; 017.rfs ; ...) doivent être reliées à des listes déroulantes par dimension (couleur ; H ; .......). ta formule (que j'ai sauvegardé avec une grande joie car elle va me servir) ne me permet pas de savoir ce que j'attend.

je t'explique:

je veux savoir de quelles dimension(s) j'ai besoin pour telle reférence.par ex : pour la reférence 012.18 il faut :"couleur" "dimension de réservation" "surface passage d'air".

la seconde étape sera la création des listes dans des choix possibles par dimension et enfin créer les boîtes de choix (avec ta formule qui me servira à ce moment je pense;)).

j'espère que tu ne m'en voudras pas de cette réponse et si tu peux m'aider ce sera avec plaisir!! je souhaite que les valeurs 1 de la plage de données (feuille 1) affichent l'entête de colonne correspondante sur la feuille 2 sans cellule vides.

merci encore

Fredalien
 

fredalien

XLDnaute Junior
Re : macro ou une fonction si modifiée suffit?

:)Bonjour robert,

je te dis ce qu'il me dit le débogueur c'est bizarre!!

Sub celvide()
Dim celc As Range 'déclare la variable celc (Cellule Colonne)
Dim dest As Range 'déclare la variable dest (DESTination)
Dim cell As Range 'déclare la variable cell (Cellule Ligne)
Dim x As Byte 'déclare la variable x (incrément de décalage)

With Sheets("plage de données") 'prend en compte l'onglet "plage de données"
For Each celc In .Range("A2:A" & .Range("A65236").End(xlUp).Row) 'boucle 1 : sur toutes les cellules éditée celc de la colonne A
x = 1 'de'finit la variable x
Set dest = Sheets("Feuil3").Range("A65536").End(xlUp).Offset(1, 0) 'definit la cellule de destination
celc.Copy dest 'copy et colle la valeur de la celluel celc dans dest
For Each cell In .Range(.Cells(celc.Row, 2), .Cells(celc.Row, 256).End(xlToLeft)) 'boucle 2 sur toutes les cellules éditées de la ligne de celc
If Not cell = "" Then 'condition : si la celleule cell né st pas vide
dest.Offset(0, x).Value = .Cells(1, cell.Column).Value 'place l'étiquette de la cellule cell
x = x + 1 'redéfinit la variable x (incrément de 1)
End If 'fin de la condition
Next cell 'prochaine cellule cell de la boucle 2
Next celc 'prochaine cellule de la boucle 1
End With 'fin de la prise en compte de l'onglet "plage de données"
Application.Run "PERSO.XLS!celvide"
Windows("vive%20xld(1).xls").Activate
ActiveWindow.ScrollColumn = 45
ActiveWindow.ScrollColumn = 44
ActiveWindow.ScrollColumn = 43
ActiveWindow.ScrollColumn = 42
ActiveWindow.ScrollColumn = 41
ActiveWindow.ScrollColumn = 40
ActiveWindow.ScrollColumn = 39
ActiveWindow.ScrollColumn = 37
ActiveWindow.ScrollColumn = 35
ActiveWindow.ScrollColumn = 34
ActiveWindow.ScrollColumn = 33
ActiveWindow.ScrollColumn = 32
ActiveWindow.ScrollColumn = 31
ActiveWindow.ScrollColumn = 30
ActiveWindow.ScrollColumn = 29
ActiveWindow.ScrollColumn = 28
ActiveWindow.ScrollColumn = 27
ActiveWindow.ScrollColumn = 26
ActiveWindow.ScrollColumn = 25
ActiveWindow.ScrollColumn = 24
ActiveWindow.ScrollColumn = 23
ActiveWindow.ScrollColumn = 22
ActiveWindow.ScrollColumn = 21
ActiveWindow.ScrollColumn = 20
ActiveWindow.ScrollColumn = 19
ActiveWindow.ScrollColumn = 18
ActiveWindow.ScrollColumn = 17
ActiveWindow.ScrollColumn = 16
ActiveWindow.ScrollColumn = 15
ActiveWindow.ScrollColumn = 14
ActiveWindow.ScrollColumn = 13
ActiveWindow.ScrollColumn = 12
ActiveWindow.ScrollColumn = 11
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Application.Run "PERSO.XLS!celvide"
End Sub

j'enlève ces lignes après une première exécution et ça marche.

merci à toi! c'est cool!!
maintenant je vais modifier pour mon fichier complet et ça devrait rouler!!


je re pour vous tenir au courant

Fredalien
 

Discussions similaires

Réponses
2
Affichages
288

Statistiques des forums

Discussions
312 231
Messages
2 086 430
Membres
103 207
dernier inscrit
Michel67