Signaler

[Excel]Problème condition [Résolu]

Posez votre question Pelur 17Messages postés dimanche 28 avril 2013Date d'inscription 6 septembre 2017 Dernière intervention - Dernière réponse le 6 sept. 2017 à 08:14 par Pelur
Bonjour,

Je réalise actuellement un livret de fête pour l'organisation d'une manifestation.

Afin de m'aider dans la gestion de mes annonceurs j'ai réalisé une macro qui trie mes sponsors et me collecte des informations.

la macro marche plutôt bien sauf dans le cas où un sponsors souhaite prendre différentes offres que nous proposons.

Par exemple un annonceur prend un place dans le livret de fête et veut placer une bâche publicitaire sur la place de fête, les infos seront bien collectées pour le livret de fête mais pas pour la bâche... si je supprime les infos pour le livret de fête il prendra bien les infos de la bâche.

J'ai essayé de trouver une solution un lisant des forums, mais je ne trouve pas ma réponse...

Je ne sais pas si le problème viens de mes If ou de mes InStr

Voici un extrait de mon code que j'ai essayé de commenter au mieux.

If Cells(m, 2).Interior.ColorIndex = Codecouleur Then 'si la cells est colorée il y a un sponsor
            
            If n = 2 Then 'la cells est verte donc c'est un sponsor qui a signé le contrat
        
                vert = vert + 1 'compte le nombre de sponsor avec contrat
                
                sponsor = 1 'pour le sub resum définit sur quelle feuille du classeur on travail
                
                If InStr(1, Cells(m, 6), "1/8") > 0 Then 'cherche dans la cells si le text "1/8" apparaît
                
                    a = a + 1 'compte les 1/8
                    recup = "'1/8" 'récupère le string "'1/8" et le réutilise dans le sub resum
                    resum ' appel le sub resum
                    
                ElseIf InStr(1, Cells(m, 6), "1/4") > 0 Then 'idem mais avec 1/4
                
                    b = b + 1
                    recup = "'1/4"
                    resum
                   
                ElseIf InStr(1, Cells(m, 6), "1/2") > 0 Then 'idem mais avec 1/2
                
                    c = c + 1
                    recup = "'1/2"
                    resum
                    
                ElseIf InStr(1, Cells(m, 6), "1/1") > 0 Then 'idem mais avec 1/1
                
                    d = d + 1
                    recup = "'1/1"
                    resum
                               
                End If 'fin de la recherche pour les tailles d'annonces
                
                sponsor = 2 'pour le sub resum définit sur quelle feuille du classeur on travail
                    
                If InStr(1, Cells(m, 6), "table") > 0 Then ' cherche la mot table
                    
                    stable = stable + 1 'compte les annonce pour les sets de table
                    recup = 1 ' récupère la valeur 1 pour le sub résum
                    resum 'appel le sub resum
                    
                End If 'fin de la recherche
                
                 sponsor = 3 'pour résumé T-shirt
                                  
                If InStr(1, Cells(m, 6), "shirt") > 0 Then
                    
                    shirt = shirt + 1
                    recup = 1
                    resum
                    
                End If
                
                 sponsor = 4 'pour résumé Coupes
                                  
                If InStr(1, Cells(m, 6), "coupe") > 0 Then
                
                    coupe = coupe
                    recup = 1
                    resum
                    
                End If
                                   
                sponsor = 5 'pour résumé bâches
                                  
                If InStr(1, Cells(m, 6), "bâche") > 0 Then
                
                    bache = bache + 1
                    recup = 1
                    resum
                    
                End If
                
                sponsor = 6 'pour résumé formule gros sponsors
                    
                If InStr(1, Cells(m, 6), "formule") > 0 Then
                
                    recup = ""
                    resum
                    
                End If
                                                                   
            ElseIf n = 3 Then ' sponsor jaune (sponsor en attente de réponse)


Peut-être que le sub resum pour vous être utile donc le voici. Désolé pas de commentaire sur ce code, mais le but de ce sub est de sélectionner la feuille sur laquelle on travail et vérifie si le sponsor existe déjà ou si il doit être ajouté à la suite des existants. Ce sub semble bien marché:

Sub resum()

contr = 0
g = 2
gcontrol = 2

Sheets("Copie liste").Select

h = Cells(m, 2)

If sponsor = 1 Then

Sheets("Livret de fête").Select

ElseIf sponsor = 2 Then

Sheets("Sets de tables").Select

ElseIf sponsor = 3 Then

Sheets("T-Shirt").Select

ElseIf sponsor = 4 Then

Sheets("Coupe").Select

ElseIf sponsor = 5 Then

Sheets("Bâches").Select

ElseIf sponsor = 6 Then

Sheets("Formules").Select

ElseIf sponsor = 7 Then

Sheets("Dons").Select

End If


While Cells(g, 2) <> ""

    If Cells(g, 2) = h Then
    
        contr = 1
        gcontrol = g
    End If
    
    g = g + 1
    
Wend

If contr = 0 Then

    Cells(g, 2) = "='Copie liste'!B" & m & ""
    Cells(g, 3) = "='Copie liste'!F" & m & ""
    Cells(g, 4) = recup
    
ElseIf contr = 1 Then
    
    Cells(gcontrol, 2) = "='Copie liste'!B" & m & ""
    Cells(gcontrol, 3) = "='Copie liste'!F" & m & ""
    Cells(g, 4) = recup
    
End If
 
End Sub


J'espère que quelqu'un aura une petite idée sur mon problème.

P.S.
Désolé si mon code vous semble lourd et pas optimisé, mes bases en VBA sont pas extra, l'informatique n'étant pas ma profession j'ai appris sur le tas... ^^'
Utile
+1
plus moins
bonsoir, je pense à deux options:
1) soit tu partages ton fichier,
2) soit (et je pense préférable), tu exécutes ton code en mode pas à pas, et tu vas découvrir à quel moment ton code ne fais pas ce que tu imagines. ensuite, si nécessaire, tu nous expliques ton soucis à propos d'une instruction précise.
Pelur 17Messages postés dimanche 28 avril 2013Date d'inscription 6 septembre 2017 Dernière intervention - 5 sept. 2017 à 10:07
Merci beaucoup yg_be ton commentaire m'a été fort utile.

Grâce à toi j'ai découvert la fonction pas à pas et par conséquent mon problème dans le code.

A la fin de mon sub resum, je ne reprenais pas la selection de ma feuille "copie liste"...

Maintenant que cela est corrigé le code fonctionne très bien.
Répondre
yg_be 3384Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 23 septembre 2017 Dernière intervention - 5 sept. 2017 à 10:24
parfait, peux-tu alors marquer le sujet comme résolu?
Répondre
françois Pelur - 5 sept. 2017 à 12:39
 
@Pelur

Si tu as téléchargé mon fichier, la feuille était vide et il y avait bien un code VBA ;
il te suffisait de faire Alt F11 pour le voir ; c'était une très grosse optimisation
de ton propre code VBA (qui lui est bien trop long pour ce que tu veux faire !).

http://www.commentcamarche.net/forum/affich-34845165-excel-probleme-condition#2
 
Répondre
Pelur 17Messages postés dimanche 28 avril 2013Date d'inscription 6 septembre 2017 Dernière intervention - 5 sept. 2017 à 12:43
Je comptais y jetter un oeil ce soir après le boulot.
J'ai juste eu le temps durant ma pause ce matin de tester le mode pas à pas.

Je me rejouis de voir ce que tu me propose.
Répondre
Pelur 17Messages postés dimanche 28 avril 2013Date d'inscription 6 septembre 2017 Dernière intervention françois - 6 sept. 2017 à 08:14
Merci pour ta proposition d'optimisation du code.
Je ne vais pas la reprendre tel quel mais m'en inspirer fortement.

Merci et bonne fin de semaine
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour Pelur,

Fichier Excel 2007 : https://mon-partage.fr/f/5WeXjv1Q/

Alt F11 pour voir le code VBA, puis revenir sur Excel

Merci de me donner ton avis.

Cordialement
 
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Si j'ai soumis mon problème de cette façon, c'est que je pensais que mon problème vennait d'une grosse erreur dans le code et que celle-ci sauterait au yeux des plus connaisseur que moi.

Le problème est apparemment plus complexe.

Voa commentaires ne sont cependant pas inutile, j'apprend en effet grâce à vous qu'il existe un mode pas à pas.

Je vais regarder tout ça après le boulot et je vous tiendrais informé.

Merci déjà pour votre temps
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !