Pb (VBA) InputBox et echec Range

Fermé
by - 8 juil. 2011 à 11:25
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 8 juil. 2011 à 12:16
Bonjour,

J'essaie d'améliorer mon code servant au calcul de délai en utilisant la fonction InputBox, mais qd je le lance, on m'affiche à chaque fois un msg d'erreur disant que la méthode range a échoué, plusieurs en parle, ms aucune solution proposée ne règle mon pb

Sub CalculDelai()
'Auteur: Bahia YOUSFI
'Caluler le temps écoulé entre la date de demande et la date de réalisation

Dim i As Long
Dim L1 As Long
Dim L2 As Long
Dim L3 As Long
Dim DateDemande As Date
Dim DebutRealisation As Date

L1 = InputBox("Quelle colonne contient les dates de demande?")
L2 = InputBox("Quelle colonne contient les dates de début de réalisation?")
L3 = InputBox("Dans quelle colonne voulez-vous stocker les résultats?")

For i = 2 To Range("A65536").End(xlUp).Row Step 1

DateDemande = Range("L1" & i).Value
DebutRealisation = Range("L2" & i).Value
Range("L3" & i).FormulaLocal = DateDiff("h", DateDemande, DebutRealisation, vbMonday, vbFirstJan1)

Next i


End Sub

Cordialement

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 8/07/2011 à 11:35
Bonjour,
Ca peux, peut être provenir d'un problème de type de variable. vous entrez des chiffres ou des lettres dans vos inputbox?

Des chiffres, attention car inputbox renvoie des chaines de caractères (string) et pas des nombres (long)...
Des lettres, alors attention à ne pas déclarer vos Inputbox L1 Long (nombres!!!)...

Ensuite, L1, L2, L3 sont des variables, donc lors de leur utilisation dans "Range(L1 & i) il convient de ne pas mettre de guillemets ""...

Ceci devrait fonctionner, en entrant des lettres dans vos inputbox. Exemple : a pour colonne 1, Z pour colonne 26...

Sub CalculDelai()  
'Auteur: Bahia YOUSFI  
'Caluler le temps écoulé entre la date de demande et la date de réalisation  

Dim i As Long  
Dim L1 As String, L2 As String, L3 As String  
Dim DateDemande As Date 
Dim DebutRealisation As Date  

L1 = UCase(InputBox("Quelle colonne contient les dates de demande?")) 
L2 = UCase(InputBox("Quelle colonne contient les dates de début de réalisation?")) 
L3 = UCase(InputBox("Dans quelle colonne voulez-vous stocker les résultats?")) 

For i = 2 To Range("A65536").End(xlUp).Row Step 1  
    DateDemande = Range(L1 & i).Value  
    DebutRealisation = Range(L2 & i).Value  
    Range(L3 & i).FormulaLocal = DateDiff("h", DateDemande, DebutRealisation, vbMonday, vbFirstJan1)  
Next i  
End Sub 


Cordialement,
Franck P
0
J'ai essayé avec les 2 et ça n'a pas marché :S
J'ai même essayé d'entrer la lettre saractérisant la colonne entre guillemetz et ça ne marche pas
0
Le pb vient nécessairement de mon utilisation sûrement erronée de InputBox parce que ce morceau de code lui marche parfaitement


Sub Delai()

Dim i As Long
Dim DateDemande As Date
Dim DebutRealisation As Date

For i = 2 To Range("A65536").End(xlUp).Row

DateDemande = Range("L" & i).Value
DebutRealisation = Range("BO" & i).Value
Range("BQ" & i).FormulaLocal = DateDiff("h", DateDemande, DebutRealisation, vbMonday, vbFirstJan1)


Next i

End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 juil. 2011 à 12:16
Essaye ce test, en entrant des lettres (A, B, C ou L ou BO, comme tu veux...) dans les inputbox :
Sub Test()
Dim i As Long
Dim L1 As String, L2 As String, L3 As String

L1 = UCase(InputBox("Quelle colonne contient les dates de demande?"))
L2 = UCase(InputBox("Quelle colonne contient les dates de début de réalisation?"))
L3 = UCase(InputBox("Dans quelle colonne voulez-vous stocker les résultats?"))

For i = 2 To 5 Step 1
    Range(L1 & i).Select
    MsgBox Range(L1 & i).Address & " contient " & Range(L1 & i).Value
    Range(L2 & i).Select
    MsgBox Range(L2 & i).Address & " contient " & Range(L2 & i).Value
    Range(L3 & i).Select
    MsgBox Range(L3 & i).Address & " contient " & Range(L3 & i).Value
Next i
End Sub
0