XL 2016 If avec "pas" simple - RESOLU

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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,
 
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
 
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
 
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

Dernière édition:
@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

@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
 
@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
 
@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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour