Se connecter avec
S'enregistrer | Connectez-vous

[RéSOLU][vba]

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Voila ma fonction en vba:

Public Function Calcul_max_col() As Integer
Dim col As Integer
Dim li As Integer
Dim nbcol As Integer
col = 1
nbcol = 0
While cells(li, 1) <> ""
nbcol = nbcol + 1
Wend
End Function

mais il me di 'erreur 1004 erreur du a lapplication ou a lobjet'

hello ,

corrige en faisant :

  1. Public Function Calcul_max_col() As Integer
  2. Dim col As Integer
  3. Dim li As Integer
  4. Dim nbcol As Integer
  5.  
  6. col = 1
  7. nbcol = 0
  8.  
  9. Do while not cells(li, 1) = ""
  10. nbcol = nbcol + 1
  11. Loop
  12. End Function


quoique je prefere tester le nombre de caracteres plutot qu'un possible vide
ce qui donne :

  1. Public Function Calcul_max_col() As Integer
  2. Dim col As Integer
  3. Dim li As Integer
  4. Dim nbcol As Integer
  5.  
  6. col = 1
  7. nbcol = 0
  8.  
  9. Do while len(cells(li, 1)) > 0
  10. nbcol = nbcol + 1
  11. Loop
  12. End Function


Malgré tout quoiqu'il arrive tu est dans une boucle infinie... Tu testes une cellule qui varie suivant li mais tu ne fais pas varier li mais nbcol, comment diable si tu rentres dans ta boucle, pourras tu en sorir ??

++
Nico.

Merci Nico pour ton aide (ma boucle est en effet infinie).
Cependant là je crie "Au Secours" car cela ne fonctionne toujours pas.
Je vous envoie donc mes 3 fonctions, car je ne sais pas d'où vient mon erreur:

Public Function Calcul_max_li() As Integer
Dim li As Integer
Dim col As Integer
Dim nbli As Integer
li = 1

While (cells(1, col).Value) <> ""
nbli = nbli + 1
li = li + 1
Wend
End Function

Public Function Calcul_max_col() As Integer
Dim col As Integer
Dim li As Integer
Dim nbcol As Integer
col = 1
nbcol = 0

While cells(li, 1).Value <> ""
nbcol = nbcol + 1
Wend
End Function


et le programme principal:

Private Sub CommandButton1_Click()
Dim li As Integer
Dim col As Integer
Dim i As Integer
Dim colrech As Integer
Dim trouve As Boolean

MaxLi = Calcul_max_li()
MaxCol = Calcul_max_col()

For li = 2 To MaxLi
For col = 2 To MaxCol
If cells(li, col) = "" Then
colrech = col + 1
trouve = False
While colrech <= MaxCol And Not trouve
If cells(li, col) <> "" Then
trouve = True
Else
colrech = colrech + 1
End If
Wend
If trouve Then
cells(li, col).Value = (cells(li, colrech).Value - cells(li, col - 1).Value) / colrech
End If
End If
Next
Next
End Sub

mon erreur est toujours la même: il souligne en jaune la phrase:
While (cells(1, col).Value) <> ""
et me dit 'erreur 1004 - erreur définie par l'application ou par l'objet'.

Voilà, s'il vous plaît je suis déséspérée, j'ai rendez-vous à 14h00 avec mon maître de stage pour lui montrer mon application!!!

Merci d'avance pour votre aide.
AU SECOURS!!!! :crying: :snif:

smurf,

1. pourquoi tu t'entetes a mettre " <> " alors que tu devrais mettre " not = "

2. cells(x,y).value ne sert a rien, prends juste cells(x,y) => le .value renvoi (parfois) des erreurs.

3. plutot que du while ... wend utilise le do ... loop, plus fiable, plus rapide, plus pratique
la syntaxe est la meme : do While ... loop

4. je comprends rien a ton programme ... :p 
les boucles sont infinies, tes fonctions ne renverrons rien vu que tu ne mets rien dedans, tu dimensionnes 3 fois les memes variables, etc. Je vais etre méchant mais prends ca pour t'améliorer, ce truc est a recommencer a zéro.

contacte moi pour de plus amples infos :
leghola2 at hotmail.com

Hello!
Bon eh bien voilà g recommencé à zéro et voilà mes fonctions:

Function Calcul_max_col()
Dim col As Integer
Dim li As Integer
col = 1
While cells(1, col) <> ""
col = col + 1
Wend
Calcul_max_col = col - 1
'MsgBox (Calcul_max_col)
End Function

Function Calcul_max_li()
Dim col As Integer
Dim li As Integer
li = 1
While cells(li, 1) <> ""
li = li + 1
Wend
Calcul_max_li = li - 1
'MsgBox (Calcul_max_li)
End Function

Sub CommandButton1_Click()-->programme principal
Dim li As Long
Dim col As Long
Dim nbrecase As Long
Dim casedepart As Long
Dim pas As Long
colrech = 1

MaxLi = Calcul_max_li()
MaxCol = Calcul_max_col()

For li = 2 To MaxLi
For col = 2 To MaxCol
If cells(li, col) = "" Then
casedepart = col
nbrecase = 0

While col <= MaxCol And cells(li, col) = ""
col = col + 1
nbrecase = nbrecase + 1
'MsgBox ("casedepart" & casedepart & "nbrecase" & nbrecase)
Wend
If col < MaxCol + 1 And casedepart > 2 Then
pas = (cells(li, col) - cells(li, casedepart - 1)) / (nbrecase + 1)
'MsgBox ("pas" & pas)
Else
pas = 1234
'MsgBox ("pas" & pas)
End If
If casedepart > 2 And col < MaxCol + 1 Then
While casedepart < col
cells(li, casedepart) = cells(li, casedepart - 1) + pas
casedepart = casedepart + 1
Wend
End If
End If
Next
Next
End Sub

Elles fonctionnent très bien dans tous les cas et mon maître de stage est très content!

Merci quand même de m'avoir aider (et de ta franchise...:-) )
Bisous
Lassé par la pub ? Créez un compte
Tom's guide dans le monde