Vba excel - boucle

Résolu
nico -  
 nico -
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. nico
     
    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.
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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+
      0
  2. nico
     
    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.
    0
  3. nico
     
    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.
    0
  4. nico
     
    OK... En tout cas ça me motive à prendre des cours de VB, ça fonctionne avec ta solution. Merci!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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