VBA, Valeur max tableau multifactoriel
Bonjour,
J'essaye de réaliser un outil qui permet de réaliser un inventaire en plusieurs étapes, l'idée est qu'a chaque étape l'utilisateur clique sur un bouton, une action se réalise en fonction de ses choix et un autre bouton apparaît pour pouvoir lancer l'étape suivante.
Etape 1 : Des listes déroulantes apparaissent en fonction du nombre de travée choisi, du type et de la présence de PAF
Etape 2: Une représentation des piquages des travées s'élabore en fonction des longueurs choisis
Par exemple si l'utilisateur choisi travée standard puis 62 en longueur, en se rapportant au tableau Cannes, cela correspond à 21 piquages
Je n'arrive pas à lire les valeurs de mon tableau page "cannes" pour savoir quel est le nombre de piquages max par longueur de travées avec les deux critères défini par l'utilisateur.
Et du coup pouvoir enregistrer ces valeurs pour les réutiliser plus tard. Ci après mon code :
Sub PIQUAGES()
Dim TYPES As String
Dim LONGR As Range
With Sheets("User")
TYPES = .Cells(F, 7)
LONGR = .Cells(B, 18)
End With
With Sheets("Cannes")
L1 = 0
For L = 2 To .Range("A65500").End(xlUp).Row
If .Cells(L, 1) = TYPES And .Cells(L, 2) = LONGR Then
L1 = L
End If
If .Cells(L, 1) = TYPES And .Cells(L, 2) = LONGR And .Cells(L, 3) = PIQUAGE Then
PIQUAGE = .Cells(L, 5)
Else
If .Cells(L, 1) = TYPES And .Cells(L, 2) = LONGR And .Cells(L, 3) > PIQUAGE Then
Exit For
End If
End If
MsgBox (PIQUAGE)
Next L
End With
End SubHello,
Bon BARNS il va falloir qu'on cause tout les 2 ...
Les listes déroulantes sont faites pour "normer" les choses et te rendre l'exploitation derrière + simple... Donc si dans ta liste déroulante tu as "Travees_ST" et que dans ta feuilles "CANNES" tu as "TRAVEES ST" on a un gros problème de formalisme ...
Passons à VBA maintenant :
Il est important de déclarer tes variables !
Pour info cette syntaxe ne fonctionne pas :
TYPES = .Cells(F, 7)c'est soit :
TYPES = .Cells(1, 1)
TYPES = .Range("A1")
TYPES = .[A1]
TYPES = .Cells(1, "A")Ceci étant dit
Sub PIQUAGES()
Dim stravees_type As String
Dim ilongueur As Integer
Dim iligne As Integer
With Sheets("user")
stravees_type = .[F7]
ilongueur = .[B18]
End With
With Sheets("Cannes")
Do
iligne = iligne + 1
Loop Until .Cells(iligne, 1) = stravees_type _
And .Cells(iligne, 2) = ilongueur
Do While .Cells(iligne, 1) = stravees_type _
And .Cells(iligne, 2) = ilongueur
iligne = iligne + 1
Loop
MsgBox "Le piquage est de : " & .Cells(iligne - 1, 3)
End With
End SubSalut Rag02700,
Merci beaucoup pour tes remarques. Je prends note. Effectivement nous souhaitons que le fichier soit le plus logique possible. GROOSSE ERREUR de ma part, sorry..
Je vais mettre de l'ordre dans tout ca et tenter d'avancer dans ce projet ;).
Bonne semaine!
Hello,
Du coup ton sujet est résolu ?
Salut Rag02700,
Oui j'ai fait un très gros travail d'uniformisation et de tri des données et j'ai pas mal avancé sur le projet. Maintenant je déclare toutes mes variables. Après je sens que dans la structure globale, il y a des points que je peux améliorer mais j'avance comme je peux. Si tu as des conseils je suis preneur :)
Hello,
J'ai regardé dans les grandes lignes, c'est pas mal
Bon aller chipotons un peu
Je suis pas trop fan des déclarations qui ne sont pas en haut de module
For x = 1 To 16
If Range("Choix_montage").Value = Sheets("Datas").Cells(x, 15) Then k = Sheets("Datas").Cells(x, 14)
Next x
If ActiveSheet.Name <> "User" Then Exit Sub
'Dim TypTrv$: TypTrv = Range("Type_travée").Value:
If TypTrv = "" Then Exit Sub
'Dim TypCan$: TypCan = Range("Type_de_canne").Value:
If Typcan = "" Then Exit Sub
'Dim HtrArr$: HtrArr = Range("Hauteur_arroseurs").Value
Dim n1&: n1 = Cells(Rows.Count, 2).End(3).Row: If n1 < 18 Then Exit Sub
Dim s$, m%, d%, n2&, vx$, pg As Byte, L%, i&, p&, j&: m = Columns.Count