Créer automatiquement une liste à partir de tableaux

Résolu/Fermé
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 2 juil. 2021 à 09:47
yg_be Messages postés 21119 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 février 2023 - 5 juil. 2021 à 19:21
Bonjour,

Pour un projet j'aimerais automatiser une création de réferences.
L'idée est qu'en appuyant sur un seul bouton, cela active une macro qui me créait toutes les références possibles.

Comme vous pouvez le voir sur la photo, j'ai plusieurs tableaux (qui évolueront surement au fur et à mesure du temps).



La photo suivante montre la construction d'une réference :



La réference sera au final de ce type là : SQA804V-2U3O3O1O/DO

Cela signifie que chaque tableau intervient une fois, sauf le tableau "Plaque" qui peut intervenir 1 à 4 fois en fonction du nombre de postes (tableau "Poste").

J'aurais d'abord voulu savoir si c'était quelque chose de réalisable, et auquel cas si vous pouviez me donner des pistes pour pouvoir m'en sortir.

N'hesitez pas à me demander plus d'informations si ce n'est pas assez clair.

Merci d'avance et bonne fin de semaine !

Bien à vous

1 réponse

yg_be Messages postés 21119 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 février 2023 1 308
2 juil. 2021 à 10:08
bonjour,
souhaites-tu obtenir un long tableau, similaire à celui de la deuxième image, avec toutes les combinaisons possibles?
maitrises-tu le VBA? cherches-tu à l'apprendre?
commence peut-être à faire cela à partir des tableaux gamme et vis, cela t'aidera à faire cela progressivement.
1
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
2 juil. 2021 à 10:23
Tout d'abord merci pour ta réponse très rapide !

L'idée est plutôt d'obtenir une colonne unique où chaque ligne correspond à une réference de type : "SQA804V-2U3O3O1O/DO" afin d'obtenir la totalité des références possibles.

Pour être honnete, non je ne maitrise pas VBA, mais le fait d'avoir déjà programmé dans d'autres languages me permet généralement de m'en sortir grâce à des recherches et à la magique option "enregistrer une macro".

A chaque nouveau projet, j'apprends de nouvelles fonctionnalités/fonctions de VBA que je réutilise ensuite lorsque j'en ai besoin.

Je pense que le type de logique est la suivante :
- Dans le tableau Gamme : Tant que la cellule n'est pas vide alors
- enregister la cellule actuelle dans une variable
- Dans le tableau Vis : Tant que la cellule n'est pas vide alors
- ajouter la cellule actuelle dans la variable
- Dans le tableau Largeur : Tant que la cellule n'est pas vide alors
- ajouter la cellule actuelle dans la variable

etc

C'est bien ça ?
0
yg_be Messages postés 21119 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 février 2023 1 308 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
2 juil. 2021 à 10:59
bonne idée, essaie cela.
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > yg_be Messages postés 21119 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 février 2023
2 juil. 2021 à 17:18
Je suis partie sur ça pour uniquement les plaques simples pour l'instant et sans la finition :

Sub CREER()
'
' CREER Macro
'

'

Dim clg As Range, derligg As Long, ligg As Long, nouvcelg As Range, ref As String
Dim clk As Range, derligk As Long, ligk As Long, nouvcelk As Range
Dim clo As Range, derligo As Long, ligo As Long, nouvcelo As Range
Dim cls As Range, derligs As Long, ligs As Long, nouvcels As Range
Dim clc As Range, derligc As Long, ligc As Long, nouvcelc As Range

Sheets("Plaque").Select
Set clg = [G3]
derligg = clg.End(xlDown).Row
Set nouvcelg = Cells(derligg + 1, 1)
For ligg = 2 To derligg
    
    Set clk = [K3]
    derligk = clk.End(xlDown).Row
    Set nouvcelk = Cells(derligk + 1, 1)
    For ligk = 2 To derligk
    
        Set clo = [O3]
        derligo = clo.End(xlDown).Row
        Set nouvcelo = Cells(derligo + 1, 1)
        For ligo = 2 To derligo
    
            Set cls = [S3]
            derligs = cls.End(xlDown).Row
            Set nouvcels = Cells(derligs + 1, 1)
            For ligs = 2 To derligs
    
                Set clc = [C3]
                derligc = clc.End(xlDown).Row
                Set nouvcelc = Cells(derligc + 1, 1)
                For ligc = 2 To derligc
    
                    ref = clg & clk & clo & cls & clc
                    Sheets("Création automatique de réferen").Select
                    Range("A2").Select
                    ActiveCell = ref
                    ActiveCell.Offset(1, 0).Range("A1").Select
    
                Set clc = clc.Offset(1)
                Next ligc
                
            Set cls = cls.Offset(1)
            Next ligs
            
        Set clo = clo.Offset(1)
        Next ligo
        
    Set clk = clk.Offset(1)
    Next ligk
    
Set clg = clg.Offset(1)
Next ligg

    


End Sub


J'obtiens malheureusement une erreur à :
Set nouvcelc = Cells(derligc + 1, 1)


Comment est-ce que cela vous semble ?

Merci d'avance !
0
yg_be Messages postés 21119 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 février 2023 1 308 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
2 juil. 2021 à 17:23
il faut éviter d'utiliser select.
au lieu de
Sheets("Plaque").Select
Set clg = [G3]

ceci est mieux
Set clg = Sheets("Plaque").[G3]


il est recommandé d'ajouter
option explicit
en début de module, ce qui force à déclarer les variables.

quel est le message d'erreur?
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > yg_be Messages postés 21119 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 février 2023
2 juil. 2021 à 17:35
Merci pour ces conseils, voilà le nouveau code :

Sub CREER()
'
' CREER Macro
'

'

Option Explicit

Dim clg As Range, derligg As Long, ligg As Long, nouvcelg As Range, ref As String
Dim clk As Range, derligk As Long, ligk As Long, nouvcelk As Range
Dim clo As Range, derligo As Long, ligo As Long, nouvcelo As Range
Dim cls As Range, derligs As Long, ligs As Long, nouvcels As Range
Dim clc As Range, derligc As Long, ligc As Long, nouvcelc As Range

Set clg = Sheets("Plaque").[G3]
derligg = clg.End(xlDown).Row
Set nouvcelg = Cells(derligg + 1, 1)
For ligg = 2 To derligg
    
    Set clk = [K3]
    derligk = clk.End(xlDown).Row
    Set nouvcelk = Cells(derligk + 1, 1)
    For ligk = 2 To derligk
    
        Set clo = [O3]
        derligo = clo.End(xlDown).Row
        Set nouvcelo = Cells(derligo + 1, 1)
        For ligo = 2 To derligo
    
            Set cls = [S3]
            derligs = cls.End(xlDown).Row
            Set nouvcels = Cells(derligs + 1, 1)
            For ligs = 2 To derligs
    
                Set clc = [C3]
                derligc = clc.End(xlDown).Row
                Set nouvcelc = Cells(derligc + 1, 1)
                For ligc = 2 To derligc
    
                    ref = clg & clk & clo & cls & clc
                    Sheets("Création automatique de réferen").[A2]
                    ActiveCell = ref
                    ActiveCell.Offset(1, 0).Range("A1").Select
    
                Set clc = clc.Offset(1)
                Next ligc
                
            Set cls = cls.Offset(1)
            Next ligs
            
        Set clo = clo.Offset(1)
        Next ligo
        
    Set clk = clk.Offset(1)
    Next ligk
    
Set clg = clg.Offset(1)
Next ligg

    


End Sub


L'OptionExplicit semble incorrect car cela m'affiche une "Compile error: Invalid inside procedure".

Sinon en enlevant cette première ligne j'obtiens l'erreur suivante :
'Run-time error '1004':

Application-defined or object-defined error'
0