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. OK... En tout cas ça me motive à prendre des cours de VB, ça fonctionne avec ta solution. Merci!
    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+
      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. 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. 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. 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+