Vba excel - boucle

Résolu
Bonjour,

Je suis débutant en vb et j'ai "appris" sur le tas, j'ai un problème que je n'arrive pas à règler, si vous pourriez me venir en aide ça serait sympa!

J'ai cette boucle qui fait bien ce que je lui demande, c'est-à-dire copier une formule, mais ensuite elle ne s'arrête plus (elle reste figée sans rien faire et suis obligé de faire "esc"). Le débugueur me met une erreur sur "y = y + 1", voici le code :

Private Sub copieformule()
Dim x As Integer
Dim y As Integer
Dim z As Integer
Dim a As Integer
x = 9
Do While x < 43
y = 4
Do While y < Application.CountA(Sheets("planning").Range("A:A")) + 3
z = x + 1
a = x - 1
Sheets("planning").Cells(y, x).FormulaLocal = "=SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($D" & y & ");CNUM($D" & y & ")>=CNUM(" & Cells(2, x).Address & "));""["";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($E" & y & ");CNUM($E" & y & ")>=CNUM(" & Cells(2, x).Address & "));""]"";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($F" & y & ");CNUM($F" & y & ")>=CNUM(" & Cells(2, x).Address & "));""]"";SI(ET(CNUM(" & Cells(2, z).Address & ")>CNUM($G" & y & ");CNUM($G" & y & ")>=CNUM(" & Cells(2, x).Address & "));""["";SI(OU(" & Cells(y, a).Address & "=""["";" & Cells(y, a).Address & "=""-"");""-"";"""")))))"
y = y + 1
Loop
x = x + 1
Loop
End Sub

Merci d'avance et bonne soirée! :)
Configuration: Windows XP
Excel 2003

6 réponses

  1. Hello!

    La valeur de
    Application.CountA(Sheets("planning").Range("A:A")) + 3
    est 120, j'utilise ça pour compter le nombre de lignes non-vides.

    Juste pour information, maintenant ça fonctionne sur excel 2007, mais sur 2000 ça plante... :(

    L'erreur que j'avais faite est que dans un autre Sub j'avais écrit :

    Call copieformule()


    à l'intérieur d'une boucle For... Mais mon code ne doit sûrement pas être très "propre" car sur Excel 2000 ça plante encore.
    1. Contributeur
      Beh oui,... parce que sur Ex2000 (ni sur 2003) y a tout simplement pas CountA
      faut remplacer par
      Jusque...
        Range("A65536").End(xlUp).Row

      Pour la colonne A
      Et la prochaine fois tâche d'être plus explicit, tu parle de Excel 2003, ensuite de Excel 2000 et encore de Excel 2007.
      A+
  2. Après avoir checké sur internet, peut être que l'écriture correcte est :

    Application.WorksheetFunction.CountA


    Mais dans les 2 cas ça me donne des résultats corrects.
    1. Merci de ta réponse.

      Désolé mais c'est que j'ai commencé sur Excel 2007 et ensuite vérifié sur Excel 2000.

      Je vais donc faire les modifications...

      Merci.
      1. OK... En tout cas ça me motive à prendre des cours de VB, ça fonctionne avec ta solution. Merci!
        1. Contributeur
          Bonjour,
          1°) vérifie bien ce que tu à comme valeur pour
          Application.CountA(Sheets("planning").Range("A:A")) + 3 
          Parce que moi je n'ai pas de propriété CountA pour Application ?
          2°) si tu a plus de 32000 ligne il faut déclarer
          Dim Y as Long (en place de integer)
          A+
          1. Contributeur
            Oui, j'ai pas pensé à cette éventualité car j n'ai jamais eu besoin de fonction de feuille en VBA. D'autant plus qu'il faut employer les noms en anglais.
            En VBA j'emploi du.... VBA
            A+