Incrémentation numérique automatique avec F9
Bonjour !
Tout est dans le titre, passons à un exemple pour être plus compréhensible.
J'aurai voulu que mes nombres s'incrémente à chaque fois que je clic sur la touche F9 mais en restant dans un cycle.
C'est à dire A qui se trouve en "A2" est à 1 et n qui se trouve en "N2" est à 14, je clic sur F9, A passe à 14. Tandit que B qui est en "B2" passe à 1 et N passe à 13.
Serte je pourrai faire un grand tableau et décaler à chaque fois mais ce n'est pas mon but. ^^
Merci pour votre aide.
Bonjour,
Pas sûr d'avoir tout compris ?
Sub ToucheF12()
'affecte la touche F12 à la procédure Test
'à n'exécuter qu'une fois, à mettre peut être dans la procédure événementielle "Workbook_Open()" ?
Application.OnKey "{F12}", "Test"
End Sub
Sub Test()
Range("A1").Value = Range("N1").Value
Range("N1").Value = Range("N1").Value - 1
Range("B1").Value = Range("B1").Value + 1
End Sub
ça ne fonctionne pas
Je recommence mon exemple.
En "A1" j'ai 1
En "B1" j'ai 2
En "C1" j'ai 3
Dès que j'appui sur ma touche F9 je souhaite que
A1 passe à 3
B1 passe à 1
C1 passe à 2
Je reclic sur F9
A1 passe alors à 2
B1 passe alors à 3
C1 passe alors à 1
Si je reclic ça revient à la premier configuration c'est un cycle.
(Du genre la fonction ALEABORNE mais qui n'est plus aléatoire mais cyclé).
Re,
A tester :
Sub Test()
Dim ValA As Integer
Dim ValB As Integer
Dim ValC As Integer
ValA = Range("A1").Value
ValB = Range("B1").Value
ValC = Range("C1").Value
Range("A1").Value = ValC
Range("B1").Value = ValA
Range("C1").Value = ValB
End Sub
Ca fonctionne et si maintenant je souhaite utiliser cette macro jusqu'à par exemple N1 J'ai fait:
Sub Bouton1_Cliquer()
Dim ValA As Integer
Dim ValB As Integer
Dim ValC As Integer
Dim ValD As Integer
Dim ValE As Integer
Dim ValF As Integer
Dim ValG As Integer
Dim ValH As Integer
Dim ValI As Integer
Dim ValJ As Integer
Dim ValK As Integer
Dim ValL As Integer
Dim ValM As Integer
Dim ValN As Integer
ValA = Range("A1").Value
ValB = Range("B1").Value
ValC = Range("C1").Value
ValD = Range("A1").Value
ValE = Range("B1").Value
ValF = Range("C1").Value
ValG = Range("A1").Value
ValH = Range("B1").Value
ValI = Range("C1").Value
ValJ = Range("A1").Value
ValK = Range("B1").Value
ValL = Range("C1").Value
ValM = Range("B1").Value
ValN = Range("C1").Value
Range("A1").Value = ValN
Range("B1").Value = ValA
Range("C1").Value = ValB
Range("D1").Value = ValC
Range("E1").Value = ValD
Range("F1").Value = ValE
Range("G1").Value = ValF
Range("H1").Value = ValG
Range("I1").Value = ValH
Range("J1").Value = ValI
Range("K1").Value = ValJ
Range("L1").Value = ValK
Range("M1").Value = ValL
Range("N1").Value = ValM
End Sub
Mais ça ne marche pas il me met 1 / 2 / 3 partout il ne fait pas jusqu'à 14
Re,
Sub Bouton1_Cliquer()
Dim ValA As Integer
Dim ValB As Integer
Dim ValC As Integer
Dim ValD As Integer
Dim ValE As Integer
Dim ValF As Integer
Dim ValG As Integer
Dim ValH As Integer
Dim ValI As Integer
Dim ValJ As Integer
Dim ValK As Integer
Dim ValL As Integer
Dim ValM As Integer
Dim ValN As Integer
ValA = Range("A1").Value
ValB = Range("B1").Value
ValC = Range("C1").Value
ValD = Range("D1").Value
ValE = Range("E1").Value
ValF = Range("F1").Value
ValG = Range("G1").Value
ValH = Range("H1").Value
ValI = Range("I1").Value
ValJ = Range("J1").Value
ValK = Range("K1").Value
ValL = Range("L1").Value
ValM = Range("M1").Value
ValN = Range("N1").Value
Range("A1").Value = ValN
Range("B1").Value = ValA
Range("C1").Value = ValB
Range("D1").Value = ValC
Range("E1").Value = ValD
Range("F1").Value = ValE
Range("G1").Value = ValF
Range("H1").Value = ValG
Range("I1").Value = ValH
Range("J1").Value = ValI
Range("K1").Value = ValJ
Range("L1").Value = ValK
Range("M1").Value = ValL
Range("N1").Value = ValM
End Sub
Super ça fonctionne au top !!
Merci beaucoup, je n'ai plus qu'à me pencher sur le VBA pour le comprend et l'apprendre.
Merci !
Re,
Donc si c'est le résultat voulu, on peut passer par un tableau afin de réduire le nombre de ligne. Le code devient :
Sub Bouton1_Cliquer()
Dim Tbl(1 To 14) As Integer
Dim I As Integer
For I = 1 To 14: Tbl(I) = Cells(1, I).Value: Next I
Cells(1, 1).Value = Tbl(14)
For I = 1 To 13: Cells(1, I + 1).Value = Tbl(I): Next I
End Sub
Ça fonctionne super bien aussi mais là :/
Catastrophe je ne la comprend pas pourtant c'est effectivement plus rapide.
L'autre j'ai pu m'amuser déjà a la transformer comme je veux même en vertical
Sub Bouton2_Cliquer()
Dim Val6 As Integer
Dim Val7 As Integer
Dim Val9 As Integer
Dim Val10 As Integer
Dim Val11 As Integer
Dim Val12 As Integer
Dim Val14 As Integer
Dim Val16 As Integer
Dim Val18 As Integer
Dim Val21 As Integer
Dim Val22 As Integer
Dim Val24 As Integer
Dim Val25 As Integer
Dim Val26 As Integer
Val6 = Range("C6").Value
Val7 = Range("C7").Value
Val9 = Range("C9").Value
Val10 = Range("C10").Value
Val11 = Range("C11").Value
Val12 = Range("C12").Value
Val14 = Range("C14").Value
Val16 = Range("C16").Value
Val18 = Range("C18").Value
Val21 = Range("C21").Value
Val22 = Range("C22").Value
Val24 = Range("C24").Value
Val25 = Range("C25").Value
Val26 = Range("C26").Value
Range("C6").Value = Val26
Range("C7").Value = Val6
Range("C9").Value = Val7
Range("C10").Value = Val9
Range("C11").Value = Val10
Range("C12").Value = Val11
Range("C14").Value = Val12
Range("C16").Value = Val14
Range("C18").Value = Val16
Range("C21").Value = Val18
Range("C22").Value = Val21
Range("C24").Value = Val22
Range("C25").Value = Val24
Range("C26").Value = Val25
End Sub
Du coup je comprend son fonctionnement.
La le tableau je vais essayer de me pencher dessus également pour comprendre.
Merci bien, c'est vraiment top de connaitre tout ça en VBA.
Re,
Voici les deux (colonne et ligne) :
Sub En_Colonne()
Dim Tbl(1 To 14) As Integer
Dim I As Integer
'sur la colonne A de A1 à A14
For I = 1 To 14: Tbl(I) = Cells(I, 1).Value: Next I
Cells(1, 1).Value = Tbl(14)
For I = 1 To 13: Cells(I + 1, 1).Value = Tbl(I): Next I
End Sub
Sub En_Ligne()
Dim Tbl(1 To 14) As Integer
Dim I As Integer
'sur la ligne 1 de A1 à N1
For I = 1 To 14: Tbl(I) = Cells(1, I).Value: Next I
Cells(1, 1).Value = Tbl(14)
For I = 1 To 13: Cells(1, I + 1).Value = Tbl(I): Next I
End Sub
Ici avec la prise en compte des "trous" dans la liste par rapport à ton dernier code
Sub En_ColonneAvecTrous()
Dim Tbl(1 To 2, 1 To 14) As Integer
Dim I As Integer
Dim J As Integer
'sur la colonne C de C6 à C26 avec des cellules vides
For I = 6 To 26
If Cells(I, 3).Value <> "" Then
J = J + 1
Tbl(1, J) = Cells(I, 3).Value
Tbl(2, J) = Cells(I, 3).Row 'mémorise le numéro de ligne
End If
Next I
Cells(6, 3).Value = Tbl(1, 14)
'utilise le numéro de ligne stocké dans le tableau pour faire référence à la bonne cellule
For I = 1 To 13: Cells(Tbl(2, I + 1), 3).Value = Tbl(1, I): Next I
End Sub
Super !!
j'ai de quoi m'amuser pour comprend tous correctement avec trois cas possible.
Sincèrement merci !
Re,
Content de t'avoir aidé