IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Quelle structure de code adopter pour cet exercice?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Points : 68
    Points
    68
    Par défaut Quelle structure de code adopter pour cet exercice?
    Bonjour,

    Je développe une petite appli pour mon atelier, cette dernière est censée remplacer un classeur physique des interventions de maintenance..

    Bref, je cherche à écrire un programme qui pourrait résoudre ce problème (il parait qu'une image vaut mille mots) :

    exemple 1 :
    Nom : exe1.JPG
Affichages : 320
Taille : 35,0 Ko

    exemple 2 :
    Nom : exe2.JPG
Affichages : 294
Taille : 35,4 Ko

    En gros s'il y a une couleur qui vire au boom, elle vire au boom dans tout le tableau.

    J'ai l'habitude de travailler avec des conditions (if, elseif, else) et non avec des boucles, mais là je crois que je n'ai plus le choix de m'y mettre..
      0  1

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Le plus simple est de mettre dans un coin un tableau de correspondance entre couleurs et réaction.

    Dans ton tableau principal, tu mets un RECHERCHEV dans la colonne réaction qui va chercher dans le tableau de correspondance la réaction en fonction de la couleur de la ligne.
    Les avantages de cette solution c'est que le résultat est dynamique et rapide et que tu n'as pas à créer de code VBA.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
      2  0

  3. #3
    Membre du Club Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Points : 68
    Points
    68
    Par défaut
    Bonjour Menhir et merci pour ta réponse,

    Malheureusement je ne peux pas vraiment insérer de formule dans mon cas puisque chaque ligne est généré par un userform. Je joins une capture de mon vrai classeur :

    Nom : Capture1222okk.jpg
Affichages : 339
Taille : 138,0 Ko

    Enfaîte je tiens vraiment à avoir un bouton macro ou "private sub" qui, dès que je l'execute, et pour le cas ci-dessus, remplacerait les "En-Cours" encadrés en rouge par des "Soldé".
      0  0

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub test()
    dim dico as object,plage as range,cel as range,tablo,i&
    Set dico = CreateObject("scripting.dictionary")
        Set plage = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
     
        For Each cel In plage.Cells
            If Not dico.exists(cel.Value) Then dico.Add (cel.Value), cel.Offset(0, 1)
            If dico(cel.Value) <> "Boom" Then dico(cel.Value) = cel.Offset(0, 1) Else dico(cel.Value) = dico(cel.Value)
        Next
     
        tablo = plage.Resize(plage.Rows.Count, 2).Value
     
        For i = 1 To UBound(tablo)
            tablo(i, 2) = dico(tablo(i, 1))
        Next
     
        Cells(1, 4).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    End Sub
    Nom : Capture.JPG
Affichages : 271
Taille : 40,3 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

  5. #5
    Membre du Club Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Points : 68
    Points
    68
    Par défaut Wouah
    Bonjour Patrick,

    C'est de la sorcellerie ça ! Je ne comprends pas vraiment comment ça fonctionne mais ça fonctionne

    Comment procéder pour changer la colonne B en colonne H? J'ai essayé ce qui suit mais ça copie la colonne A en G (j'aimerais qu'elle reste à sa place) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub test()
    Dim dico As Object, plage As Range, cel As Range, tablo, i& 'tablo et i& sont dimensionnés comme quoi?
    Set dico = CreateObject("scripting.dictionary")
        Set plage = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
     
        For Each cel In plage.Cells
            If Not dico.exists(cel.Value) Then dico.Add (cel.Value), cel.Offset(0, 1)
            If dico(cel.Value) <> "Boom" Then dico(cel.Value) = cel.Offset(0, 7) Else dico(cel.Value) = dico(cel.Value)
        Next
     
        tablo = plage.Resize(plage.Rows.Count, 2).Value
     
        For i = 1 To UBound(tablo)
            tablo(i, 2) = dico(tablo(i, 1))
        Next
     
        Cells(1, 7).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    End Sub
    Un grand merci à vous en tout cas, je suis épaté!
      0  0

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    bonjour

    je pencherai pour modifier la valeur de tes valeurs en rouge 8 versus 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
       tablo = plage.Resize(plage.Rows.Count, 2).Value
     
        For i = 1 To UBound(tablo)
            tablo(i, 2) = dico(tablo(i, 1))
        Next
     
        Cells(1, 7).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    patrick tu confirmes ou je dit n'importe quoi
      0  0

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut.

    Sans critiquer la solution de Patrick, je ne comprends pas la règle qui fait que l'on prend la ligne 6 "Bleu-Boom" et pas la ligne 10 "Bleu-Cool" qui change par rapport à la 6. De plus, ici, tu as Cool ou Boom (nulle part tu ne dis qu'il n'y a que deux variantes). Si en 1 tu as "Bleu - Cool", en 6 "Bleu - Boom" et en 10 "Bleu - Psshht", tu fais quoi? Et si ton tableau est retrié, quelle sera la solution à prendre en compte?

    Assure-toi que tous tes cas ont bien été envisagés. Pour moi, il y a un problème de conception à la base, et un problème dans l'expression du besoin. Je suis loin d'être persuadé que la solution proposée va fonctionner dans tous les cas de figure.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      2  0

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je vais à mille pour cent dans le sens de ce que Pierre Fauconnier fait observer là.
    Il est pour moi également très clair que le problème est, dans le meilleur des cas, très mal ou incomplètement exposé.
    (garder à l'esprit qu'il est pour le moins essentiel de préciser ce qui, quand et comment doit déclencher quoi).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
      1  0

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par anarchiste-mouton Voir le message
    Bonjour Patrick,

    C'est de la sorcellerie ça ! Je ne comprends pas vraiment comment ça fonctionne mais ça fonctionne

    Comment procéder pour changer la colonne B en colonne H? J'ai essayé ce qui suit mais ça copie la colonne A en G (j'aimerais qu'elle reste à sa place) :
    non ca n'a rien de sorcier
    tout se decide en fait dans les 2 lignes "IF"
    For Each cel In plage.Cells 'on tourne sur toute les cellules de la colonne "A"

    'si la couleur n'est pas dans le dictionnaire on l'ajoute et on lui met comme item la cellule d'a coté en "B" donc offset(0,1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not dico.exists(cel.Value) Then dico.Add (cel.Value), cel.Offset(0, 1)
    ' a partir de la on est sur d'avoir la couleur dans le dico


    'c'est ici que cool/boom se fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If dico(cel.Value) <> "Boom" Then dico(cel.Value) = cel.Offset(0, 1) Else dico(cel.Value) = dico(cel.Value)
    traduction en francais pour que tu comprenne
    si l'element(cel.value)est different de "boom" alors l'element(cel.Value) = cel.Offset(0, 1) autrement l'element(cel.Value) = lui meme

    autrement dit je change la valeur d'un element uniquement si il est different de "boom" quitte a remetre le meme par cel.offset(0,1)
    ce qui fait que dans le dico des qu'une couleur aura "boom" on peut plus la changer

    Next' fin de boucle sur les cellule de la colonne"A"

    Comment procéder pour changer la colonne B en colonne H?
    ca devrait te piquer les yeux si je prend offset(0,1) pour prendre la colonne"B" combien faut il a ton avis a la place du 1 pour chopper la colonne"H"


    apres comme te l'ont dis les autres membres tu n'a peut etre pas tout exposé et donc passer a coté de methode plus simples plus maleables en fonction de tes besoins

    perso je t'ai repondu et donné une methode parmis tant d'autre en fonction de ta demande (precisé par capture)

    @pierre
    je ne comprends pas la règle qui fait que l'on prend la ligne 6 "Bleu-Boom" et pas la ligne 10 "Bleu-Cool" qui change par rapport à la 6
    reponse dans son post initial
    En gros s'il y a une couleur qui vire au boom, elle vire au boom dans tout le tableau.
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Merci Patrick, je sais lire

    @Anarchiste-Mouton:

    Je maintiens qu'il y a un problème de conception et d'expression du besoin. Tant mieux si pour l'instant, ça fonctionne. Dans x temps, quand ça ne fonctionnera plus, faire marche arrière et repartir du bon pied coûtera beaucoup plus cher (et il est inévitable que ce cas apparaisse tôt ou tard ). J'ai suffisamment travaillé sur la gestion des risques en ISO pour savoir que l'approche est mauvaise et que cette gestion du risque impose une approche rigoureuse qui n'est pas rencontrée ici (cfr ma signature pour le ton de la réponse )

    Je passe évidemment sur le fait que si on insère une colonne avant la colonne H, ça risque d'être rigolo. Mauvaise approche (ce n'est pas un reproche, chacun son boulot), et donc, forcément, mauvaise réponse, car bien avant la réponse purement technique donnée par Patrick qui fonctionne dans ce cas-ci (que tu as déjà des difficultés à adapter à ta situation réelle notamment par rapport aux colonnes, mais aussi parce que dans ton tableau, je ne vois pas de "cool" et de "boom", hardcodés en plus dans la réponse qui t'est donnée, mais des "en cours" et "soldé") mais qui, je le répète, foirera tôt ou tard, crois-en mon expérience, il y a une étude à réaliser sur les moyens à mettre en oeuvre pour arriver au résultat souhaité. Et en matière de risques, je doute que l'on ait droit à l'erreur.

    Et je le répète, car certains ont des difficultés à le comprendre, il n'y a aucune attaque personnelle envers qui ce soit. Je critique uniquement la conception et la solution parce qu'elles sont toutes les deux techniquement critiquables.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par munity Voir le message
    bonjour

    je pencherai pour modifier la valeur de tes valeurs en rouge 8 versus 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
       tablo = plage.Resize(plage.Rows.Count, 2).Value
     
        For i = 1 To UBound(tablo)
            tablo(i, 2) = dico(tablo(i, 1))
        Next
     
        Cells(1, 7).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    patrick tu confirmes ou je dit n'importe quoi
    ben je sais pas trop j'aurais tendance a dire n'importe quoi en effet

    pour info lire les commentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tablo = plage.Resize(plage.Rows.Count, 2).Value '  le 2 concerne le resize de la dimention 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tablo(i, 2) = dico(tablo(i, 1))' le 2 concerne la colonne 2 explicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(1, 7).Resize(UBound(tablo), UBound(tablo, 2)) = tablo ' le 2 concerne le resize de la dimention2 de la cells
    la dimention 2 d'un tableau n'est pas forcement la colonne 2
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    redim tablo(1 to 10, 1 to 5)
    msgbox ubound(tablo,2)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      2  1

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    ok la prochaine fois je reste dans ma grotte
    merci pour l'information
    le pire c'est que j'avais pensé au offset mais laissé tombé car paraissait trop évident à modifier
      0  0

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    quand la mecanique est simple elle est facile a modifier
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      2  1

  14. #14
    Membre du Club Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Points : 68
    Points
    68
    Par défaut Réponse à Tous
    Bonjour,

    Déjà je voulais vous remercier tous les 3 pour faire avancer mon problème vers une résolution

    Pour moi, il y a un problème de conception à la base, et un problème dans l'expression du besoin.
    Il est vrai je ne me suis pas penché à analyser les risques et le besoin de ce petit projet, je n'ai pas fait non plus de planning.. :
    • D'abord parce que c'est un petit projet, je le fait par initiative et principalement sur mon temps libre. Le besoin a vaguement été évoqué par un collègue qui a dit (en gros) : "Un cahier numérique où l'on retrouverait les interventions de maintenance pour une zone géographique donnée, ça serait top".

    • Ensuite parce que je ne connais pas le processus pour développer correctement. Je préfère avancer à taton pour ne pas me décourager; petit pas par petit pas en testant sans arrêt.

    A moins que vous évoquez le problème de mon besoin sur ce forum?
    Dans ce cas je m'excuse, il est vrai que j'ai entamé la discussion un peu à la vas-vite.

    Dans un soucis de clarté je vais donc m'inspirer de ce qu'a dit unparia pour le ré-exprimer au mieux :

    (garder à l'esprit qu'il est pour le moins essentiel de préciser ce qui, quand et comment doit déclencher quoi)


    Qui déclenche cette macro?

    Les utilisateurs de cette application seront des techniciens de maintenance. Voici une capture de l'interface qu'ils verront au démarrage du fichier (mis à disposition sur un seul et unique ordinateur) :
    Nom : vfevgfreg.jpg
Affichages : 216
Taille : 52,1 Ko



    Quand se déclenche cette macro ?

    La macro que je souhaites est censée se déclencher à chaque fois qu'une nouvelle ligne est ajoutée dans la base de donnée. C'est à dire après création ou édition de ticket.



    Comment se déclenche cette macro ?

    Sur le 3ème post de cette discussion, j'ai montré une capture de ma base de données. Toute modification dessus se fait en arrière plan, l'utilisateur ne verra pas cet onglet. Enfaite je lui bloque tous les accès et lui offre seulement une console pour qu'il voit les résultats et quelques d'userforms pour lui permettre de MAJ/naviguer.



    Petite précision

    Chaque intervention de la maintenance est censé représenter une nouvelle ligne dans la BDD. Imaginons un problème de tension sur un convoyeur, à chaque fois qu'il y a une nouvelle chose de faite pour résoudre ce problème (appelons ça "tentative"), l'utilisateur va renseigner ce qu'il a fait en utilisant MAJ Ticket.
    Pour ce faire on lui demande dabord de renseigner le numéro de l'intervention initiale. (Il fera pareil pour Solder le Ticket).
    Nom : gtrbgtr.jpg
Affichages : 218
Taille : 16,4 Ko
    En gros :
    1 intervention = 1 ligne dans la BDD
    1 problème = 1 numéro (colonne A)




    "Mais qu'est-ce qu'il veux alors..."

    Et bien j'aimerais éviter que lorsque l'utilisateur consulte les en-cours, n'apparaisse sur sa console "les tentatives" de tickets soldés.



    Enfaite patricktoulon à presque résolu le problème :


    Il me faut juste modifier son code de tel sorte que les "couleurs" ne soient pas copiées (ou en colonne A éventuellement). Malheureusement là encore je bloque... Autant le dictionnaire j'ai compris mais les tableaux j'ai du mal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub test()
    dim dico as object,plage as range,cel as range,tablo,i&
    Set dico = CreateObject("scripting.dictionary")
        Set plage = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
     
        For Each cel In plage.Cells
            If Not dico.exists(cel.Value) Then dico.Add (cel.Value), cel.Offset(0, 7)
            If dico(cel.Value) <> "Boom" Then dico(cel.Value) = cel.Offset(0, 7) Else dico(cel.Value) = dico(cel.Value)
        Next
     
        tablo = plage.Resize(plage.Rows.Count, 2).Value
     
        For i = 1 To UBound(tablo)
            tablo(i, 2) = dico(tablo(i, 1))
        Next
     
        Cells(1, 7).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    End Sub
    Nom : ghtrghtrgte.jpg
Affichages : 215
Taille : 30,3 Ko
      0  0

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    ben si tu veux créer un tableau avec que les valeurs sans les couleurs c'est tres simple tu modifie 2 petite chose dans le code
    en rouge ce que j'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub test()
    Dim dico As Object, plage As Range, cel As Range, tablo, i&
    Set dico = CreateObject("scripting.dictionary")
        Set plage = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
     
        For Each cel In plage.Cells
            If Not dico.exists(cel.Value) Then dico.Add (cel.Value), cel.Offset(0, 7)
            If dico(cel.Value) <> "Boom" Then dico(cel.Value) = cel.Offset(0, 7) Else dico(cel.Value) = dico(cel.Value)
        Next
     
        tablo = plage.Resize(plage.Rows.Count, 1).Value
     
        For i = 1 To UBound(tablo)
            tablo(i, 1) = dico(tablo(i,1))
        Next
     
        Cells(1, 8).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    End Sub
    voila

    et tant pis si ca me vaut encore une prune je le prend de qui ca ca vient
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      1  1

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Hum...

    Ben oui, c'est vrai, comme dirait l'autre "quand la mecanique est simple elle est facile a modifier"...

    D'abord,définir le besoin. il peut évoluer, il n'y a aucun souci à cela, mais le besoin de base doit être formulé, en termes simples et "non informatiques". Après, on peut construire dessus, en y allant pas à pas, d'abord et avant tout par une bonne conception de classeur. Si tu ne sais pas réaliser manuellement avec Excel les actions que tu souhaites réaliser, tu aurais tôt ou tard un problème, que ce soit en VBA ou en Excel, et les bricolages à la *$*@&# proposés ici n'y changeront rien: ton projet capotera, et les emplâtres amenés à coup de code mal foutu n'y feront rien.

    Il y a cependant une chose que tu dois entendre avant d'aller plus loin: Excel n'est pas l'outil adéquat pour réaliser ce que tu souhaites obtenir. Mais si tu le fais en Excel, il faut le faire dans les règles d'Excel. Je gagne ma vie depuis des années grâce au fait que les gens ne veulent pas entendre cela. Pour réaliser ce que tu souhaites, il va falloir peu ou prou réinventer la roue, et faire avec Excel ce que d'autres outils permettent nativement. Autrement dit, nous allons réinventerAccess en VBA, le fil à couper le beurre, la poudre... Libre à toi d'écouter d'autres sirènes, mais je te préviens: elles te mentent, et pour certaines d'entre-elles, sont incompétentes à t'aider à obtenir ce que tu souhaites (chacun son métier...)

    @Patrick: C'est moi qui te met les -1... (comme ça, c'est dit ). Je le répète: Bien avant les lignes de code, que tout le monde peut pisser sans soucis quel que soit le langage, il y a la réflexion, l'analyse du besoin, le choix de l'outil. Libre à chacun d'écouter les "yaka changer une ligne de code et tant pis si je prends une prune"... Ca, ça n'amène JAMAIS une solution pérenne, fiable, solide, évolutive...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      3  0

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    [@Patrick: C'est moi qui te met les -1... (comme ça, c'est dit ). Je le répète: Bien avant les lignes de code, que tout le monde peut pisser sans soucis quel que soit le langage, il y a la réflexion, l'analyse du besoin, le choix de l'outil. Libre à chacun d'écouter les "yaka changer une ligne de code et tant pis si je prends une prune"... Ca, ça n'amène JAMAIS une solution pérenne, fiable, solide, évolutive...
    tu racconte n'importe quoi et brode n'importe quelle raison pour te justifier et m'en mettre une ,c'est petit surtout de la part d'un enseignant

    sa demande etait claire ainsi que la methode que j'ai proposé

    tu le prendra de qui ca vient comme moi d'ailleurs
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      2  1

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    dans le cadre ou la plage concernée ne commencerait pas en ligne 1 et/ou colonne 1 on peut rendre generique le transfert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test()
    Dim dico As Object, plage As Range, cel As Range, tablo, i&
    Set dico = CreateObject("scripting.dictionary")
        Set plage = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        tablo = plage.Value
     
        For Each cel In plage.Cells
            If Not dico.exists(cel.Value) Then dico.Add (cel.Value), cel.Offset(0, 7)
            If dico(cel.Value) <> "Boom" Then dico(cel.Value) = cel.Offset(0, 7) Else dico(cel.Value) = dico(cel.Value)
        Next
     
          For i = 1 To UBound(tablo)
            tablo(i, 1) = dico(tablo(i, 1))
        Next
         plage.Offset(0, 7) = tablo
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter
      2  1

  19. #19
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 522
    Points
    14 522
    Par défaut
    Bonjour,

    Des "boom", des "cool", des couleurs ?!
    On pourrait également échanger sur des animaux et des légumes, mais quel est l'intérêt ?
    Nous comprenons ce qu'est un statut ou un ticket.

    Sinon comme déjà dit, la conception est certainement mauvaise.
    Et le besoin n'est toujours pas précis : il y a des exemples, mais un besoin ce sont des règles de gestion, pas uniquement des exemples.
    D'ailleurs que devient le code donné ? Je ne comprends pas qu'on puisse échanger de cette manière à sens unique et juste avec un exemple de résultat souhaité.

    Sinon oui le code donné fonctionne pour l'exemple donné. Mais les données vont évoluer, et boom ! Ce n'est pas cool.

    Je ne voudrais pas briser votre enthousiasme, mais conservez le classeur papier en parallèle pendant quelque temps au cas où...
      5  0

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    [...]et boom ! Ce n'est pas cool.


    Citation Envoyé par Arkham46 Voir le message
    Je ne voudrais pas briser votre enthousiasme, mais conservez le classeur papier en parallèle pendant quelque temps au cas où...
    Conseil plus que judicieux
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/05/2012, 09h35
  2. Aide moi pour cet exercice
    Par yassin123441 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 16/12/2009, 07h42
  3. [Exercice] Trouver l'algorithme pour cet exercice.
    Par zinedineilham dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 23/11/2008, 01h13
  4. je cherche une solution pour cet exercice
    Par rafikadouni dans le forum Débuter
    Réponses: 4
    Dernier message: 22/11/2007, 23h26
  5. [C++] quelle structure de donnée utiliser pour stocker des vertices ?
    Par johnnyjohnny dans le forum Développement 2D, 3D et Jeux
    Réponses: 14
    Dernier message: 14/07/2007, 22h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo