Problème fonction .Find

bj51

XLDnaute Nouveau
Bonjour,

Je cherche à réaliser un graphique temporel représentant un niveau acoustique en fonction du temps. J'ai donc deux colonnes, l'une contenant les informations horaires, l'autre les niveaux acoustiques. Le graphique doit présenter les données en deux séries distinctes : le jour et la nuit. Deux cellules (B2 et D2) de la feuille servent à définir le début et la fin de la période nocturne (et donc de la période diurne). Une autre cellule de la feuille (H4) permet de savoir quelle est la taille de la plage de données (qui peut être variable).

J'ai créé une macro permettant de déplacer les données dans une nouvelle colonne, extraire les données en période de nuit et les déplacer dans la colonne adjacente, en utilisant la fonction .Find :

Code:
Sub ajuster_periodes()
    'Déclarations.
    Dim donnees_temp As Range
    Dim donnees_tot As Range
    Dim donnees_tot_depl As Range
    Dim donnees_nuit As Range
    Dim donnees_nuit_depl As Range
    Dim taille As Integer
    Dim h_soir As Integer
    Dim h_matin As Integer
    Dim c_soir As Range
    Dim c_matin As Range
    
    'Affectations.
    taille = ActiveSheet.Range("H4").Value - 1
    Set donnees_temp = ActiveSheet.Range(Cells(12, 32), Cells(12 + taille, 32))     ' Données temporelles (heures seulement)
    Set donnees_tot = ActiveSheet.Range(Cells(12, 31), Cells(12 + taille, 31))      ' Données de niveau (total)
    Set donnees_tot_depl = ActiveSheet.Range(Cells(12, 33), Cells(12 + taille, 33)) ' Colonne où déplacer les données de niveau avant de séparer les périodes jour/nuit
    h_soir = ActiveSheet.Range("D2").Value
    h_matin = ActiveSheet.Range("B2").Value
    With donnees_temp.Cells
        Set c_soir = .Find(h_soir)                                                  ' Recherche de la cellule de départ de la période "nuit"
        Set c_matin = .Find(h_matin, c_soir)                                        ' Recherche de la cellule de fin de la période "nuit"
    End With
    Set donnees_nuit = ActiveSheet.Range(Cells(c_soir.Row, c_soir.Column + 1), Cells(c_matin.Row - 1, c_matin.Column + 1)) ' Définition de la période "nuit" dans la colonne "jour"
    Set donnees_nuit_depl = ActiveSheet.Range(Cells(c_soir.Row, c_soir.Column + 2), Cells(c_matin.Row - 1, c_matin.Column + 2)) ' Définition de la période "nuit"
    
    'Traitement.
    ActiveSheet.Range(Cells(12, 33), Cells(10000, 34)).ClearContents ' Vidage des colonnes "jour" et "nuit"
    donnees_tot_depl.Value = donnees_tot.Value                       ' Copie des données dans la colonne "jour"
    donnees_nuit_depl.Value = donnees_nuit.Value                     ' Copie des données dans la colonne "nuit"
    donnees_nuit.ClearContents                                       ' Suppression des données "nuit" dans la colonne "jour"
End Sub

Le problème est que les cellules trouvées (c_soir et c_matin) ne sont pas celles attendues, et je ne vois pas d'où peut venir le problème. Une idée ?
 

bj51

XLDnaute Nouveau
Re : Problème fonction .Find

Autre précision, je passe par une macro pour obtenir des cellules complètement vides (avec .ClearContents). J'ai essayé sans macro, avec des formules, mais les cellules obtenues ne sont alors pas réellement vides, et le graphique les comprend alors comme des 0, ce qui pose des problèmes sur le tracé.
 

skoobi

XLDnaute Barbatruc
Re : Problème fonction .Find

Bonjour bj51,

je n'ai pas excel 2010 mais je pense que les arguments à renseigner doivent être sensiblement les mêmes que excel 2003.
Cela signifie qu'il est fortement conseiller de renseigner certains des ses arguments car sinon le résultat peut être effectivement aléatoire.
Regarde attentivement l'aide pour Find.
 

bj51

XLDnaute Nouveau
Re : Problème fonction .Find

Effectivement, en renseignant tous les arguments (ou presque), cela fonctionne. Par contre je dois omettre l'argument "after", sous peine de me voir retourner une erreur d'incompatibilité de type quand j'accède à la ligne ou à la colonne de la cellule trouvée. Mais bon, c'était facultatif et ça fonctionne comme ça, donc je n'y touche plus pour le moment. Merci pour la réponse!
 

Discussions similaires

Réponses
0
Affichages
153
Réponses
1
Affichages
168

Statistiques des forums

Discussions
312 220
Messages
2 086 381
Membres
103 198
dernier inscrit
CACCIATORE