Condition qui s'exécute même fausse

dmoluc

XLDnaute Occasionnel
Re bonjour à tous

J'ai une condition que je répète une bonne vingtaine de fois et qui ne fonctionne pas :

Dim A
Code:
A = ListBox11.Value
If Range("A45:A39").Find(A, LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then
Range("A45").End(xlUp).Offset(1, 0) = A

Le code s'exécute même si première condition est fausse, j'ai essayé tout un tas de syntaxe et rien n'y fait.
Je pense que le problème vient des ListBox car si je fais un test dans un module les conditions fonctionnent parfaitement.

Code:
A ="Essais"
If Range("A45:A39").Find(A, LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then
Range("A45").End(xlUp).Offset(1, 0) = A

Encore mes maigres connaissances qui me jouent un tour ou est-ce un mystère de l'informatique :rolleyes:

Je joint le lien du fichier et J'explique un peu car ça commence à être une vraie usine à gaz :( : Le problème est dans l'UserForm5, onglet déboursé pour la tâche, Bouton renseigner le planing. L'userform s'appel depuis la feuille Programme des travaux avec le bouton Rendement et sous détail

http://cjoint.com/?3Hmqo4gWdff

Merci pour votre aide toujours précieuse

Didier
 

Bebere

XLDnaute Barbatruc
Re : Condition qui s'exécute même fausse

dmoluc
le fichier en version 2003 ne me sert à rien ,donne erreur sur objets
tu fais des opérations avec des textbox sans employer cdbl
tu peux aussi écrire textbox1*1(le texte de la textbox devient un nombre)
tu peux écrire le code comme suit
Code:
    If Me.OptionButton1 = True Then

        If Me.ToggleButton1 = True Then
            TextBox83.Value = TextBox20.Value
            TextBox82Value = ListeBox2Imputation.ListIndex
            TextBox85.Value = (CDbl(TextBox17.Value) * CDbl(TextBox80.Value))
        Else 'Me.ToggleButton1 = false
            TextBox83.Value = TextBox20.Value
            TextBox82Value = ListeBox2Imputation.ListIndex
            TextBox85.Value = (CDbl(TextBox18.Value) * CDbl(TextBox80.Value))
        End If

    End If

    If Me.OptionButton2 = True Then

        If Me.ToggleButton1 = True Then
            TextBox83.Value = TextBox19.Value
            TextBox82Value = ListeBox2Imputation.ListIndex
            TextBox85 = (CDbl(TextBox16.Value) * CDbl(TextBox80.Value))
        Else 'Me.ToggleButton2 = false
            TextBox83.Value = TextBox19.Value
            TextBox82Value = ListeBox2Imputation.ListIndex
            TextBox85.Value = (CDbl(TextBox12.Value) * CDbl(TextBox80.Value))
        End If

    End If
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Le gros problème est qu'il est absolument impossible de supprimer la moindre ligne de la procédure, j'ai même essayer de la supprimer complètement, rien à faire aprés impossible de lancer l'UserForm :(
Pour les textbox je ne sais pas si j'ai bien compris ; c'est du text qu'il y a dedans mais il se converti automatiquement en nombre avec les opérateur *, / et - mais pas avec + car le plus sert à concaténer les chaines de caractère, donc avec une addition il faut convertir avec CDbl pour passer en variable double ou autre variante que je n'ai pas retenue.

Encore un grand merci pour ta version de la procédure bien plus courte que la mienne, maintenant il ne me reste plus qu'à trouver comment l'insérée sans tout faire planter et c'est pas gagné :(

Cordialement

Didier
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Bonjour à tous,

Finalement je suis arrivé a lancer l'userForm ! Il ne s'ouvre pas si l'onglet transport est sélectionné pourtant le code de cette page fonctionne bien. Est-il-possible d'obliger l'ouverture de l'UserForm sur la page "Déboursé pour la tâche" ? cela éviterait bien des problèmes

Cordialement

Didier
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Bonjour Bebere

encore merci pour cette info : j'était partit sans succès bien sur avec
UserForm5("Déboursé pour la tâche").Show :rolleyes:
Cette fois-ci je tiens le bon bout ; il y a encore pas mal de travail mais cela reste de la mise au point et j'espère que ça va aller....

A +
Cordialement
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Encore un petit soucis,

J'ai essayer de compiler les codes à Bebere pour faire une boucle sur les ListBox afin de racourcir énormément le code, mais impossible d'y arriver :(

pour la première boucle i est égal à 17 alors qu'il ne devrait pas dépasser 16 et bien sur A est vide
Sans doute encore quelque chose que je n'ai pas compris, merci pour votre aide car j'en ai bien besoin
Code:
Dim A
Dim M
Dim F

For i = 11 To 16
       A.Value = Me("ListBox" & i).List
    Next
If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
Range("A45").End(xlUp).Offset(1, 0) = A
End If

For i = 27 To 34
       M = Me("ListBox" & i).List
    Next
If Application.CountIf(Range("A49:A83"), "=" & M) = 0 Then
Range("A45").End(xlUp).Offset(1, 0) = M
End If

For i = 17 To 26
       F = Me("ListBox" & i).List
    Next
If Application.CountIf(Range("A86:A128"), "=" & F) = 0 Then
Range("A128").End(xlUp).Offset(1, 0) = F
End If

A+
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

En fait je n'avais pas mis le Next au bon endroit mais je n'arrive pas à récupérer le texte de la listbox pour incrémenter A

For i = 11 To 16
A = Me("ListBox" & i).List
If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
Range("A45").End(xlUp).Offset(1, 0) = A
End If
Next

Cela me met A = Vide

Comment faut-il faire pour récupérer le texte de la listbox ?

Merci pour votre aide

Cordialement

Didier
 

Bebere

XLDnaute Barbatruc
Re : Condition qui s'exécute même fausse

dmoluc
une petite recherche sur le forum et tu auras réponse à tes questions
un exemple
Code:
    For i = 0 To ListBox11.ListCount - 1
        A = ListBox11.List(i)
        If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
            Range("A45").End(xlUp).Offset(1, 0) = A
        End If
    Next
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Je viens de faire pas mal de recherche sur les listes box, sans trouver ce que je voulais. Le code ci-dessus est super pour vider le contenu complet desw listes box, mais hélas ma feuille n'est pas asse grande pour ce genre d’opération; Ce que j'aurais voulu c'est passer en revue mes listbox et écrire sur la feuille la valeur sélectionnée si elle n'est pas déjà écrite. La condition Contif fonctionne trés bien pour ça ; la boucle sur les listbox fonctionne aussi trés bien, le problème est que je ne peux pas récupérer la valeur sélectionnée dans les listBox.

For i = 11 To 16
A = Me("ListBox" & i).List A = Vide

Je vais fouiner un peu plus mais les posts la dessus n'ont pas l'air d'être légion

Encore merci pour Ton aide
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Avec ce code je récupère bien le texte des ListBox

For i = 11 To 16
A = Me("ListBox" & i).Text
If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
Range("A45").End(xlUp).Offset(1, 0) = A
End If
Next

Maintenant le problème est que la boucle ne s'arrête pas à la ListBox16 et me passe toutes les ListBox en revue et bien sur les inscrits toutes sur la plage de cellule A39:A45

Quel est dont ce nouveau mystère ?
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

J'ai encore Bricoler un peu, voilà la boucle qui fonctionne bien

i = 10
Do
i = i + 1
If i <= 16 Then
A = Me("ListBox" & i).Text
If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
Range("A45").End(xlUp).Offset(1, 0) = A
End If
End If
Loop

Le problème est qu'il n'y a que celle là qui fonctionne les 2 autres, pourtant identiques font planter excel et n'inscrivent rien sur la feuille


i = 26
Do
i = i + 1
If i >= 27 And i <= 34 Then
M = Me("ListBox" & i).Text
If Application.CountIf(Range("A49:A83"), "=" & M) = 0 Then
Range("A45").End(xlUp).Offset(1, 0) = M
End If
End If
Loop

i = 16
Do
i = i + 1
If i >= 17 And i <= 26 Then
F = Me("ListBox" & i).Text
If Application.CountIf(Range("A86:A128"), "=" & F) = 0 Then
Range("A128").End(xlUp).Offset(1, 0) = F
End If
End If
Loop

Elle tournent en boucle et les conditions ne les arrêtent pas, pourtant je ne vois pas ce qui cloche ?
 

Bebere

XLDnaute Barbatruc
Re : Condition qui s'exécute même fausse

dmoluc
ce code devrait te convenir

Code:
Sub x()

    For i = 11 To 34
        Select Case i
        Case 11 To 16
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A39:A45"), "=" & A) = 0 Then
                Range("A45").End(xlUp).Offset(1, 0) = A
            End If

        Case 17 To 26
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A49:A83"), "=" & A) = 0 Then
                Range("A49").End(xlUp).Offset(1, 0) = A
            End If

        Case 27 To 34
            A = Me("ListBox" & i).Text
            If Application.CountIf(Range("A86:A128"), "=" & A) = 0 Then
                Range("A86").End(xlUp).Offset(1, 0) = A
            End If

        End Select
    Next i

End Sub
 

dmoluc

XLDnaute Occasionnel
Re : Condition qui s'exécute même fausse

Merci Bebere pour le code, au moin celui-ne bloque pas excel. Il va falloir que j'étudie cette histoire de "case"
Hélas comme avec mon bricolage, seul la première boucle fonctionne, les listbox de 17 à 26 et de 27 à 34 ne sont pas inscrite sur la feuille. Pourquoi cela fonctionne une fois et qu'il est impossible de répéter l’opération strictement identique mise à par les plages de cellules que j'ai d’ailleurs vérifier.

Merci encore pour la peine que tu te donne, moi parfois comme aujourd'hui aprés une journée passé sur le même problème sans succès me donne envie de baisser les bras, mais bon il n'y a pas de raison que cela ne fonctionne pas d'une façon ou d'une autre

Encore merci et A+
 

Discussions similaires

Réponses
2
Affichages
156

Statistiques des forums

Discussions
312 331
Messages
2 087 352
Membres
103 526
dernier inscrit
HEC