Bonsoir,
Je suis en train de programmer un petit user form dont le but est relativement simple.
mon classeur se présente sous la forme:
A 1
A 2
A 3
A 4
A 5
A 6
B 11
B 12
B 13
B 14
et ça continue...
le but est d'avoir une boite de dialogue avec 2 listes déroulantes :
la première propose A,B,C ... la première colonne, et sans doublons ni l'en§tête.
je pense avoir réussi (en tout cas à l'affichage c'est bon) avec ce code :
Ensuite la 2e liste devrait être conditionnée par le résultat de la première. si je choisi la valeur A en premier choix elle ne doit me proposer que 1, 2 ...6 et pas au delà.
pour le moment j'ai ce code, qui m'affiche toutes les valeurs (qui vont par paire, dans mon tableau ce sont des profondeurs, entre lesquelles sont effectuées des mesures). Ce code est dans le même private sub que la première liste. J'ai mis une valeurs de 100 pour le nombre de lignes mais en fait il faut que ça s'arrête à la fin de la valeur A en première colonne.
Ensuite ça se corse, pour moi en tout cas.
Les résultats des mesures de A2 par exemple se trouvent de E2 à P2
Ceux de B12 se trouvent de E8 à P8 si B12 se trouve en 8e ligne.
L'idée est de recopier toute la ligne 8, si j'ai choisi B puis 12, dans la ligne 4 de la feuille "Graphics". Cette ligne est fixe, j'applique ensuite sur la feuille quelques opérations puis une mise en forme sous forme de graph qui se met à jour tout seul quand les valeurs de la ligne 4 changent, y compris le titre.
Quand je copie à la main en tout cas ça marche super bien. sauf que j'ai 15 000 lignes de données (d'où la macro...).
Bref pour le moment à force de vagabondages sur le net j'ai fini par pondre ce code quand je clique sur "valider":
et là bien sûr c'est trop beau pour fonctionner (même si ma liste conditionnelle fonctionne pas j'aurai bien aimé que la simple copie de données fonctionne).
annéfé' ce gentil excel me dit que non c'est pas comme ça qu'on fait sans me dire comment faire.
Je ne suis pas sûr déjà de bien récupérer dans "ligne" le numéro de ligne correspondant à mon dernier choix (ComboBoxProf est la liste dans laquelle sont répertoriées et choisies les profondeurs).
je sais pas pourquoi ça bloque... je lui demande pas la lune pourtant. j'ai recopié le code de la macro enregistrée quand je le fais à la main et j'ai essayé de changer le numéro de la ligne par un entier contenu dans "ligne" et qui est censé être la valeur de ligne du choix de la dernière combobox. en théorie la première combobox doit pouvoir renvoyer elle à plusieurs lignes.
Avez-vous des pistes pour m'aider ? que ce soit dans la simple copie ou dans la liste conditionnelle ?
j'ai essayé d'être le plus clair possible sans fournir de fichier car les données sont confidentielles mais au besoin je peux copier mon fichier et le remplir de valeurs bidon, si ma description n'était pas claire.
Merci d'avance à l'âme charitable qui me sortira la tête de l'eau. j'ai l'impressione de me prendre la tête sur un truc super simple...
Je suis en train de programmer un petit user form dont le but est relativement simple.
mon classeur se présente sous la forme:
A 1
A 2
A 3
A 4
A 5
A 6
B 11
B 12
B 13
B 14
et ça continue...
le but est d'avoir une boite de dialogue avec 2 listes déroulantes :
la première propose A,B,C ... la première colonne, et sans doublons ni l'en§tête.
je pense avoir réussi (en tout cas à l'affichage c'est bon) avec ce code :
Code:
Private Sub UserForm_Initialize()
Dim i As Integer
ComboBoxPuits.Clear
For i = 3 To Sheets("Data").Range("A" & Cells.Rows.Count).End(xlUp).Row
ComboBoxPuits = Sheets("Data").Range("A" & i)
If ComboBoxPuits.ListIndex = -1 Then ComboBoxPuits.AddItem Sheets("Data").Range("A" & i)
Next i
End Sub
Ensuite la 2e liste devrait être conditionnée par le résultat de la première. si je choisi la valeur A en premier choix elle ne doit me proposer que 1, 2 ...6 et pas au delà.
pour le moment j'ai ce code, qui m'affiche toutes les valeurs (qui vont par paire, dans mon tableau ce sont des profondeurs, entre lesquelles sont effectuées des mesures). Ce code est dans le même private sub que la première liste. J'ai mis une valeurs de 100 pour le nombre de lignes mais en fait il faut que ça s'arrête à la fin de la valeur A en première colonne.
Code:
With Sheets("Data")
Set plg = .Range("C3:D100")
tbl = plg
End With
With Me.ComboBoxProf
.ColumnCount = 2
.ColumnWidths = "25 pt;25 pt"
.List = tbl
End With
Ensuite ça se corse, pour moi en tout cas.
Les résultats des mesures de A2 par exemple se trouvent de E2 à P2
Ceux de B12 se trouvent de E8 à P8 si B12 se trouve en 8e ligne.
L'idée est de recopier toute la ligne 8, si j'ai choisi B puis 12, dans la ligne 4 de la feuille "Graphics". Cette ligne est fixe, j'applique ensuite sur la feuille quelques opérations puis une mise en forme sous forme de graph qui se met à jour tout seul quand les valeurs de la ligne 4 changent, y compris le titre.
Quand je copie à la main en tout cas ça marche super bien. sauf que j'ai 15 000 lignes de données (d'où la macro...).
Bref pour le moment à force de vagabondages sur le net j'ai fini par pondre ce code quand je clique sur "valider":
Code:
Private Sub cmdValider_Click()
Dim ligne As Integer
ligne = ufChoix.ComboBoxProf.ListIndex
Sheets("Data").Select
Rows("ligne").Select ' c'est ici que ça coince
Selection.Copy
Sheets("Graphics").Select
Rows("4:4").Select
ActiveSheet.Paste
End Sub
et là bien sûr c'est trop beau pour fonctionner (même si ma liste conditionnelle fonctionne pas j'aurai bien aimé que la simple copie de données fonctionne).
annéfé' ce gentil excel me dit que non c'est pas comme ça qu'on fait sans me dire comment faire.
Je ne suis pas sûr déjà de bien récupérer dans "ligne" le numéro de ligne correspondant à mon dernier choix (ComboBoxProf est la liste dans laquelle sont répertoriées et choisies les profondeurs).
je sais pas pourquoi ça bloque... je lui demande pas la lune pourtant. j'ai recopié le code de la macro enregistrée quand je le fais à la main et j'ai essayé de changer le numéro de la ligne par un entier contenu dans "ligne" et qui est censé être la valeur de ligne du choix de la dernière combobox. en théorie la première combobox doit pouvoir renvoyer elle à plusieurs lignes.
Avez-vous des pistes pour m'aider ? que ce soit dans la simple copie ou dans la liste conditionnelle ?
j'ai essayé d'être le plus clair possible sans fournir de fichier car les données sont confidentielles mais au besoin je peux copier mon fichier et le remplir de valeurs bidon, si ma description n'était pas claire.
Merci d'avance à l'âme charitable qui me sortira la tête de l'eau. j'ai l'impressione de me prendre la tête sur un truc super simple...
Dernière édition: