XL 2016 casenulle

sarahersarah

XLDnaute Nouveau
bonjour
ci joint le fichier excel dont je veux que le boutton soit dans une feuille et les calculs se fait dans une autre feuille
merci
ps: le boutton fonctionne bien je veux juste faire le transfert
 

Pièces jointes

  • case_nul.xlsm
    17.5 KB · Affichages: 12

soan

XLDnaute Barbatruc
Inactif
Bonsoir sarahsahara, Bruno,

bienvenue sur le site XLD ! :)

pour éviter de prêcher dans le désert, je te retourne ton fichier joint ci-dessous.

j'ai déplacé ton bouton sur "Feuil2", et adapté la macro en conséquence :​

VB:
Option Explicit

Sub casenul()
  Dim dercol%, i&
  With Worksheets("Feuil1")
    dercol = .Cells(8, Columns.Count).End(xlToLeft).Column: If dercol < 4 Then Exit Sub
    Application.ScreenUpdating = 0: .Cells(10, dercol) = .Cells(8, dercol)
    For i = dercol To 4 Step -1
      .Cells(10, i - 1) = .Cells(8, dercol): If .Cells(12, i - 1) > 0 Then dercol = i - 1
    Next i
  End With
End Sub

malheureusement, je n'suis pas sûr d'avoir bien compris c'que tu veux faire au juste, alors c'est juste un essai ; cependant, dans ton code initial, note que pour :

VB:
If Cells(ligne + 4, i - 1).Value = 0 Then
  Cells(ligne + 2, i - 1).Value = Cells(ligne, dercol).Value
Else
  Cells(ligne + 2, i - 1).Value = Cells(ligne, dercol).Value
  dercol = dercol - (dercol - (i - 1))
End If

tu exécutes cette ligne : Cells(ligne + 2, i - 1).Value = Cells(ligne, dercol).Value

dans la partie VRAI du test, ET la même ligne dans la partie FAUX !

comme cette ligne est clairement indépendante du test,
tu peux la sortir du bloc de test et la placer au-dessus :

VB:
Cells(ligne + 2, i - 1).Value = Cells(ligne, dercol).Value
If Cells(ligne + 4, i - 1).Value = 0 Then
Else
  dercol = dercol - (dercol - (i - 1))
End If

puis comme y'a aucune instruction dans la partie If .. Then,
inverse le sens du test pour donner ceci :

VB:
Cells(ligne + 2, i - 1).Value = Cells(ligne, dercol).Value
If Cells(ligne + 4, i - 1).Value <> 0 Then
  dercol = dercol - (dercol - (i - 1))
End If

comme tu n'as que des valeurs positives, c'est inutile
de tester des nombres négatifs, donc :

VB:
Cells(ligne + 2, i - 1).Value = Cells(ligne, dercol).Value
If Cells(ligne + 4, i - 1).Value > 0 Then
  dercol = dercol - (dercol - (i - 1))
End If

enfin, note que d'un point de vue mathématiques :

Code:
dercol = dercol - (dercol - (i - 1))
       = dercol - dercol + (i - 1)
       = (dercol - dercol) + (i - 1)
       = 0 + (i - 1)
       = i - 1

ça simplifie, pas vrai ? 😜

soan
 

Pièces jointes

  • case_nul.xlsm
    18.2 KB · Affichages: 4
Dernière édition:
C

Compte Supprimé 979

Guest
@BrunoM45

tu as écrit : « Il faut apprendre les bases de VBA et sa programmation objets »

euh... je crois que sarah est venue sur le site XLD pour ça, justement ! 😜

laisse-lui le temps d'apprendre avec les posts du forum et les tutos ! 😄

soan
Désolé, mais perso je ne comprendrais jamais celles et ceux qui se lance à corps perdu dans la programmation sans en connaitre les bases :rolleyes: mais aujourd'hui tout doit allez plus vite on se fou du reste... 😞

Mais bravo à toi de trouver du temps pour expliquer en long, en large... perso je bosse 😜
 

Discussions similaires

Réponses
5
Affichages
295
Réponses
7
Affichages
431

Statistiques des forums

Discussions
312 332
Messages
2 087 361
Membres
103 530
dernier inscrit
Chess01