OVH Cloud OVH Cloud

Question de débutant

9 réponses
Avatar
François Labrecque
Bonjour,

Étant débant dans la programmation, je ne sais pas s'il y aurait une façon
plus simple pour la première partie de mon code.
1ere partie :
Colonne:
Range("a2").Activate
If ActiveCell.Value = 1 Then
Range("j2").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 2 Then
Range("j3").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
Range("j4").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
Range("j4").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 4 Then
Range("j5").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
... jusqu'à 49


Ici le problème est que si le chiffre de la collone est, par exemple 7, il
faut que les données de 1 à 49 soient au côté du 7 K8, L8, M8, etc.). Je
n'ai pas trouvé la façon de faire car mon code me ramène toujour à K2, L2,
M2.

Rangées:
Rangée1:
Range("a2").Activate
Rangée2:
If ActiveCell.Value < 1 Then
ActiveCell.Offset(0, 1).Select
GoTo Rangée2
Else: GoTo Rangée3
Rangée3:
If ActiveCell.Value = 1 Then
ActiveCell.Offset(0, 0).Clear
Range("j2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 2 Then
ActiveCell.Offset(0, 0).Clear
Range("k2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
ActiveCell.Offset(0, 0).Clear
Range("l2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 4 Then
ActiveCell.Offset(0, 0).Clear
Range("m2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 5 Then
ActiveCell.Offset(0, 0).Clear
Range("n2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
... jusqu`à 49

Merci de m'aider.

François

9 réponses

Avatar
FxM
Bonjour,

La première partie devrait pouvoir se simplifier par :
with Range("j2").offset(range("A2").value -1,0)
.value = .value+1
end with

Pour la seconde partie, il serait nécessaire que tu donnes un ou deux
exemples afin de mieux comprendre ce que tu cherches.

@+
FxM



François Labrecque wrote:
Bonjour,

Étant débant dans la programmation, je ne sais pas s'il y aurait une façon
plus simple pour la première partie de mon code.
1ere partie :
Colonne:
Range("a2").Activate
If ActiveCell.Value = 1 Then
Range("j2").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 2 Then
Range("j3").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
Range("j4").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
Range("j4").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 4 Then
Range("j5").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
... jusqu'à 49


Ici le problème est que si le chiffre de la collone est, par exemple 7, il
faut que les données de 1 à 49 soient au côté du 7 K8, L8, M8, etc.). Je
n'ai pas trouvé la façon de faire car mon code me ramène toujour à K2, L2,
M2.

Rangées:
Rangée1:
Range("a2").Activate
Rangée2:
If ActiveCell.Value < 1 Then
ActiveCell.Offset(0, 1).Select
GoTo Rangée2
Else: GoTo Rangée3
Rangée3:
If ActiveCell.Value = 1 Then
ActiveCell.Offset(0, 0).Clear
Range("j2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 2 Then
ActiveCell.Offset(0, 0).Clear
Range("k2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
ActiveCell.Offset(0, 0).Clear
Range("l2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 4 Then
ActiveCell.Offset(0, 0).Clear
Range("m2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 5 Then
ActiveCell.Offset(0, 0).Clear
Range("n2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
.... jusqu`à 49

Merci de m'aider.

François




Avatar
gilbert
Bonjour

difficile de savoir ce que tu veux exactement effacer dans ta page

mais voila une idée de simplification de ton code

Sub essai()
'Colonne
Range("a2").Activate
For i = 1 To 49
If ActiveCell.Value = i Then
Range("j" & 1 + i).Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
End If
Next
'Rangées
Rangée1:
Range("a2").Activate
'Rangée2:
' ici que recherches tu exactement ?
' If ActiveCell.Value < 1 Then
' ActiveCell.Offset(0, 1).Select
' GoTo Rangée2
' Else: GoTo Rangée3
' End If
Rangée3:
For i = 1 To 49
If ActiveCell.Value = 1 Then
ActiveCell.Offset(0, 0).Clear
Cells(2, 9 + i).Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
End If
Next

End Sub

@+++

Gilbert

"François Labrecque" a écrit dans le
message de news:p9tgc.18413$
Bonjour,

Étant débant dans la programmation, je ne sais pas s'il y aurait une façon
plus simple pour la première partie de mon code.
1ere partie :
Colonne:
Range("a2").Activate
If ActiveCell.Value = 1 Then
Range("j2").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 2 Then
Range("j3").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
Range("j4").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
Range("j4").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
ElseIf ActiveCell.Value = 4 Then
Range("j5").Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
... jusqu'à 49


Ici le problème est que si le chiffre de la collone est, par exemple 7, il
faut que les données de 1 à 49 soient au côté du 7 K8, L8, M8, etc.). Je
n'ai pas trouvé la façon de faire car mon code me ramène toujour à K2, L2,
M2.

Rangées:
Rangée1:
Range("a2").Activate
Rangée2:
If ActiveCell.Value < 1 Then
ActiveCell.Offset(0, 1).Select
GoTo Rangée2
Else: GoTo Rangée3
Rangée3:
If ActiveCell.Value = 1 Then
ActiveCell.Offset(0, 0).Clear
Range("j2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 2 Then
ActiveCell.Offset(0, 0).Clear
Range("k2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 3 Then
ActiveCell.Offset(0, 0).Clear
Range("l2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 4 Then
ActiveCell.Offset(0, 0).Clear
Range("m2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
ElseIf ActiveCell.Value = 5 Then
ActiveCell.Offset(0, 0).Clear
Range("n2").Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
... jusqu`à 49

Merci de m'aider.

François




Avatar
François Labrecque
Bonjour,

Je veux effacer la donnée qui sera ajoutée au tableau.

Voici un exemple de mes données (une petite partie seulement) :

1 10 19 20 25 44 34
7 14 20 23 38 46 32
7 19 31 43 45 49 36
7 21 31 38 42 48 14
7 32 37 38 44 45 40
1 2 3 4 5 6 7
8 13 16 19 33 49 26
8 18 21 26 42 48 31
8 18 29 31 41 43 34


Et le tableau dans lequelle les données doivent être (il va de 1 à 49 en X
et de 1 à 49 en Y) :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
1
2
3
4
5
6
7


Merci encore une fois.

François

"gilbert" a écrit dans le message de
news:eo$
Bonjour

difficile de savoir ce que tu veux exactement effacer dans ta page

mais voila une idée de simplification de ton code

Sub essai()
'Colonne
Range("a2").Activate
For i = 1 To 49
If ActiveCell.Value = i Then
Range("j" & 1 + i).Select
ActiveCell = ActiveCell + 1
Range("a2").Activate
ActiveCell.Offset(0, 0).Clear
GoTo Rangée1
End If
Next
'Rangées
Rangée1:
Range("a2").Activate
'Rangée2:
' ici que recherches tu exactement ?


------------> Une fois que ma donnée est entrée dans ma colonne (Y), il faut
que je me déplace dans ma rangée (X). Donc, si en J8 j'ai 7 il faut qu'en K8
j'ai la valeur 1 (si elle se trouve dans mes données).
Exemple:
1, 7, 15, 24

En J8 j'ai 7, en K8(pour la valeur 1) = 1, Y8 (pour la valeur 15) = 1 et AH8
(pour la valeur 24) = 1.

Merci

' If ActiveCell.Value < 1 Then
' ActiveCell.Offset(0, 1).Select
' GoTo Rangée2
' Else: GoTo Rangée3
' End If
Rangée3:
For i = 1 To 49
If ActiveCell.Value = 1 Then
ActiveCell.Offset(0, 0).Clear
Cells(2, 9 + i).Select
ActiveCell = ActiveCell + 1
GoTo Rangée1
End If
Next

End Sub

@+++

Gilbert


Avatar
FxM
Re-bonjour,

Deux points et ça va aller. Peux-tu :
- indiquer les résultats si on considère que 1, 10 (2 premiers de la 1e
ligne) et 7 & 7 (2 premiers de la 2e ligne) ont été traités ?

- localiser les données d'entrée et de sortie ?

Entrées en feuille ______ :
| A | B | C | D | E | F | G
-------------------------------------------
1 | 1 | 10 | 19 | 20 | 25 | 44 | 34
2 | 7 | 14 | 20 | 23 | 38 | 46 | 32
3 | 7 | 19 | 31 | 43 | 45 | 49 | 36
4 | 7 | 21 | 31 | 38 | 42 | 48 | 14
5 | 7 | 32 | 37 | 38 | 44 | 45 | 40
6 | 1 | 2 | 3 | 4 | 5 | 6 | 7
7 | 8 | 13 | 16 | 19 | 33 | 49 | 26
8 | 8 | 18 | 21 | 26 | 42 | 48 | 31
9 | 8 | 19 | 29 | 31 | 41 | 43 | 34

Sorties en feuille _______ :
| | | | | | |
-------------------------------------------
| | 1 | 2 | 3 | 4 | 5 | ...
| 1 | | | | | |
| 2 | | | | | |
| 3 | | | | | |
| 4 | | | | | |
| 5 | | | | | |
|... | | | | | |

Un détail qui peut avoir son importance :
Le seul et unique vrai gagnant au Loto, c'est l'Etat avec 32% sur les
mises à chaque tirage. Le gagnant du gros lot n'a qu'une hypothétique
chance sur près de 14 millions.

Tous les tirages sont disponibles sur le site de la Française des Jeux :
http://www.fdjeux.com/jeux/loto/loto_s_historiques.php

@+
FxM
Avatar
PRLLLLT
Je suis pas sur de tout comprendre... tu dois déplacer toutes les valeurs
d'une plage dans une autre??
Avatar
François Labrecque
Bonjour,

Pour ce qui est la loto, je suis au courant. Je me cherchait quelque chose
pour créer un code et ainsi améliorer mes connaissances car comme tu l'as si
bien dit : on ne sort que très rarement gagnant avec la loto. :)))

"FxM" a écrit dans le message de
news:
Re-bonjour,

Deux points et ça va aller. Peux-tu :
- indiquer les résultats si on considère que 1, 10 (2 premiers de la 1e
ligne) et 7 & 7 (2 premiers de la 2e ligne) ont été traités ?

- localiser les données d'entrée et de sortie ?

Entrées en feuille ______ :
| A | B | C | D | E | F | G
-------------------------------------------
1 | 1 | 10 | 19 | 20 | 25 | 44 | 34
2 | 7 | 8 | 20 | 23 | 38 | 46 | 32
3 | 7 | 9 | 31 | 43 | 45 | 49 | 36
4 | 7 | 21 | 31 | 38 | 42 | 48 | 14
5 | 7 | 32 | 37 | 38 | 44 | 45 | 40
6 | 1 | 2 | 3 | 4 | 5 | 6 | 7
7 | 8 | 13 | 16 | 19 | 33 | 49 | 26
8 | 8 | 18 | 21 | 26 | 42 | 48 | 31
9 | 8 | 19 | 29 | 31 | 41 | 43 | 34

Sorties en feuille _______ :
| | | | | | |
-------------------------------------------
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10...
| 1 | | | | | | | | | |
1

| 2 | | | | | | | | | |
| 3 | | | | | | | | | |
| 4 | | | | | | | | | |
| 5 | | | | | | | | | |
| 6 | | | | | | | | | |
| 7 | | | | | | | 1 | 1 | |
Un détail qui peut avoir son importance :
Le seul et unique vrai gagnant au Loto, c'est l'Etat avec 32% sur les
mises à chaque tirage. Le gagnant du gros lot n'a qu'une hypothétique
chance sur près de 14 millions.

Tous les tirages sont disponibles sur le site de la Française des Jeux :
http://www.fdjeux.com/jeux/loto/loto_s_historiques.php

@+
FxM


Avatar
FxM
François Labrecque wrote:
Bonjour,

Pour ce qui est la loto, je suis au courant. Je me cherchait quelque chose
pour créer un code et ainsi améliorer mes connaissances car comme tu l'as si
bien dit : on ne sort que très rarement gagnant avec la loto. :)))


Bonsoir,

En considérant les tirages placés en lignes à partir de la colonne A et
de ligne 1. Ce qui donne :
| A | B | C | D | E | F | G
1 | 1 | 10 | 19 | 20 | 25 | 44 | 34
2 | 7 | 8 | 20 | 23 | 38 | 46 | 32
3 | 7 | 9 | 31 | 43 | 45 | 49 | 36
4 | 7 | 21 | 31 | 38 | 42 | 48 | 14
5 | 7 | 32 | 37 | 38 | 44 | 45 | 40
6 | 1 | 2 | 3 | 4 | 5 | 6 | 7
7 | 8 | 13 | 16 | 19 | 33 | 49 | 26
8 | 8 | 18 | 21 | 26 | 42 | 48 | 31
9 | 8 | 19 | 29 | 31 | 41 | 43 | 34

Le tableau de sortie est placé à partir de I1 tel que suit dans la même
feuille que le tableau d'entrée :
| I | J | K | L | M | N |
1 | | 1 | 2 | 3 | 4 | 5 |
2 | 1 | | | | | |
3 | 2 | | | | | |
4 | 3 | | | | | |
5 | 4 | | | | | |
... avec des numéros de 1 à 49
Attention, le n° 1 de la colonne I est en ligne 2 !


Le code à placer dans le module de la feuille :
Sub test()
'va scruter la colonne A
For Each a In Range("A:A")
'si la cellule de A est vide
If IsEmpty(a) Then
'ne rien faire et passer à la suivante
Else
'sinon il y a quelque chose
'faire une boucle 1 à 6 (6 autres numéros que dans A)
For b = 1 To 6
'avec la cellule de coordonnées :
'cellule de référence I1
'décalage de ligne = ce qu'il y a dans A
'décalage de colonne = chacune des cellules suivantes
'de b=1 à b=6
With Range("I1").Offset(a.Value, a.Offset(0, b).Value)
'uniquement pour voir où est la cellule :
.select
'augmenter le contenu de la cellule de 1
.Value = .Value + 1
End With
Next b
End If
Next a
End Sub

Copie le code dans le module de la feuille et execute le en mode pas à
pas par des pressions successives sur la touche F8. Tu pourras ainsi
voir le contenu des variables a & b et suivre le déplacement de la
cellule de destination.

N'hésite pas à venir si tu as un problème.

@+
FxM

Avatar
François Labrecque
Bonsoir FxM,

Mais comment faire pour que la valeur en A soit aussi au tableau.

a+
"FxM" a écrit dans le message de
news:
François Labrecque wrote:
Bonjour,

Pour ce qui est la loto, je suis au courant. Je me cherchait quelque
chose


pour créer un code et ainsi améliorer mes connaissances car comme tu
l'as si


bien dit : on ne sort que très rarement gagnant avec la loto. :)))


Bonsoir,

En considérant les tirages placés en lignes à partir de la colonne A et
de ligne 1. Ce qui donne :
| A | B | C | D | E | F | G
1 | 1 | 10 | 19 | 20 | 25 | 44 | 34
2 | 7 | 8 | 20 | 23 | 38 | 46 | 32
3 | 7 | 9 | 31 | 43 | 45 | 49 | 36
4 | 7 | 21 | 31 | 38 | 42 | 48 | 14
5 | 7 | 32 | 37 | 38 | 44 | 45 | 40
6 | 1 | 2 | 3 | 4 | 5 | 6 | 7
7 | 8 | 13 | 16 | 19 | 33 | 49 | 26
8 | 8 | 18 | 21 | 26 | 42 | 48 | 31
9 | 8 | 19 | 29 | 31 | 41 | 43 | 34

Le tableau de sortie est placé à partir de I1 tel que suit dans la même
feuille que le tableau d'entrée :
| I | J | K | L | M | N |
1 | | 1 | 2 | 3 | 4 | 5 |
2 | 1 | | | | | |
3 | 2 | | | | | |
4 | 3 | | | | | |
5 | 4 | | | | | |
... avec des numéros de 1 à 49
Attention, le n° 1 de la colonne I est en ligne 2 !


Le code à placer dans le module de la feuille :
Sub test()
'va scruter la colonne A
For Each a In Range("A:A")
'si la cellule de A est vide
If IsEmpty(a) Then
'ne rien faire et passer à la suivante
Else
'sinon il y a quelque chose
'faire une boucle 1 à 6 (6 autres numéros que dans A)
For b = 1 To 6
'avec la cellule de coordonnées :
'cellule de référence I1
'décalage de ligne = ce qu'il y a dans A
'décalage de colonne = chacune des cellules suivantes
'de b=1 à b=6
With Range("I1").Offset(a.Value, a.Offset(0, b).Value)
'uniquement pour voir où est la cellule :
.select
'augmenter le contenu de la cellule de 1
.Value = .Value + 1
End With
Next b
End If
Next a
End Sub

Copie le code dans le module de la feuille et execute le en mode pas à
pas par des pressions successives sur la touche F8. Tu pourras ainsi
voir le contenu des variables a & b et suivre le déplacement de la
cellule de destination.

N'hésite pas à venir si tu as un problème.

@+
FxM



Avatar
FxM
Bonsoir homonyme,

Tu remplaces simplement :
For b = 1 To 6
par
For b = 0 To 6

@+
François




François Labrecque wrote:

Bonsoir FxM,

Mais comment faire pour que la valeur en A soit aussi au tableau.

a+
"FxM" a écrit dans le message de
news:

François Labrecque wrote:

Bonjour,

Pour ce qui est la loto, je suis au courant. Je me cherchait quelque



chose

pour créer un code et ainsi améliorer mes connaissances car comme tu



l'as si

bien dit : on ne sort que très rarement gagnant avec la loto. :)))


Bonsoir,

En considérant les tirages placés en lignes à partir de la colonne A et
de ligne 1. Ce qui donne :
| A | B | C | D | E | F | G
1 | 1 | 10 | 19 | 20 | 25 | 44 | 34
2 | 7 | 8 | 20 | 23 | 38 | 46 | 32
3 | 7 | 9 | 31 | 43 | 45 | 49 | 36
4 | 7 | 21 | 31 | 38 | 42 | 48 | 14
5 | 7 | 32 | 37 | 38 | 44 | 45 | 40
6 | 1 | 2 | 3 | 4 | 5 | 6 | 7
7 | 8 | 13 | 16 | 19 | 33 | 49 | 26
8 | 8 | 18 | 21 | 26 | 42 | 48 | 31
9 | 8 | 19 | 29 | 31 | 41 | 43 | 34

Le tableau de sortie est placé à partir de I1 tel que suit dans la même
feuille que le tableau d'entrée :
| I | J | K | L | M | N |
1 | | 1 | 2 | 3 | 4 | 5 |
2 | 1 | | | | | |
3 | 2 | | | | | |
4 | 3 | | | | | |
5 | 4 | | | | | |
... avec des numéros de 1 à 49
Attention, le n° 1 de la colonne I est en ligne 2 !


Le code à placer dans le module de la feuille :
Sub test()
'va scruter la colonne A
For Each a In Range("A:A")
'si la cellule de A est vide
If IsEmpty(a) Then
'ne rien faire et passer à la suivante
Else
'sinon il y a quelque chose
'faire une boucle 1 à 6 (6 autres numéros que dans A)
For b = 1 To 6
'avec la cellule de coordonnées :
'cellule de référence I1
'décalage de ligne = ce qu'il y a dans A
'décalage de colonne = chacune des cellules suivantes
'de b=1 à b=6
With Range("I1").Offset(a.Value, a.Offset(0, b).Value)
'uniquement pour voir où est la cellule :
.select
'augmenter le contenu de la cellule de 1
.Value = .Value + 1
End With
Next b
End If
Next a
End Sub

Copie le code dans le module de la feuille et execute le en mode pas à
pas par des pressions successives sur la touche F8. Tu pourras ainsi
voir le contenu des variables a & b et suivre le déplacement de la
cellule de destination.

N'hésite pas à venir si tu as un problème.

@+
FxM