Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ligne variable

5 réponses
Avatar
JRC
Re-bonjour à tous,

Et oui c'est encore moi malheureusement pour vous :)
Explication :

J'ai une plage de donnes de la cellule A3 à A19. Sur la colonne J il y a
des 9 de la cellule A3 à A15 puis des 10 de A16 à A19.

Mon but est de parcourir la colonne J jusque la cellule J15 et de
stocker cette adresse dans une variable pour la réutiliser par la suite.

Bien entendu ce J15 peut être un J16 ou J3000.

J'ai donc réalisé le code suivant MAISil s'arrête à la première ligne
qui contient un 9 et ne vas pas jusque la dernière...



Private Sub trier1_Click()

Dim dtf As Long
Dim dtf1 As Long
Dim dtd As Long

Sheets("BD").Select

'Sélectionne la première ligne pleine
ActiveSheet.Range("A2").End(xlDown).Select
dtd = ActiveCell.Row
dtf = dtd

'Sélectionne tous les lignes dont le mois est septembre
While Range("J" & dtf).Value = 9

dtf = dtf + 1

Wend

'Test pour vérifier la valeur de la dernière ligne
MsgBox ("La valeur est " & dtf)


End Sub

Une idée?

Merci d'avance!

5 réponses

Avatar
JPMonnier
Bonjour,
Sub Adr()
For Each n In [j3:j30]
If n <> 9 Then
AD = n.Offset(-1, 0).Address
MsgBox AD
Exit Sub
End If
Next
End Sub

--
Cordialement

"JRC" a écrit dans le message de
news:e%
Re-bonjour à tous,

Et oui c'est encore moi malheureusement pour vous :)
Explication :

J'ai une plage de donnes de la cellule A3 à A19. Sur la colonne J il y a
des 9 de la cellule A3 à A15 puis des 10 de A16 à A19.

Mon but est de parcourir la colonne J jusque la cellule J15 et de stocker
cette adresse dans une variable pour la réutiliser par la suite.

Bien entendu ce J15 peut être un J16 ou J3000.

J'ai donc réalisé le code suivant MAISil s'arrête à la première ligne qui
contient un 9 et ne vas pas jusque la dernière...



Private Sub trier1_Click()

Dim dtf As Long
Dim dtf1 As Long
Dim dtd As Long

Sheets("BD").Select

'Sélectionne la première ligne pleine
ActiveSheet.Range("A2").End(xlDown).Select
dtd = ActiveCell.Row
dtf = dtd

'Sélectionne tous les lignes dont le mois est septembre
While Range("J" & dtf).Value = 9

dtf = dtf + 1

Wend

'Test pour vérifier la valeur de la dernière ligne
MsgBox ("La valeur est " & dtf)


End Sub

Une idée?

Merci d'avance!


Avatar
JRC
cher JPMonnier,

Je pense qu'effectivement votre solution marche mais l'idée est que je
ne sais pas combien de ligne il y aura. Certes je pourrai mettre
J3:J6300 mais afin d'optimiser le code (le rendre plus rapide
j'imagine), je souhaiterai incrémenter de 1 une variable jusqu'au moment
où ma condition de boucle n'est plus satisfaite.

Comment ça je suis casse-pieds?:)

Exceliement!


JPMonnier a écrit :
Bonjour,
Sub Adr()
For Each n In [j3:j30]
If n <> 9 Then
AD = n.Offset(-1, 0).Address
MsgBox AD
Exit Sub
End If
Next
End Sub



Avatar
JPMonnier
La boucle sort quand la condition n'est plus vraie par Exit Sub
Y a t'il des séries de 9 qui ne sont pas contigues en lignes ?

--
Cordialement

"JRC" a écrit dans le message de
news:ecz5%
cher JPMonnier,

Je pense qu'effectivement votre solution marche mais l'idée est que je ne
sais pas combien de ligne il y aura. Certes je pourrai mettre J3:J6300
mais afin d'optimiser le code (le rendre plus rapide j'imagine), je
souhaiterai incrémenter de 1 une variable jusqu'au moment où ma condition
de boucle n'est plus satisfaite.

Comment ça je suis casse-pieds?:)

Exceliement!


JPMonnier a écrit :
Bonjour,
Sub Adr()
For Each n In [j3:j30]
If n <> 9 Then
AD = n.Offset(-1, 0).Address
MsgBox AD
Exit Sub
End If
Next
End Sub





Avatar
JRC
Ça y est j'ai ENFIN trouvé, ça faiiiiit très plaisir!!!

Dans le précédent "programme", il faut remplacer

While Range("J" & dtf).Value = 9

'dtf = ActiveCell.Row + 1
dtf = dtf + 1
'dtf.Row = dtf.Row + 1

Wend
par

While ActiveSheet.Range("J" & dtf).Value = 9

'dtf = ActiveCell.Row + 1
dtf = dtf + 1
'dtf.Row = dtf.Row + 1

Wend

La différence réside dans la condition du début avec le ActiveSheet!!

Je vais aller bien me renseigner sur l'impact de cet ActiveSheet car
c'est la seconde fois qu'il me....

Si quelqu'un à des infos je suis preneur :)

Bon aprem!!


JRC a écrit :
cher JPMonnier,

Je pense qu'effectivement votre solution marche mais l'idée est que je
ne sais pas combien de ligne il y aura. Certes je pourrai mettre
J3:J6300 mais afin d'optimiser le code (le rendre plus rapide
j'imagine), je souhaiterai incrémenter de 1 une variable jusqu'au moment
où ma condition de boucle n'est plus satisfaite.

Comment ça je suis casse-pieds?:)

Exceliement!


JPMonnier a écrit :
Bonjour,
Sub Adr()
For Each n In [j3:j30]
If n <> 9 Then
AD = n.Offset(-1, 0).Address
MsgBox AD
Exit Sub
End If
Next
End Sub





Avatar
JPMonnier
ActiveSheet peut être remplacée par un autre objet tel que Sheets("Feuil1")
ou Sheets(1) ou une zone nommée dans un classeur [zone] ' Zone = J3:J30 par
exemple !
For Each n In [j3:j30] aurait pu être remplacé par For Each n In [Zone]
Zone étant un Nom est reconnu quelque soit la feuille active (ActiveSheet)
du classeur ou tu te trouves
Il est donc inutile d'activer la feuille (ActiveSheet) contenant le nom Zone
!

--
Cordialement

"JRC" a écrit dans le message de
news:e1$
Ça y est j'ai ENFIN trouvé, ça faiiiiit très plaisir!!!

Dans le précédent "programme", il faut remplacer

While Range("J" & dtf).Value = 9

'dtf = ActiveCell.Row + 1
dtf = dtf + 1
'dtf.Row = dtf.Row + 1

Wend
par

While ActiveSheet.Range("J" & dtf).Value = 9

'dtf = ActiveCell.Row + 1
dtf = dtf + 1
'dtf.Row = dtf.Row + 1

Wend

La différence réside dans la condition du début avec le ActiveSheet!!

Je vais aller bien me renseigner sur l'impact de cet ActiveSheet car c'est
la seconde fois qu'il me....

Si quelqu'un à des infos je suis preneur :)

Bon aprem!!


JRC a écrit :
cher JPMonnier,

Je pense qu'effectivement votre solution marche mais l'idée est que je ne
sais pas combien de ligne il y aura. Certes je pourrai mettre J3:J6300
mais afin d'optimiser le code (le rendre plus rapide j'imagine), je
souhaiterai incrémenter de 1 une variable jusqu'au moment où ma condition
de boucle n'est plus satisfaite.

Comment ça je suis casse-pieds?:)

Exceliement!


JPMonnier a écrit :
Bonjour,
Sub Adr()
For Each n In [j3:j30]
If n <> 9 Then
AD = n.Offset(-1, 0).Address
MsgBox AD
Exit Sub
End If
Next
End Sub