XL 2016 If avec "pas" simple - RESOLU

sebastien450

XLDnaute Occasionnel
Bonjour,

Pas néophyte, C'est pourtant simple mais je n'arrive pas construire la règle suivante de manière simple :
VB:
If L = 8 Then L2 = 7
If L = 16 Then L2 = 8
If L = 24 Then L2 = 9
If L = 32 Then L2 = 10
'et ainsi de suite jusqu'a L=208

Merci de votre aide,
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Sébastien,

L2 = L / 8 + 6

car :

a) 8 / 8 + 6 = 1 + 6 = 7
b) 16 / 8 + 6 = 2 + 6 = 8
c) 24 / 8 + 6 = 3 + 6 = 9
d) 32 / 8 + 6 = 4 + 6 = 10

etc...

208 / 8 + 6 = 26 + 6 = 32

note qu'avec la priorité des opérateurs, c'est inutile de mettre des parenthèses car la division est prioritaire sur l'addition ; ainsi : 32 / 8 + 6 = (32 / 8) + 6 = 4 + 6 = 10.​

je suis d'accord avec toi : le "pas" est simple. 😜

soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Phil69970,

euh, c'est pas plutôt ça que tu aurais voulu faire :

VB:
Sub L_L2()
  Dim L As Byte, L2 As Byte
  Application.ScreenUpdating = 0
  For L = 8 To 208 Step 8
    L2 = L2 + 1: Cells(L2 + 1, 1) = L
  Next L
End Sub

et les données sont écrites de A2 à A27 (pas A28). 😜

soan
 

Phil69970

XLDnaute Barbatruc
Soan

Pourtant ça marche dans le fichier, ou se situe mon erreur STP

*Edit: j'ai vu je fais un tour de trop...
Corrigé dans la V2

VB:
Sub L_L2()

L2 = 7
i = 3
Range("A" & i - 1) = L2 'La 1ere ligne est ici'

For L = 16 To 208 Step 8
    L2 = L2 + 1
    Range("A" & i) = L2
    i = i + 1
Next L

End Sub

@Phil69970
 

Pièces jointes

  • L_L2.xlsm
    13.7 KB · Affichages: 10
  • L_L2 V2.xlsm
    14.1 KB · Affichages: 2
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Phil69970

1) pour mon post #5 : je croyais que tu voulais écrire les données 8 à 208 par pas de 8 : 8 ; 16 ; 24 ; 32 ; 40 ; ... ; 208 de A2 à A27 ; et je proposais une simplification de ton code VBA, avec moins de variables.

2) pour ton post #6, vérifie d'abord que 8 à 208 par pas de 8 est bien de A2 à A27 ; donc ton code VBA écrit une donnée en trop : c'est 33, en A28 ; ci-dessous, ton fichier en retour, qui écrit 7 à 32 de A2 à A27.​

VB:
Sub L_L2()
  Dim L As Byte, L2 As Byte
  L2 = 2: Application.ScreenUpdating = 0
  For L = 8 To 208 Step 8
    Cells(L2, 1) = L2 + 5: L2 = L2 + 1
  Next L
End Sub

* 2 variables L et L2 seulement ; pas de variable i

* une seule instruction pour écrire la donnée :

Cells(L2, 1) = L2 + 5

au lieu de tes 2 instructions :

Range("A" & i - 1) = L2 et plus bas : Range("A" & i) = L2

ce que j'ai fait est juste une petite optimisation, sans plus. ;)

utilisation : fais juste Ctrl e

soan
 

Pièces jointes

  • L_L2.xlsm
    14.2 KB · Affichages: 2

Phil69970

XLDnaute Barbatruc
@soan

Nos post se sont croisés....
J'avais édité mon post #6 avec mon ancien fichier (avec un tour de trop) et mon nouveau fichier

C'est pour la simplification que j'ai du mal....
De plus, je maitrise pas bien du tout les "cells (1 , 1)" et je préfère les range("a1") ou [A1]
Je sais c'est facile mais ça rentre pas trop....🤪

@Phil69970
 

soan

XLDnaute Barbatruc
Inactif
@Phil69970

oh, c'est juste que Range("E3") = 8 est équivalent à Cells(3, 5) = 8 car pour Cells() c'est la ligne en premier paramètre, puis la colonne en second paramètre ; tu peux aussi écrire Cells(3, "E") = 8 ; mais quand la ligne et la colonne sont connus, c'est plus simple d'écrire : [E3] = 8

soan
 

soan

XLDnaute Barbatruc
Inactif
@Phil69970

si t'avais fait du Turbo Pascal, t'aurais bien aimé : pour le positionnement du curseur sur l'écran c'est avec gotoXY(colonne, ligne); alors qu'en BASICA ou GWBASIC, c'est Locate(ligne, colonne) 😜 (comme quoi c'est juste des conventions, qui ont été choisies par ceux qui ont implémenté le langage de programmation)

soan
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
505

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar