XL 2010 Imputbox qui ne fonctionne qu'a moitié

teddy33130

XLDnaute Nouveau
bonjour

dans cette sub l'imputbox s'ouvre et fonctionne tres bien

mais quand on veux quitter avant la fin ou cliquer sur la croix cela renvoie une erreur
VB:
Sub TotalisationCouleur1()
    Set Aselectionner = Application.InputBox _
    (prompt:="selectionner la plage de cellule ", _
     Title:=" Plage de cellules à sélectioner", Type:=8)
     Aselectionner.Select 'Selection de la plage souhaitée
     For Each Cel In Aselectionner
          If Cel.Interior.Color = RGB(255, 255, 255) Then Som = Som + Cel
     Next Cel
         MsgBox Som
End Sub
quelqu'un pourrait t'il voir cela

amicalement
 
Solution
Bonjour teddy33130, le forum

il faut gérer le cas ! et la sélection avant la boucle n'est pas utile !

Bien cordialement, @+
VB:
Sub TotalisationCouleur1()
    Dim Aselectionner
    On Error Resume Next
    Set Aselectionner = Application.InputBox _
    (prompt:="selectionner la plage de cellule ", _
     Title:=" Plage de cellules à sélectioner", Type:=8)
     If Aselectionner Is Nothing Then Exit Sub
     For Each Cel In Aselectionner
          If Cel.Interior.Color = RGB(255, 255, 255) Then Som = Som + Cel
     Next Cel
         MsgBox Som
End Sub

patricktoulon

XLDnaute Barbatruc
re
tiens tout a l'heure je parlais du strptr du return
ben voila
VB:
Sub testreturn()
    On Error Resume Next    'obligatioire  l'object inputbox ne gère pas l'erreur en amont
    Set Aselectionner = Application.InputBox _
                        (prompt:="selectionner la plage de cellule ", _
                         Title:=" Plage de cellules à sélectioner", Type:=8)
    
If StrPtr(Aselectionner) > 0 Then MsgBox "nada!!!": Exit Sub'toute les situation qui ne soit pas un return de l'object
    MsgBox Aselectionner.Address
End Sub
 

patricktoulon

XLDnaute Barbatruc
tiens @Yeahou la preuve a + b que le dim "as range est nécessaire sinon la réponse n'a aucun rapport avec un object range donc même le test is nothing serait caduque
test comme ca en annulant ou fermant la croix et refait le test en débloquant le dim
tu verra la réponse ne sera pas la même

VB:
Sub testreturn()
' Dim Aselectionner As Range
    On Error Resume Next    'obligatioire  l'object inputbox ne gère pas l'erreur en amont
    Set Aselectionner = Application.InputBox _
                        (prompt:="selectionner la plage de cellule ", _
                         Title:=" Plage de cellules à sélectioner", Type:=8)
    MsgBox TypeName(Aselectionner)
    If StrPtr(Aselectionner) > 0 Then MsgBox "nada!!!": Exit Sub
    MsgBox Aselectionner.Address
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
un variant() ne peut qu'etre un tableau(array 1 dim ou x dim)
désolé de ne pas être d'accord avec toi, je préfère la définition officielle

Le type de données Variant est le type de données de toutes les variables qui ne sont pas explicitement déclarées d'un autre type (au moyen d'instructions telles que Dim, Private, Public ou Static ).
Le type de données Variant n'a pas de caractère de déclaration de type.
Variant est un type de données spécial qui peut contenir n’importe quel type de données à l’exception des données String de longueur fixe
Un type Variant peut également contenir les valeurs spéciales Empty, Error, Nothing et Null. Vous pouvez déterminer le mode de traitement des données dans un Variant à l’aide des fonctions VarType ou TypeName.
 

patricktoulon

XLDnaute Barbatruc
teste le #18 avec et sans dim tu verra bien ;)

si tu savais le nombre de fois ou quand je développe une app sans déclaration ou j'ai galéré avec des returns incohérents selon telle ou telle situation 🤪 🤣 🤯

ce que tu peut retenir de sur c'est le strptr(tavariable) qui est TOUJOURS AU DESSUS DE ZERO si erreur,annulation ou problème quelconque

il n'est pas raisonnable de se servir de la réponse"Empty" pour tester un" is nothing" c'est pas propre
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
c'est la largesse de vba autorisant des petites bévues comme celle ci
mais attention dans certains cas empty ne peut pas remplacer nothing
c'est pour cela qu'il faut dimer ta variable dans le bon type des le départ si tu veux effectuer un test nothing

nothing c'est nothing(object)
empty c'est vide

après perso comme je l'ai montré le test strptr résout tout les problème
et heureusement qu'on l'a lui parce que des fois c'est complexe sur certains dialog
1617641753306.png
 
Dernière édition:

Statistiques des forums

Discussions
312 115
Messages
2 085 455
Membres
102 891
dernier inscrit
cocowild