Fonction VBA

cs_steed12 Messages postés 25 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 9 janvier 2006 - 9 févr. 2005 à 11:01
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 - 9 févr. 2005 à 14:20
Salut a tous,
Voilas je me suis mis au VBA Ecxel depuis 3 jours et je bloque sur un problème :
je cherche a lire une ligne d'un tableau et a compté combien il y aurais de range ayant la valeur CP, DA et CE sur chaque ligne de mon tableau (250 lignes) mais je bloque complètement.

merci a celui qui pourrait m'orienter sur une voie de recherche.
Steed

4 réponses

nagattaque Messages postés 230 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 5 juin 2007
9 févr. 2005 à 12:20
qu'est ce que tu appelles "range", une cellule ? Essaye d'etre plus precis...
0
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
9 févr. 2005 à 12:29
Si l'obectif de ta fonction est juste de compter le nb d'éléments de chaque ligne, tu n'es pas obligé d'utilisé du VBA. Tu peux t'en sortir en posant des formules Excel :
SI(NB.SI(Feuil1!2:2;"CP")= 0; 0; 1) * SI(NB.SI(Feuil1!2:2;"=DA")= 0; 0; 1) * SI( NB.SI(Feuil1!2:2;"=CE")=0; 0; 1)
Ici, la formule te renvoie 1 si la ligne 2 de la feuille contient CP, DA et CE. Elle renvoie 0 sinon.

Autrement en VBA tu aurais ça :
Public Sub test()
Dim li_Ligne As Integer
Dim li_Col As Integer
Dim li_NbCol As Integer
Dim lb_CP As Boolean
Dim lb_DA As Boolean
Dim lb_CE As Boolean
Dim l_Sheet As Worksheet
Set l_Sheet = Worksheets("Feuil1")
'Cherche la dernière colonne utilisée (évite de parcourir les 255 colonnes)
li_NbCol = l_Sheet.UsedRange.Columns.Count
'Parcourt les lignes
For li_Ligne = 1 To 250
'Réinitialise les booléens lb_CP False: lb_DA False: lb_CE = False
'Parcourt les colonnes
For li_Col = 1 To li_NbCol
'Si la cellule contient CP, on stocke le fait qu'on l'ait trouvé
If Not lb_CP And l_Sheet.Cells(li_Ligne, li_Col).Value = "CP" Then
lb_CP = True
End If
'Idem avec DA
If Not lb_DA And l_Sheet.Cells(li_Ligne, li_Col).Value = "DA" Then
lb_DA = True
End If
'Idem avec CE
If Not lb_CE And l_Sheet.Cells(li_Ligne, li_Col).Value = "CE" Then
lb_CE = True
End If
'Si on a trouvé les trois, on affiche en debug le numéro de la ligne
If lb_CP And lb_DA And lb_CE Then
Debug.Print "La ligne " & li_Ligne & " contient les 3 valeurs"
End If
Next li_Col
Next li_Ligne
End Sub
0
cs_steed12 Messages postés 25 Date d'inscription mardi 4 janvier 2005 Statut Membre Dernière intervention 9 janvier 2006
9 févr. 2005 à 14:15
range c'est une céllule en effet. merci pour la fonction je vais essayer de bosser en partant de ca.

Steed
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
9 févr. 2005 à 14:20
Salut !

Voici une fonction dans laquelle tu entre la valeur en string a trouver et elle te renvoi le nombre trouvé dans la colonne A

Public Function Rechercher_Nb(sRecherche As String) As Long
Dim lignCur As Long
Dim lign1 As Long
Dim nbr As Long


On Error GoTo Err_nonTrouvé
Columns("A:A").Select
Selection.Find(What:="1", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
If ActiveCell.Value = sRecherche Then
lign1 = ActiveCell.Row
lignCur = lign1 + 1
nbr = 1
Do While lign1 < lignCur
Selection.FindNext(After:=ActiveCell).Activate If ActiveCell.Value sRecherche And lign1 < ActiveCell.Row Then nbr nbr + 1
lignCur = ActiveCell.Row
Loop
Else
nbr = 0
End If
Rechercher_Nb = nbr

Exit Function

Err_nonTrouvé:
Rechercher_Nb = 0
Exit Function
End Function

ptitgrumo chapeau?
0
Rejoignez-nous