bonjour à tous
peut etre une question recurrente ,
je joins le fichier car souvent il est difficile de ce faire comprendre
;)
merci de votre aide
Version imprimable
bonjour à tous
peut etre une question recurrente ,
je joins le fichier car souvent il est difficile de ce faire comprendre
;)
merci de votre aide
Bonjour
Il serait bien que tu expliques aussi en détail ce qui te poses un problème.
En effet de nombreux membres ne téléchargent pas les fichiers, donc tu limites le nombre de personnes qui pourront te répondre.
Philippe
bonjour
il est parfois difficile de ce faire comprendre :D
la difficulte se trouve de
comment balayer une plage de longueur variable en fonction de la ligne ou elle se trouve.
les plage contient des nombres entiers.
le seul element fixe de depart ,c'est la colonne B. la plage commence tours en B
de plus l'utilisateur doit repondre à certaines questions qui influeront sur la facon de lire la plage .
ex : voulez vous les X derniers elements de la plage ? si reponse = 4 alors on lira les 4 derniers elements de chaque la plage.
j'ai tout mis dans le fichier joint.
bonjour didier.schmit Philippe JOCHMANS le forum remarques: pourquoi tu mets pas une listbox a la place de textbox3 ???
Salut
Quand tu cliques sur ton bouton, tu veux que le traitement ce fasse sur toutes les lignes de ton tableau ?
Est ce une obligation que de mettre le résultat dans un objet (textbox ou listbox comme le propose Lætitia) ou le résultat peut être mis directement dans le cellules d'une autre feuille par exemple?
En fonction des reponses que tu apporteras il n'est peut etre pas utile de passer par du vba.
++
Qwaz
bonjour à tous et merci pour votre aide
il y obligation de passer par VBA car cela sera integré dans un programme.
Affirmatif , je precise que le nombre de lignes est inconnue.Citation:
Quand tu cliques sur ton bouton, tu veux que le traitement ce fasse sur toutes les lignes de ton tableau ?
il y obligation de passer par VBA car cela sera integré dans un programme.Citation:
Est ce une obligation que de mettre le résultat dans un objet (textbox ou listbox comme le propose Lætitia) ou le résultat peut être mis directement dans le cellules d'une autre feuille par exemple?
je travaille pour le mettre dans un listview au lieu d'un textbox
Salut
Essais ca
A++Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Sub MacroBouton() Dim TheCell As Range Dim DebutCell As Range, FinCell As Range Dim TailleSelect As Integer 'On boucle sur la colonne G (celle ci ne doit jamais etre vide) For Each TheCell In Range("G2", Cells(Rows.Count, "G").End(xlUp)) 'on determine la 1ere cellule a selectionner If (Feuil1.TextBox4.Text <> 0) And IsNumeric(Feuil1.TextBox4.Text) Then 'On ne tiendra pas compte des autres Textbox 'On regarde ou ce trouve la deriere colonne non vide de la ligne TailleSelect = CInt(Feuil1.TextBox4.Text) With Cells(TheCell.Row, Columns.Count).End(xlToLeft) If (.Column - TailleSelect) < 7 Then Set DebutCell = Cells(.Row, "G") Else Set DebutCell = .Offset(0, -(TailleSelect - 1)) End If End With ElseIf (Feuil1.TextBox4.Text = "0") And IsNumeric(Feuil1.TextBox2.Text) And IsNumeric(Feuil1.TextBox1.Text) Then 'On tient compte des 2 premiers TextBox Set DebutCell = TheCell.Offset(0, CInt(Feuil1.TextBox1.Text)) With Cells(TheCell.Row, Columns.Count).End(xlToLeft) If DebutCell.Column > .Column Then TailleSelect = 0 Else TailleSelect = .Column - 6 - CInt(Feuil1.TextBox1.Text) - CInt(Feuil1.TextBox2.Text) End If End With End If If TailleSelect > 0 Then DebutCell.Resize(1, TailleSelect).Interior.ColorIndex = 46 Next End Sub
Qwaz
bonjour QWAZERTY
merci pour ton code mais il colorie effectivement certaine partie de ma feuille mais apres le text box3 reste vide???
deplus je comprends pas tout le code et j'ai horreur de la command offset !
je precise que le contenu de mes cellules sont des nombres entiers
:(
Salut
En faite le ligne de code qui colorie est a remplacer pour mettre les infos dans le listbox ou le textbox.
Pour ce qui est de la commande offset, ben peut être qu'elle te plait pas, mais qu'est ce qu'elle est pratique ;)
Si tu veux des explications sur le code demande moi les parties qui te posent problème.
A++
Qwaz
rebonjour
c'est toute la partie suivante ou je me melange un peu
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 .......... TailleSelect = CInt(Feuil1.TextBox4.Text) 'cint arrondi la partie decimale With Cells(TheCell.Row, Columns.Count).End(xlToLeft) If (.Column - TailleSelect) < 7 Then Set DebutCell = Cells(.Row, "G") Else Set DebutCell = .Offset(0, -(TailleSelect - 1)) End If End With ElseIf (Feuil1.TextBox4.Text = 0) And IsNumeric(Feuil1.TextBox2.Text) And IsNumeric(Feuil1.TextBox1.Text) Then 'On tient compte des 2 premiers textbox soit TextBox2 et 1 Set DebutCell = TheCell.Offset(0, CInt(Feuil1.TextBox1.Text)) With Cells(TheCell.Row, Columns.Count).End(xlToLeft) If DebutCell.Column > .Column Then TailleSelect = 0 Else TailleSelect = .Column - 6 - CInt(Feuil1.TextBox1.Text) - CInt(Feuil1.TextBox2.Text) End If End With ..................................
avec debutcell , .column,
:aie:Citation:
......
Set DebutCell = TheCell.Offset(0, CInt(Feuil1.TextBox1.Text))
With Cells(TheCell.Row, Columns.Count).End(xlToLeft)
......
j'avoue que la je pedale dans la chouchroute
Re
Je te remet le code avec du commentaire
Si certain fonction te pose problème, pour connaitre leur fonctionnement utilises F1 (les tutos sont la pour ca aussi), si vraiment tu ne parviens pas a comprendre demande.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 Sub MacroBouton() Dim TheCell As Range Dim DebutCell As Range, FinCell As Range Dim TailleSelect As Integer 'On boucle sur la colonne G (celle ci ne doit jamais etre vide) 'TheCell va devenir, au fure et a mesure de la boucle, chaqu'une des cellules contenues dans la colonne G For Each TheCell In Range("G2", Cells(Rows.Count, "G").End(xlUp)) 'on determine la 1ere cellule a selectionner If (Feuil1.TextBox4.Text <> 0) And IsNumeric(Feuil1.TextBox4.Text) Then 'On ne tiendra pas compte des autres Textbox (1 et 2) 'On recupert la valeur contenu dans le textbox4 TailleSelect = CInt(Feuil1.TextBox4.Text) 'On regarde ou ce trouve la deriere colonne non vide de la ligne With Cells(TheCell.Row, Columns.Count).End(xlToLeft) 'a pour effet de pointer sur la derniere cellule non vide de la ligne 'Le but et de selectionner les x derniere cellule de la ligne ( x = valeur contenu dans le textbox4 = TailleSelect) 'Ici on verifie qu'il y a bien x cellule renseigné a partir de la derniere cellule non vode If (.Column - TailleSelect) < 7 Then 'S'il n'y a pas suffissement de cellules 'et que le fait de remonter x cellule en arriere par raport a la derniere cellule non vide nous fait depasser la colonne G(7eme colonne) 'Alors la 1ere cellule sera la cellule de la colonne G toujours sur la ligne pointé par TheCell Set DebutCell = Cells(.Row, "G") 'a la place de .row, on aurait put mettre TheCell.Row qui retournerait la meme valeur Else 'Si il y a suffisement de cellule en tre la derniere cellule non vide et la colonne G 'On decale de (x-1) cellules vers la gauche (d'ou le signe negatif devant la parenthese) Set DebutCell = .Offset(0, -(TailleSelect - 1)) 'DebutCell deviet cette cellule End If End With ElseIf (Feuil1.TextBox4.Text = "0") And IsNumeric(Feuil1.TextBox2.Text) And IsNumeric(Feuil1.TextBox1.Text) Then 'On tient compte des 2 premiers TextBox1 et 2 'DebutCell va devenir la representation de la cellule G + le decalage demandé dans le textbox1 Set DebutCell = TheCell.Offset(0, CInt(Feuil1.TextBox1.Text)) 'On pointe de nouveau sur sur la derniere cellule non vide With Cells(TheCell.Row, Columns.Count).End(xlToLeft) 'On controle qu'il y est assez de valeur contenu dans cette ligne du tableau If DebutCell.Column > .Column Then 'Ici le decalage demandé dans TextBox1 est trop important 'on franchi la colonne G 'Donc on va retourner 0, puisqu'aucune valeur ne correspond a la demande pour cette ligne TailleSelect = 0 Else 'Ici on a bien suffisement de valeurs presentes entre DebutCell et la derniere cellule non vide 'On regarde combien de cellule devront etre pointées pour respecter les critere donné dans les TextBox 1 et 2 'colonne de la derniere cellule non vide '-6 pour supprimer le decalage de ton tableau qui commence a G '-CInt(Feuil1.TextBox1.Text) on enleve le decalage demander vers la droite '- CInt(Feuil1.TextBox2.Text) et cellui demander vers la gauche TailleSelect = .Column - 6 - CInt(Feuil1.TextBox1.Text) - CInt(Feuil1.TextBox2.Text) 'TailleSelect nous indique maintenat le nombre de valeurs qui deront etre pointées End If End With End If 'Ici on controle que TailleSelect est supperieur a 0, 'cas ou les valeurs necessaire pour repondre a la demande n'existe aps dans le tableau If TailleSelect > 0 Then 'Il y a des cellules qui correspondent 'On va donc colorier le cellules créant une selection qui commence a la cellule DebutCell et qui va s'etandre de x cellules vers la droite (x = TailleSelect) 'attention resuze ne prend pas les valeur negative, la selection se fait sur la droite et vers le bas 'C'est pour cela que DebutCell doit toujours pointer la 1ere cellule a selectionner DebutCell.Resize(1, TailleSelect).Interior.ColorIndex = 46 Next End Sub
++
Qwaz
bonjour merci à tous :salut: