(vba) récupération et passage de cellule en argument

fred Simons

XLDnaute Nouveau
Bonsoir le forum et ses illustres utilisateurs,

je continue, lentement, ma compréhension de la gestion des cellules en vba et voici mon probleme. (c'est un peu long mais je sens que la réponse bva etre courte, elle :) )

Grâce à vous (encore meci a Hervé et charly2), j'ai pu metre au point cette fonction:

Public Function recherchederniere(produit As Integer, cellule As Range)
Dim i As Integer
Application.Volatile
For i = cellule.Column - produit To 13 Step -produit
If Not Cells(cellule.Row, i) = "" Then
recherchederniere = Cells(cellule.Row, i).Value
Exit Function
End If
Next i
recherchederniere = -1
End Function

en gros, elle cherche, a partir de ma cellule, dans les cellules précédentes de la meme ligne, la première non vide (par saut de "produit", c'est un détail)


maintenant, j'aimerai faire ceci.

Function regression(produit As Integer, cellules As Range )
' produit = le nombre de colonne par version , typiquement 1,2 ou 3
' cellules = la colonne testée
Dim regress As Integer
Dim txt As String
regress = 0

For Each macellule In cellules.Cells
txt = ""
If macellule.Value <> "" and macellule.value <> "ok" Then
txt = recherchederniere(produit, macellule)
If txt = "ok" Then
regress = regress + 1
End If
End If
Next
ergression = regress
End Function

autrement dit, quand, pour chaque cellule de ma plages cellules, la valeur n'est ni vide ni ="ok" (donc, c'est une erreur dans mon systeme), je cherche si la valeur précédente était ok. si oui, j'ai une regression dans mon systeme et je fais +1


MAIS, car il y a un mais, ca marche po.
il semble que ma première fonction refuse macellule comme argument par référence, ce qui doit etre le cas.

que dois je faire, Ô grands gourous ?

D'avance merci !
humblement,
fred
 

Kobaya

XLDnaute Occasionnel
Re : (vba) récupération et passage de cellule en argument

avant de tester le code ci-dessous :

1. toujours mettre Option Explicit en haut du module (forcer la déclaration des variables). c'est un peu contraignant, mais ça évite pas mal de déconvenues du genre ergression au lieu de regression ;)
2. une fonction doit être typée (As Integer si ta fonction renvoie une valeur comprise entre -32 768 et 32 767, As Byte si c'est entre 0 et 255, etc.), sinon par défaut, c'est une Variant. question optimisation, c'est pas top.


Code:
Function regression(produit As Integer, cellules As Range)
    ' produit = le nombre de colonne par version , typiquement 1,2 ou 3
    ' cellules = la colonne testée
    Dim regress As Integer
    Dim macellule As Range
    Dim txt As String
    
    regress = 0
    
    For Each macellule In cellules.Cells
        txt = ""
        If macellule.Value <> "" And macellule.Value <> "ok" Then
            txt = recherchederniere(produit, macellule)
            If txt = "ok" Then
                regress = regress + 1
            End If
        End If
    Next
    regression = regress
End Function
 

fred Simons

XLDnaute Nouveau
Re : (vba) récupération et passage de cellule en argument

Aloa Kobaya !

Je teste ca tout de suite :)

1000 mercis

**** test ****
juste un probleme avec les boucles et voila ! plus de message d'erreur ! re merci
(maintenant, essayons de comprendre pq le résultat n'est pas bon :-D )
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat