RechercheV / Virgule / Point / Dimensions

6pr-fangas.zip (1.22 Mo)

Bonjour chers membres du forum,

Je cherche à récupérer et transférer des données d'une plage avec lacune à une autre sans lacune (et donc plus grande). J'utilise donc la fonction recherchev (vlookup, au niveau de la troisième boucle dans le code ci-dessous), mais celle ci retourne, 9 fois sur 10, une valeur sans la virgule (passant par exemple de 2,55 à 255). En déclarant la variable qui lui est rattaché (débit) comme Double, le problème ne se pose plus mais la fonction plante dès qu'elle rencontre une NA. C'est pourquoi la dimension est Variant.

Savez vous comment je peux modifier mon code pour contourner ce problème ?

'test de la fonction recherchev dans un meme classeur

Sub Transfo_PR_2()

    Range("A:C").ClearContents
    Dim ligne As Long
    Dim datedebut As Date, datefin As Date, newdate As Date
    Dim debit As Variant
    Dim wsdata As Worksheet, result As Worksheet

    'Neutraliser le rafraîchissement de l'écran et les messages d'erreur
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    Set result = Sheets("result")
    Set wsdata = Sheets("Vol pompé 01h")

 'INSTRUCTIONS
            'Enregistre la première et dernière date pour associer les valeurs de débits
            datedebut = wsdata.Cells(1, 1).Value
            datefin = wsdata.Cells(Rows.Count, 1).End(xlUp).Value
            newdate = datedebut
            ligne = 1

            'boucle qui recréé le pas de temps horraire sans les lacunes
            While newdate <= datefin
                ligne = ligne + 1
                result.Cells(ligne, 1) = newdate
                newdate = newdate + 1 / 24 'pas de temps horraire
            Wend

            'boucle qui corrige l'incrémentation du jour à minuit
            newdate = datedebut
            ligne = 1
            While newdate <= datefin
                ligne = ligne + 1
                If TimeValue(newdate) = "00:00:00" Then
                   result.Cells(ligne, 1) = DateAdd("d", 1, newdate)
                End If
                newdate = newdate + 1 / 24
            Wend

            'boucle qui associe les débits aux dates
            newdate = datedebut
            ligne = 1
            While newdate <= datefin
                ligne = ligne + 1

                debit = Application.VLookup(result.Cells(ligne, 1), wsdata.Range("A:F"), 6, False)
                result.Cells(ligne, 2) = IIf(IsError(debit), 0, debit)

                newdate = newdate + 1 / 24 'pas de temps horraire
            Wend

            'Remplace les virgule par des points
            result.Range("B:C").Replace What:=",", Replacement:="."
            'Glisse les entêtes
            result.Range("A1") = "Date et Heure"
            result.Range("B1") = "Débit [m3/h]"
            result.Range("C1") = "Pluie [mm]"

    ' Réactiver le rafraîchissement de l'écran
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

Bonjour,

Il est possible de contourner le problème de différentes façons:

  • tester si vlookup renvoie une erreur avec isError et un If avant de l'affecter à la variable, on doit aussi pouvoir utiliser isNumeric mais ça rentrerait en conflit avec le souci du séparateur décimal
  • utiliser on error pour gérer l'erreur, soit en allant à un endroit précis, soit en passant à la ligne suivante (goto ou resume next)

je préconise la première solution avec isError car elle est la plus adaptée ici.

Bonjour Ausecour,

Merci pour l'idée, j'ai codé ça et ça a fonctionné !

Bonne journée

 Dim debitd as Double

While newdate <= datefin
                ligne = ligne + 1

                If IsError(Application.VLookup(result.Cells(ligne, 1), wsdata.Range("A:F"), 6, False)) Then
                    result.Cells(ligne, 2) = 0
                Else
                    debitd = Application.VLookup(result.Cells(ligne, 1), wsdata.Range("A:F"), 6, False)
                    result.Cells(ligne, 2) = debitd
                End If

                newdate = newdate + 1 / 24 'pas de temps horraire
Wend
Rechercher des sujets similaires à "recherchev virgule point dimensions"