2017-10-18 6 views
0

Je cherche à avoir une macro à exécuter pour une feuille de calcul spécifique seulement. Le but de la macro serait de rechercher une plage spécifiée et de trouver des valeurs négatives et s'il y en a pour extraire toute la ligne dans une nouvelle feuille de calcul et en même temps transformer ces négatifs en positifs. J'en ai trouvé quelques-uns mais je suis sûr que c'est totalement faux ... il manque beaucoup de choses. Essayant toujours d'apprendre, nouveau à cette substance vba. Merci d'avance pour toute aide que vous pouvez fournir. fyi ntp signifie negativestopositives. Je ne sais pas si cela va aider, juste pensé que je peux écrire tous les détails à mon petit « code »Macro VBA à exécuter sur une feuille de calcul spécifique

Sub ntp() 
Dim ws As Worksheet 
If ws.Name <> "originalNeg" Then 
    For Each Cell In Range("I2:I1048576") 
     If Cell.Value < 0 Then 
      Cell.Value = Abs(Cell.Value) 
     End If 
    Next Cell 

End Sub 

Répondre

1
Sub ntp() 
Dim ws  As Worksheet 
Dim cel  As Range 
With Activeworkbook.Worksheets("originalNeg") 
    For Each cel In .Range("I2:I" & .Range("I" & Rows.Count).End(xlUp).row) 
     If cel.Value < 0 Then cel.Value = Abs(cel.Value) 
    Next cel 
End With 
End Sub 

Il utilise la feuille de calcul, et notez les . avant Range() qui relie la plage à cette feuille spécifique.

De même, il est rare que vous souhaitiez utiliser toutes les cellules dans une colonne. J'ai utilisé le .End(xlUp).Row pour obtenir la dernière ligne utilisée dans la Colonne I pour que vous puissiez faire une boucle.

+2

'Rows.Count'? Sans réserve?!?!?! Allez, un extra.. N'est pas trop d'effort pour taper. – YowE3K

+0

@ YowE3K - En fait, je me suis posé la question - avec 'Rows.Count', ne serait-il pas ** toujours ** le même? Je suis d'accord que le, hm, où est-ce? ah, '. 'n'est pas si difficile à taper. Mais je l'ai consciemment laissée ici pour presque appâter \ * quelqu'un \ * pour commenter, donc je pourrais demander. ... Ainsi, 'Rows.Count' est-il vraiment important, ou ralentir les choses? : D – BruceWayne

+2

En fait, étant donné que vous avez un 'Worksheets 'non qualifié, vous faites donc référence à une feuille de calcul dans le' ActiveWorkbook', qui est donc le même classeur que' ActiveSheet', dans ce cas il ** ne le sera pas. * matière. Mais si le classeur actif était un fichier 'xlsx' et que la feuille de travail à laquelle vous faisiez référence était dans un fichier' xls', alors 'ActiveSheet.Rows.Count' serait' 1048576' et la feuille en cours de traitement aurait seulement '65536' lignes - donnant ainsi une erreur 1004. (Et, si les fichiers étaient l'inverse, vous pourriez manquer la ligne 1000000 étant utilisé parce que vous êtes passé de 65536.) – YowE3K

0
Set ws = ThisWorkbook.Worksheets("originalNeg") 

au lieu de se le nom.

+2

À l'heure actuelle, 'ws' n'est utilisé nulle part dans le code. Il ne sert à rien de le 'Set' à moins que vous ne suggériez aussi une modification du reste du code pour l'utiliser (c'est-à-dire 'ws.Range'). – YowE3K

+0

Complètement mal lu la question ... oups! – Liss