renaud97434
Messages postés31Date d'inscriptionlundi 26 novembre 2007StatutMembreDernière intervention26 août 2008
-
26 nov. 2007 à 11:04
renaud97434
Messages postés31Date d'inscriptionlundi 26 novembre 2007StatutMembreDernière intervention26 août 2008
-
26 nov. 2007 à 15:54
bonjour,
suite à compter j'ai deux autres questions:
tout d'abord le code suivant ne marche pas, je souhaite compter le nombre de lignes ou la valeur est comprises entre deux valeurs.
ici les valeurs sont des dates.
Sub lignesentrelesdeuxenregistrements()
Dim i As Long
'lignes comprises entre les deux enregistrements
i = 0
Do While Sheets("recap").Cells(5, 7) <= Sheets("extract").Cells(i + 2, 4) < Sheets("recap").Cells(6, 7)
i = i + 1
Loop
Sheets("recap").Cells(15, 11).Value = i
End Sub
le probleme 1024 intervient sur le do while loop.
deuxième question
quelle formule utiliser pour compter le nombre de références uniques dans une colomne?
sur excel j'y arrive avec somme(si(frequence(range;range))
comment faire sur vba?
pneau
Messages postés258Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention27 octobre 20105 26 nov. 2007 à 11:14
salut (re)
pour ta fonction lignesentrelesdeuxenregistrements
essaie ça :
Do While Sheets("recap").Cells(5, 7) <= Sheets("extract").Cells(i + 2, 4) and Sheets("extract").Cells(i + 2, 4) < Sheets("recap").Cells(6, 7)
sinon pour ton autre souci (ref unique), pour l'instant je ne vois pas... affaire a suivre
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 26 nov. 2007 à 13:34
Tu as absolument besoin de le faire en code ?
Parce qu'avec une simple formule Excel, ça le fait :
A1: 10/01/2007 (=> Date de début)
A2: 20/01/2007 (=> Date de fin)
Tes dates sont dans la colonne B
Une simple formule =NB.SI(B:B;">"&A1)-NB.SI(B:B;">"&A2)
Pour ta référence unique, tu pourrais sans doute utiliser un tableau de variable :
Tu défiles chaque ligne, tu vérifies tes conditions et si elles sont respectées, tu vas regarder dans ton tableau de variable, que tu redimensionnes au fur et à mesure.
Je m'étais fait une fonction de ce style pour traiter une liste de destinataires outlook générés automatiquement, et il me fallait donc éliminer les doublons :
Private Function TraitementDoublon(DestinatairesTraités As String)
'Traitement des doublons
'=> Défilement du tableau des destinataires destinataire par destinataire.
'=> Copie du destinataire dans un tableau cible si ce destinataire n'existe pas déjà à l'intérieur du tableau
'Définition des variables
Dim ListeDestinataires() As String
Dim ListeDestinatairesCible() As String
Dim i As Integer, j As Integer, Compteur As Integer
Dim DestinataireExistant As Boolean
'Initialisation des variables
ReDim ListeDestinatairesCible(0)
Compteur = 0
'Récupération de la liste des destinataires
ListeDestinataires = Split(DestinatairesTraités, ";", , vbTextCompare)
'Boucle des destinaires
For i = 0 To UBound(ListeDestinataires)
'Contrôle de la présence dans le tableau cible
DestinataireExistant = False
For j = 0 To UBound(ListeDestinatairesCible)
If ListeDestinataires(i) = ListeDestinatairesCible(j) Then
DestinataireExistant = True
End If
Next j
'Copie des destinataires uniques
If DestinataireExistant = False Then
If Compteur = 0 Then
ListeDestinatairesCible(0) = ListeDestinataires(i)
Else
ReDim Preserve ListeDestinatairesCible(UBound(ListeDestinatairesCible) + 1)
ListeDestinatairesCible(UBound(ListeDestinatairesCible)) = ListeDestinataires(i)
End If
Compteur = Compteur + 1
End If
Next i
For i = 0 To UBound(ListeDestinatairesCible)
TraitementDoublon = TraitementDoublon & ";" & ListeDestinatairesCible(i)
Debug.Print ListeDestinatairesCible(i)
Next i
TraitementDoublon = Right(TraitementDoublon, Len(TraitementDoublon) - 1)
End Function
Tu dois pouvoir adapter ce code à ton besoin (en remplaçant la 1ere boucle et son Ubound par une boucle DoWhile.
renaud97434
Messages postés31Date d'inscriptionlundi 26 novembre 2007StatutMembreDernière intervention26 août 2008 26 nov. 2007 à 15:54
merci je vais etudier ton code même s'il est trop compliqué pour moi pour l'instant.
pour calculer le nombre de lignes entre deux dates j'ai le code suivant:
dans la feuille recap j'ai deux dates une de début (cells(5,7))et une de fin (cells(6,7)).
le problème est que je dois me tromper dans la valeur initiale de J car en vérifiant il me manque un enregistrement.pourtant cette procédure semble logique.
si la condition est remplie dès la première ligne, j prend la valeur 1
si la condit²²ion n'est pas remplie dès la première ligne j reste = à 0.
ensuite si la condition est remplie à la ligne 2
Sub lignes()
Dim i As Long
Dim j As Long
'nombre d'enregistrements de la feuille extract
i = 0
j = 0
Do While Sheets("extract").Cells(i + 2, 4) <> ""
i = i + 1
If Sheets("recap").Cells(5, 7) <= Sheets("extract").Cells(i + 2, 4) And Sheets("extract").Cells(i + 2, 4) <= Sheets("recap").Cells(6, 7) Then
j = j + 1
Else
j = j
End If
Loop
Sheets("recap").Cells(15, 11).Value = j