Remplacer le contenu d'une plage sous condition - Forum VB / VBA

Remplacer le contenu d'une plage sous condition Remplacer le contenu de céllules automatiquement (Résolu) » Forum - VB / VBA Remplacer le contenu d'une colonne par autre chose (Résolu) » Forum - VB / VBA Remplace le contenu de cellule (Résolu) » Forum - VB / VBA Excel: le minimum d'une plage sous condition (Résolu) » Forum - Excel Remplacer le contenu de plusieurs cellules [Résolu] (Résolu) » Forum - Excel

Bonsoir
je cherche un code qui sous condition donne le contenue dune plage a l emplacement d'une autre Ex si je dits
si dans la cellule AX101 est inscrit"OK" affichez moi le contenue de la plage BA101:BI141 en CK11:CS51

si dans la cellule AX144 est inscrit"OK" affichez moi le contenue de la plage BA144:BI184 en CK11:CS51

si dans la cellule AX187 est inscrit"OK" affichez moi le contenue de la plage BA187:BI227 en CK11:CS51

si dans la cellule AX230 est inscrit"OK" affichez moi le contenue de la plage BA230:BI270 en CK11:CS51

si dans la cellule AX273 est inscrit"OK" affichez moi le contenue de la plage BA273:B3133en CK11:CS51

si dans la cellule BZ101 est inscrit"OK" affichez moi le contenue de la plage BO101:BX141en CK11:CS51

si dans la cellule BZ144 est inscrit"OK" affichez moi le contenue de la plage BO144:BX184en CK11:CS51

si dans la cellule BZ187 est inscrit"OK" affichez moi le contenue de la plage BO187:BX227en CK11:CS51

etc jusqua BZ273

Forum

Remplacer le contenu d'une plage sous condition Remplacer le contenu de céllules automatiquement (Résolu) » Forum - VB / VBA Remplacer le contenu d'une colonne par autre chose (Résolu) » Forum - VB / VBA Remplace le contenu de cellule (Résolu) » Forum - VB / VBA Excel: le minimum d'une plage sous condition (Résolu) » Forum - Excel Remplacer le contenu de plusieurs cellules [Résolu] (Résolu) » Forum - Excel

Web: www.shapebootstrap.net

83 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,
Voilà

Option Compare Text  Sub RecopiePlage()     Application.ScreenUpdating = False     Cpt = 0     For Each cell In Range("AX101, AX144, AX187, AX230, AX273, BZ101, BZ144, BZ187, BZ230, BZ273")         If cell = "Ok" Then Cpt = Cpt + 1         If Cpt > 1 Then             MsgBox "Il y a plusieurs cellules avec la mention Ok"             Exit Sub         End If     Next          If [AX101] = "Ok" Then         [CK11:CS51] = [BA101:BI141]     ElseIf [AX144] = "Ok" Then         [CK11:CS51] = [BA144:BI184]     ElseIf [AX187] = "Ok" Then         [CK11:CS51] = [BA187:BI227]     ElseIf [AX230] = "Ok" Then         [CK11:CS51] = [BA230:BI270]     ElseIf [AX273] = "Ok" Then         [CK11:CS51] = [BA273:BI313]     ElseIf [BZ101] = "Ok" Then         [CK11:CS51] = [BO101:BO141]     ElseIf [BZ144] = "Ok" Then         [CK11:CS51] = [BO144:BO184]     ElseIf [BZ187] = "Ok" Then         [CK11:CS51] = [BO187:BO227]     ElseIf [BZ230] = "Ok" Then         [CK11:CS51] = [BO230:BO270]     ElseIf [BZ273] = "Ok" Then         [CK11:CS51] = [BO273:BO313]     End If End Sub


Cdlt

Reply
réponses:
  • auteur

    Salut frenchie
    comment vas tu ??il ya si longtemps il fait toujours aussi beau dans le Var???


    je voudrais savoir si ton code copie ou si il affiche dans la plage le contenue de l autre plage (parceque ces graphes tournent en temps réel et on ne peut pas faire de copie en mode valeur par exemple (sinon il faudrait qu'il copie toutes les formules et qu elles se retrouvent a l identique sur l'autre plage
    est ce que tu peux me dire ou je le mets parce que j ai déjà un code dans la feuille ;
    celui que tu viens de m 'envoyer j ai rectifié parce que je m’étais trompé dans la saisie j ai un autre graphe juste en dessous ou je fait la même opération(comment je goupille ca????? je te donne ce que je viens de rectifier Apres si tuas le temps j ai deux autres soucis que je n 'arrive pas a regler pour le moment personne n 'a trouve la solution
    je te montrerais plus tard ce qui a évolué depuis que tu m avais fait le timer pour mon fichier cotations minutes et cotations quart heures(tu te souviens....)
    pour l instant il faut que je solutionne ces problèmes au plus vite parce que je suis entrain de créer un site web
    Merci pour ton aide....

     Option Compare Text  Sub RecopiePlage()     Application.ScreenUpdating = False     Cpt = 0     For Each cell In Range("AX101, AX144, AX187, AX230, AX273, BZ101, BZ144, BZ187, BZ230, BZ273")         If cell = "Ok" Then Cpt = Cpt + 1         If Cpt > 1 Then             MsgBox "Il y a plusieurs cellules avec la mention Ok"             Exit Sub         End If     Next          If [AX101] = "Ok" Then         [CK11:CS51] = [BA101:BI141]     ElseIf [AX144] = "Ok" Then         [CK11:CS51] = [BA144:BI184]     ElseIf [AX187] = "Ok" Then         [CK11:CS51] = [BA187:BI227]     ElseIf [AX230] = "Ok" Then         [CK11:CS51] = [BA230:BI270]     ElseIf [AX273] = "Ok" Then         [CK11:CS51] = [BA273:BI313]     ElseIf [BZ101] = "Ok" Then         [DB11:DJ51] = [BO101:BW141]     ElseIf [BZ144] = "Ok" Then         [DB11:DJ51] = [BO144:BW184]     ElseIf [BZ187] = "Ok" Then         [DB11:DJ51] = [BO187:BW227]     ElseIf [BZ230] = "Ok" Then         [DB11:DJ51] = [BO230:BW270]     ElseIf [BZ273] = "Ok" Then         [DB11:DJ51] = [BO273:BW313]     End If End Sub   l autre graphe  les cellules OK se trouvent en  AX316  AX359 AX402 AX445 AX488     BZ316 BZ359  BZ402 BZ445 BZ448   If [AX316] = "Ok" Then         [CK57:CS97] = [BA316:BI356]     ElseIf [AX359] = "Ok" Then         [CK57:CS97] = [BA359:BI399]     ElseIf [AX402] = "Ok" Then         [CK57:CS97] = [BA402:BI442]     ElseIf [AX445] = "Ok" Then         [CK57:CS97] = [BA445:BI485]     ElseIf [AX488] = "Ok" Then         [CK57:CS97] = [BA488:BI528]     ElseIf [BZ316] = "Ok" Then         [DB57:DJ97] = [BO316:BW356]     ElseIf [BZ359] = "Ok" Then         [DB57:DJ97] = [BO359:BW399]     ElseIf [BZ402] = "Ok" Then         [DB57:DJ97] = [BO402:BW442]     ElseIf [BZ445] = "Ok" Then         [DB57:DJ97] = [BO445:BW485]     ElseIf [BZ488] = "Ok" Then         [DB57:DJ97] = [BO488:BW528]

  • Frenchie83

    je voudrais savoir si ton code copie ou si il affiche dans la plage le contenue de l autre plage
    si je reprend la question posée lors de la demande:
    je cherche un code qui sous condition donne le contenue dune plage a l emplacement d'une autre
    il semblerait bien que ce sont bien des valeurs qu'on doit recopier sur les autres plages.
    est ce que tu peux me dire ou je le mets parce que j ai déjà un code dans la feuille, à mettre dans un module standard, et pas dans le module d'une feuille.

  • auteur

    re
    alors ca ne va pas marcher parce qu il faut que la plage qui reçoit(en l 'occurrence le graphe) affiche le résultat de l autre plage (sans la copier)autrement dit =
    exemple
    si je suis sur la graphe en temps réel la plage CK11:CS51(celle qui reçoit) devra afficher le contenue de la plage BA101:BI141 a condition que la cellule AX101 soit = à OK
    si l'on fait un simple copier colle valeur mon graphe ne se rafraîchira pas à chaque changement de cotations dans l autres plage
    avec les formules j arrive a le faire mais j ai un problème c'est que les valeurs qui arrivent ne sont pas en pourcentage mais en nombre (même en changeant la format des cellules ca ne changent pas je n 'arrive pas a avoir les pourcentages)
    je mets par exemple dans la cellule CK11 =SI(AX101="0K";BA101;"")&SI(AX144="0K";BA144;"")&SI(AX187="0K";BA187;"")&SI(AX230="0K";BA230;"")&SI(AX273="0K";BA273;"").....etc donc il faut trouver autre code ;c'est dommage parceque avec les formules on fait simplement les premières lignes en haut du graphe et puis cela descend en cascade pour recopier les formules jusqu au bas du graphe

  • auteur

    Bonjour Frenchie
    est ce que tu as une idée pour solutionner mon problème
    en fait pour que ça fonctionne il faudrait un code qui dise que des que le ok apparait dans une cellule il faut que dans la plage réceptrice ,il y ai inscrit à chaque cellule =(le contenue de la cellule de la plage visé) il faut bien dissocié les plages d'ou proviennent les cotations, et la plage qui réceptionne les infos ;qui elle, est toujours fixe un peu comme cela

    exemple =SI(AX101=OK;=BA101;"") a mettre dans cellule CK11 du graphe recepteur
    =SI(AX101=OK;=BB101;"")a mettre dans cellule CL11 du graphe recepteur
    =SI(AX101=OK;=BB101;"")a mettre dans cellule CM11 du graphe recepteur
    etc ainsi selon le même principe dans toute la plage réceptrice
    comme je te l ai dit précédemment cela marche avec les formules mais le soucis est que cela me renvoie les valeurs en nombre au lieu de pourcentage je pense que un code devrait pouvoir solutionner ce problème
    en fait je me retrouve avec dans chaque cellule 5 formules comme ceci dans la cellule de départ(CK)

    =SI(AX101="OK";=BA101;"")&SI(AX144="OK";=BA144;"")&SI(AX187="OK";=BA187;"")&SI(AX230="OK";=BA230;"")&SI(AX273="OK";=BA273;"")

    et en suivant pareil pour l 'autre cote avec BZ101 BZ144 BZ187 BZ230 BZ273

    Bonne journée
    si tu as une petite idée n hésite pas on trouvera je pense une solution que par un code

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,
Franchement j'ai beaucoup de mal à comprendre le raisonnement.
Tout d'abord, quand je regarde le code que vous retournez, ça ne correspond plus avec la demande initiale où tous les résultats devaient s'afficher dans la plage "CK11:CS51", alors que maintenant je vois du " DB11:DJ51".
De plus, qu'entendez-vous par "graphe récepteur"?
cela me renvoie les valeurs en nombre au lieu de pourcentage,. Comment puis je deviner le contenu des cellules si n'en connais pas la teneur?
Dans l'exemple fournit: =SI(AX101=OK;=BA101;"") , =BA101 Qu'est-ce que cela doit retourner, une valeur, une formule ?
Il va falloir être plus clair, concis tout en étant le plus précis possible dans les demandes avec des exemples de résultats à obtenir à l'appui, sinon on ne va pas s'en sortir.
cdlt

Reply
réponses:
  • auteur

    Bonjour

    Je t 'explique clairement ce sont 2 graphes a barres de progression un en dessous de l 'autre) je t'avais dans le passé donné une capture d'écran ou un fichier (je ne me souviens pas)
    POUR le premier Graphe
    D’un côté tu as le négatif avec 40 barres à gauche
    De l’autre cote tu as le positif avec 40 barres à droite
    Tout en haut tu as une échelle de progression en pourcentage (une de chaque cote de CK11:CS11
    L’autre pour le cote positif à droite en DB11:DJ11
    à partir de la ligne 12 jusqu’ a la ligne 51 ce sont des cotations boursières qui s'affichent en temps réel par le biais d’une api et de formules mathématiques que j 'ai crée
    Pour la partie gauche on a cette équivalence
    If [AX101] = "Ok" Then
    [CK11:CS51] = [BA101:BI141]
    ElseIf [AX144] = "Ok" Then
    [CK11:CS51] = [BA144:BI184]
    ElseIf [AX187] = "Ok" Then
    [CK11:CS51] = [BA187:BI227]
    ElseIf [AX230] = "Ok" Then
    [CK11:CS51] = [BA230:BI270]
    ElseIf [AX273] = "Ok" Then
    [CK11:CS51] = [BA273:BI313]

    Pour la partie droite on a cette équivalence

    ElseIf [BZ101] = "Ok" Then
    [DB11:DJ51] = [BO101:BW141]
    ElseIf [BZ144] = "Ok" Then
    [DB11:DJ51] = [BO144:BW184]
    ElseIf [BZ187] = "Ok" Then
    [DB11:DJ51] = [BO187:BW227]
    ElseIf [BZ230] = "Ok" Then
    [DB11:DJ51] = [BO230:BW270]
    ElseIf [BZ273] = "Ok" Then
    [DB11:DJ51] = [BO273:BW313

    >-2,00% -2,00% -1,75% -1,50% -1,25% -1,00% -0,75% -0,50% -0,25% (ligne11negatif)

    0,25% 0,50% 0,75% 1,00%>-- 1,25% 1,50% 1,75% 2,00% >2,00% (ligne11Positif)

    POUR le Deuxième Graphe c'est exactement la même structure sauf que ce graphe fait référence a des cotations de la journée d’avant
    D’un côté tu as le négatif avec 40 barres à gauche
    De l’autre cote tu as le positif avec 40 barres à droite
    Tout en haut tu as une échelle de progression en pourcentage (une de chaque cote de CK57:CS57
    L’autre pour le cote positif à droite en DB57:DJ57
    a partir de la ligne 58 jusque a la ligne 97 ce sont des cotations boursières qui s'affichent en temps réel par le biais d’une api et de formules mathématiques que j 'ai crée
    Pour la partie gauche on a cette équivalence

    If [AX316] = "Ok" Then
    [CK57:CS97] = [BA316:BI356]
    ElseIf [AX359] = "Ok" Then
    [CK57:CS97] = [BA359:BI399]
    ElseIf [AX402] = "Ok" Then
    [CK57:CS97] = [BA402:BI442]
    ElseIf [AX445] = "Ok" Then
    [CK57:CS97] = [BA445:BI485]
    ElseIf [AX488] = "Ok" Then
    [CK57:CS97] = [BA488:BI528]

    Pour la partie droite on a cette équivalence

    ElseIf [BZ316] = "Ok" Then
    [DB57:DJ97] = [BO316:BW356]
    ElseIf [BZ359] = "Ok" Then
    [DB57:DJ97] = [BO359:BW399]
    ElseIf [BZ402] = "Ok" Then
    [DB57:DJ97] = [BO402:BW442]
    ElseIf [BZ445] = "Ok" Then
    [DB57:DJ97] = [BO445:BW485]
    ElseIf [BZ488] = "Ok" Then
    [DB57:DJ97] = [BO488:BW528

    >-2,00% -2,00% -1,75% -1,50% -1,25% -1,00% -0,75% -0,50% -0,25% (ligne 57 négatif)

    0,25% 0,50% 0,75% 1,00%>-- 1,25% 1,50% 1,75% 2,00% >2,00% (ligne 57 Positif)

    ce qu’ il faut comprendre c'est que ce sont bien les deux graphes qui vont pour le premier de CK11:CS51 à DB11:DB51
    pour le deuxième CK57:CS97 à DB57 :DJ97 qui vont recevoir les cotations des autres plages énumérés il ne faut pas que ces cotations soient copiés vers ces 2 graphes mais que le code disent simplement "égale le contenue de"
    je ne veux pas d'un Code qui me copierais les formules a mesure que les ok apparaîtront sur telle ou telle plage
    pour la bonne raison que le graphe tourne en temps réel et ce serait trop complique a gérer d autant qu’ il y a des mises en forme conditionnelles dans les cellules
    il faut simplement comme je te l ai dit que le code affiche les cotations en temps réel des cellules dans la bonne plage quand elle est "OK"

    je le dit et redit c'est comme si dans une cellule quelconque,qu' on nommera pour exemple A1 si dans A1 était inscrit le chiffre 2 et bien si tu es dans la cellule B tu dits (=A1) et 2 vient s'afficher; tout simplement pas la peine de faire une procédure de collage pour avoir le 2 (le égale suffit)

    excuse-moi pour les données je les avais pas mise la première fois parce que je savais que si tu trouvais un code lj allais peut être moi-même l’adapter pour l 'autre cote(mais je me suis rendu compte que il était préférable pour qu’ il n y ai pas d'erreurs, de tout te donner avant que tu commences si tu comprends pas dits moi ce qui ne va pas...???
    Bonne journée

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bonjour, peut-être veux-tu un code VBA qui va détecter un changement dans les 10 cellules en AX et BZ, et, en fonction du contenu de ces 10 cellules, va enregistrer des formules dans CK11:CS51?

il est important de toujours clairement et concisément décrire quand le code doit être exécuté, et ce qu'il doit faire. tu n'as pris la peine de décrire "quand" (via un bouton, ou automatiquement), et le "quoi" était très flou.

"affichez moi le contenue" veut plutôt dire copier le contenu.
si tu veux créer un lien via une formule, précise le ainsi.

par respect pour ceux qui t'aident, prends le temps d'utiliser un vocabulaire précis. après quelques années d'apprentissage de l'utilisation d'Excel, tu n'as plus l'excuse de l'oisillon tombé du nid.

tu écris en #7 "je le dit et redit". tu aurais mieux fait de l'écrire dans la description de départ.

j'ai l'impression que tu ne prends pas le temps d'être concis: tu envoies très vite de très longs textes. tu gagnerais du temps à préparer des textes beaucoup plus courts, qui contiennent exactement les informations nécessaires, rien de plus. prends le temps de te relire, de te mettre à la place de ceux qui te liront, de te demander comment ils vont comprendre ton texte.

Reply
réponses:
  • auteur

  • auteur

    Bonjour
    sans doute vous avez raison et si je m 'exprime mal c'est parce que ce n'est pas mon job je peux pas être à votre niveau c'est impensable et vous devez en tenir compte
    Mais afficher le contenue dune cellule dans une autre cellule n a jamais voulu dire pour moi ,copier la cellule....
    si je dits par exemple afficher moi le contenue de la cellule AI en B1
    je vais inscrire tout simplement dans B1 =A1
    je ne vais pas copie A1 dans B1 pour obtenir son contenue je sais pas si je suis clair
    pour moi cela me parait évident
    maintenant si vous avez une solution meilleure et que vous êtes sur que votre code ne perturbera pas le temps réel lors du collage, je suis ok
    a ce moment la ce seont la totalité des formules de la plage qui seront copie dans le graphe il faut que la procédure soit automatique
    Je pense que vous êtes tous un peu dur avec moi
    comme j expliquais a un de vos collègues si je mettais l'un d'entre vous devant un bloc de pierres et je lui demandais de me faire le buste de napoléon sans trop d'explication, je suis pas sur qu il ferait aussi bien que moi avec les codes??? mais dans le fond ça vous arrange a tous parce que vous aimez bien les choses qui sortent d l 'ordinaire
    pour votre info essayer de comprendre que tout le monde n 'a pas le même fonctionnement
    par exemple quand c'est trop dur je passe a autre chose et des que j ai une idée je reviens sr la chose ou j 'ai buté concernant les codes que je n arrivais pas a solutionné il y en a un que j ai trouve et le deuxième je coince dessus, mais c'est comme ça je laisse un peu de temps a mes neurones pour réfléchir
    je sais vous allez pester parce que je n ai pas solutionner ce problème et que je passe a un autre
    Mais c'est ainsi que je fonctionne et au final il ne me reste que 2 a 3 codes et j aurais bouclé ma solution
    voila le code que je suis arrive a adapter je sais pour vous ,vous allez me dire que c'est très facile
    pour moi ça ne l était pas

    je suis preneur de votre code si toutefois vous pensez que ça ne perturbera pas le fonctionnement du graphe
    j oubliais , je suis arrive a le faire avec des formules mais le gros problème est que les contenues des plages s'affichent en numéraire et non en % j ai eu beau essayer de changer le format rien n'y fait
    et c'est sans collage

    Bonne journée
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Graphe Horizontal")

    If Not Application.Intersect(Target, ws.Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then

    If Target.Column = 100 Then
    i = 0
    j = 0
    Else
    i = 5
    j = 2

    End If

    If Target.Row < 58 Then
    k = 0
    Else
    k = 46
    End If

    ws.Range("CM10").Value = Target
    ws.Range("CX9").Value = Target.Offset(0 - k, -57 + i)
    ws.Range("CP10").Value = Target.Offset(0 - k, -58 - j)
    ws.Range("CW11").Value = Target.Offset(0 - k, -57 - i)
    ws.Range("CY11").Value = Target.Offset(0 - k, -50 - i)
    ws.Range("CW11").Value = Target.Offset(0 - k, -57 - j)
    ws.Range("CY11").Value = Target.Offset(0 - k, -50 - j)

    ws.Range("CT54").Value = Target.Offset(0 - k, -51 - i)
    ws.Range("CT54").Value = Target.Offset(0 - k, -51 - j)
    ws.Range("CZ54").Value = Target.Offset(0 - k, -50 - i)
    ws.Range("CZ54").Value = Target.Offset(0 - k, -50 - j)



    End If

    End Sub

  • yg_be

    maintenant que tu as constaté que "afficher moi le contenue de la cellule AI en B1" est ambigu, je te suggère d'éviter d'utiliser cette formulation, et de préciser si tu veux en A1 le contenu de B1, ou bien un lien (via une formule) vers B2.

  • yg_be

    si je comprends ce que tu écris, tu ne cherches plus le code que tu demandais au début de ce topic, parce que cela fonctionne avec des formules. tu cherches cependant de l'aide pour que ce soit affiché en %. peux-tu donner une de ces formules, et expliquer ce que tu as essayé come format?

  • auteur

    re
    absolument pas je cherche la meilleure solution
    moi en formule je disais par exemple ceci prenons la premier plage
    dans le graphe qui reçoit la cotation je mettais en cellule CK11 puis apres selon le meme principe dans toutes les cellules de la plage
    =SI(AX101="OK" ,AZ101;"")&SI(AX144="OK";AZ144;"")&SI(AX187="OK";AZ187;"")&SI(AX230="OK";AZ230;"")SI(AX273="OK";AZ273;"")....etc en descendant sur toute la plage
    le format est en pourcentage 3 decimales
    autre chose j
    e ne comprend pas pourquoi tu dits que j ai change ma demande depuis le début je cherche une solution efficace si le code est meilleur que les formules ce qui devrait être je vais mettre un code si je n arrive pas a trouver un code a ce moment la je mettrais les formules
    mais je viens de t 'expliquer que les formules me retournent le contenue de la cellule en numéraire Voila je ne peux t en dire plus si tu as un code je l 'essai en temps réel

  • yg_be

    je pense que ton soucis avec la formule vient de ton choix d'utiliser des chaines de caractères plutôt que des nombres.
    donc, suggestion pour ta formule: remplace "" par 0 et & par +

    =SI(AX101="OK" ,AZ101;0)+SI...

    attention, si tu as plusieurs "OK", cela va calculer des sommes. si c'est un soucis, tu dois soit faire des formules avec des SI imbriqués, soit faire par code.

  • yg_be

    si tu veux utiliser du code, tu peux repartir de la proposition de Frenchie83, et la changer ainsi:
    ajouter ceci dans le même module:

    Private Sub linkrg(target As Range, source As Range) source.Copy target.Parent.Activate target.Select target.Parent.Paste Link:=True Application.CutCopyMode = False End Sub

    et remplacer chaque ligne telle que
    [CK11:CS51] = [BA101:BI141]
    (qui copie le contenu)
    par une ligne telle que
    Call linkrg([CK11:CS51], [BA101:BI141])
    (qui crée un lien)

  • auteur

    re
    ca marche désormais
    j'ai tente l 'expérience sur un autre fichier et je n ai pas ce problème apparemment
    je suis incapable de te dire pourquoi ca me renvoyait le mauvais format maintenant j'aimerais savoir la différence avec ton code
    pour le moment j ai essaye en statique demain des que les cours tourneront je ferais un petit essai sur quelques cellules en dynamique si tu me dits que ton code est réalisable pourquoi ne le réalises tu pas suivant mon principe au lieu de coller tu ecrits un code

    si la cellule AX101 est egale a "OK"mettez moi dans toutes les cellules de la plage CK11:CS51 =l’équivalence de la plage BA101:BI141
    je sais pas l 'exprimer parce que je ne connais pas la programmation mais je suis a peu pres certain que c'est réalisable sans collage et avec un code je pense que le code collage peut perturber le Streaming des cotations
    peut être que je dit des conneries c'est mon intuition je suis quand meme soulage parceque je ne comprenais absolument pas pourquoi cela ne fonctionnait pas comme je le souhaitais
    je te rappelle que on a eu aussi ce genre de problème avec le Timer(allez savoir pourquoi) mystere??? tu en penses quoi????

  • yg_be

    cela te renvoyait le mauvais format parce que tu utilisais "" et &.

  • auteur

    j essayerais demain mais le code que m a envoye frenchie avec megabox ne marche pas donc je peux pas l utiliser il faut l'ecrire autrement

  • auteur

    re
    tu me dits de mettre 0 a la place de "") et +SI a la place de &SI j essaye et ca marche pas

  • yg_be

    que voulais-tu dire "ca marche désormais"?
    quand "ca marche pas", merci de donner quelques faits: formules, message d'erreur, ...

  • auteur

    ca marchait parce que je n avais fait l essai que sur une formule par cellule celle qui avait le ok
    mais quand j ai imbriqué les autres on est revenue a la position de départ ca ne me met pas les cellules en pourcentage même en modifiant et en remplaçant par o et en supprimant &

  • yg_be

    donne des faits: montre la formule, le résultat, ...

  • auteur

    la formule est =SI(AX101="OK" ;BA101;0)+Si(AX144="OK";BA144;0)+SI (AX187="OK";BA187 ;o)+SI(AX230="OK";BA230;0)+SIBA273="OK";0)
    la ca ne renvoie rien du tout

  • yg_be

    je vois une lettre o au lieu d'un chiffre 0.

  • yg_be

    je ne comprends pas que cela ne donne pas de message d'erreur: il manque une parenthèse ouvrante dans SIBA273.

  • yg_be

    si tu veux recopier cette formule vers d'autres cellules, il faut ajouter des $ dans les conditions, par exemple:

    =SI($AX$101

  • auteur

    oui je commence a fatiguer mais cest pas ce a j ai rectifie et c'est pareil

  • auteur

    =SI(AX101="OK" ;BA101;0)+Si(AX144="OK";BA144;0)+SI (AX187="OK";BA187 ;0)+SI(AX230="OK";BA230;0)+SI(AX273="OK";BA273;0)

  • auteur

    ca marque Valeurs

  • yg_be

    avec un #?
    es-tu certain d'avoir des valeurs numériques dans les cellules sources?

  • yg_be

    quand tu écris "ca marque Valeurs", veux-tu dire #valeur ?

  • auteur

    =SI($AX$101="OK";BA101;"")&SI($AX$144="OK";BA144;"")&SI($AX$187="OK";BA187;"")&SI($AX$230="OK";BA230;"")&SI($AX$273="OK";BA273;"")

    par exemple si je mets ça dans la première cellulej
    le resultat de la première cellule est bon puis des que je copie sur les autres les chiffres apparaissent en nombre et pas en pourcentage sur la barre ou devrait y avoir- 1.60% je me retrouve avec-0.0016 dans le graphe la ou je derais avoir par exemple-0.046% je me retrouve avec 52107208872432 la barre de pourcentage en haut j (ai
    >-1,60% -0,016 -0,014 -0,012 -0,01 -0,008 -0,006 -0,004 -0,002 au lieu de

    >-1,60% -1,60% -1,40% -1,20% -1,00% -0,80% -0,60% -0,40% -0,20%

  • yg_be

    il suffit d'adapter le format.

  • auteur

    et je le mets ou # ala place
    de quoi???

  • auteur

    Bon tu vas bien m ecouter et ne pas me prendre pour un fou
    je ne sais pas pourquoi ya ce problème, peut etre un bug mais je peux te dire que si le résultat numéraire qui arrive dans la plage du graphe est extirpé par une autre cellule ou je dit ""égale le resultat de la cellule multiplie par 1"" alors la j ai le bon résultat qui s'affiche c'est complètement fou parcequil faudrait que j utilise une autre plage pour recevoir ces numéraires afin de pouvoir les transformer en suite au bon emplacement
    est ce que tu m 'as saisie????

  • auteur

    conclusion il vaut mieux que tu me trouves un code........

  • auteur

    et comment adapter le format????

  • yg_be

    as-tu toujours l'erreur avec valeur ou #valeur?
    Mettre en forme des nombres en tant que pourcentages

  • auteur

    non je n ai plus l 'erreur

  • auteur

    bon ben ca m apporte rien de nouveau ca ne fait absolument rien a mon probleme

  • yg_be

    quand tu me signales une erreur (valeur ou #valeur, par exemple), peux-tu aussi prendre le temps de me signaler quand l'erreur est résolue? juste par respect, que je ne continue pas à chercher de solution. merci.
    toujours par respect, peux-tu répondre à mes questions? tu n'as toujours pas répondu si c'était valeur ou #valeur.

    prends le temps de faire le point par rapport à ta question de départ.
    avons-nous progressé?
    qu'est-ce qui est fait, que reste-t'il à faire?
    malgré le nuage de fumée que tu entretiens, je crois avoir compris que les formules produisaient les valeurs désirées, et qu'il restait un problème de format.
    je me trompe?

  • auteur

    non tu te trompes pas mais j ai déjà eu ce genre de problème et impossible de le solutionner sans reprendre le résultat dans une autre plage
    moi je crois que c'est un code qu il faut parceque je ne vais pas faire un graphe en double pour obtenir ce que je veux impossible de changer le format voila comment ca arrive pour -0,046%
    -0,000462107208872432 si je multiplie par 100 je me retrouve a ce que je devrais avoir normalement -0.046% si je multiple dans la formule comme ceci
    &SI($AX$144="OK";BI146*100;"") je me retrouve ainsi -0,0462107208872432 c'est le bon chiffre mais il n 'est toujours pas en %

  • yg_be

    Afficher les nombres sous forme de pourcentage

  • auteur

    RE
    ca y est j ai trouvé une solution je te dits pas l 'artifice pour détourner ce casse tete mais cela marche a toi de me dire si avec un code c'est mieux en fait j ai fait un graphe intermédiaire ou arrivent ces cotations en nombre puis du vrai graphe j ai fait dans un premier temps = seulement;
    les cotations se transformaient sauf celles ou il n y avait pas de valeurs et qui affichaient Valeurs
    j ai mis devant la formule =SIERREUR et le tour est joué
    j 'espere que tu vas me trouver mieux avec un code
    ce qui est rassurant c'est que au pire je pourrais le faire marcher comme ca

    =SIERREUR(BL12*1;"")

  • yg_be

    peux-tu marquer le sujet comme résolu si tu as trouvé une solution, même sans code?
    en passant, j'ai eu plusieurs fois l'impression que tu utilisais le mot "graphe" pour nommer quelque chose que tu es le seul à appeler un graphe. si tu veux être compris, je te suggère de t'aligner sur le vocabulaire de Excel.
    au lieu d'utiliser SIERREUR pour cacher des erreurs, il est souvent préférable de corriger les erreurs à la source. il est aussi préférable de diminuer le nombre de formules, cela prend du temps de les recalculer.

  • auteur

    RE
    moi je crois que tu n 'as pas compris , mais c'est pas très grave
    c'est un graphe a barres de progression Horizontales d'un cote tu as les barres qui s’étirent ou se contractent à mesure que les valeurs augmentent ou régressent ( a gauche en barres rouges pour le négatif et a droite en vert pour le positif
    si ca n 'est pas un graphe c'est quoi alors????
    il n y a pas non plus d'erreurs,
    c"est que dans mon cas tout simplement, qu'a l endroit ou ne s'affiche pas de résultat excel met valeurs (pour dire manque valeurs dans cette cellule) pour palier a cela je me suis servi d' erreur
    Pour le reste le sujet n 'est absolument pas résolu parce-que je suis persuade que ce que j ai trouvé n 'est pas la meilleure solution je suis sur que c'est un code qui peut m 'éviter tout ce bazar
    pour le reste je te rappelle aussi que le code du Timer n 'a toujours pas été solutionné , alors que tu me disais de marquer résolu
    mais je suis patient et entêté je vais trouver avec un peu de temps pourquoi ton code ne fonctionne toujours pas sur 4 feuilles (alors qu il marche parfaitement sur une seule....??)
    désolé mais je ne renonce jamais ;la preuve est que les codes que n ont pas été solutionné ici, j ai fini par trouver

  • yg_be

    ne peux-tu pas plutôt mettre 0 dans les cellules sans valeur?

  • auteur

    de quelle manière je pige pas
    moi quand j ai rapatrié mes chiffres dans le graphe intermédiaire( pour palier au problème du format impossible à changer) excel affichait les chiffres de la première plage source en nombre dans la deuxieme (comme je te l ai dit précédemment)
    puis lorsque j ai utiliser la formule =cellule*1 pour retrouver mes nombres en % ,les nombres se sont effectivement transformes correctement en %
    mais a l endroit ou il n y avait pas de nombre et bien excel affichait valeurs dans toutes les cellules vides ,donc comme je te l ai dit message d'avant j ai utilise erreur pour gommer cela
    alors explique moi comment je fait parce que le graphe affiche les cotations et si il apparaissait 0 au millieu du graphe c'est pas jouable
    en l état il n'apparait rien ,mes barres s’étirent avec la couleur rouge jusqu a la cotation (cellule rose et police rouge foncé de l autre cote vert Fonce et cellule de la cotation vert clair police vert fonce
    tout est visuellement parfait donc je vois pas très bien ce que tu veux me dire
    peut etre que tu veux m expliquer autre chose (je ne sais pas...?) Pour moi comme je te l ai dit c'est un code qu il faudrait j en suis persuade et je suis sur qu avec un code il doit meme existé un moyen de faire un effet loupe a mon graphe ; de faire varier le pas de progression des barres selon les cotations du marché

  • yg_be

    très bien, laissons ainsi.

  • auteur

    pourquoi?? le code est trop compliqué a faire???

  • yg_be

    peux-tu marquer le sujet comme résolu si tu as trouvé une solution, même sans code?

  • auteur

    Bonjour
    restons ZEN; et dans la logique, une fois mais pas deux......
    Ma question était la suivante
    Chrisnapoli - 7 mai 2018 à 22:14 - Dernière réponse : yg_be - 13 mai 2018 à 21:10
    Bonsoir
    je cherche un code qui sous condition donne le contenue dune plage a l emplacement d'une autre Ex si je dits
    si dans la cellule AX101 est inscrit"OK" affichez moi le contenue de la plage BA101:BI141 en CK11:CS51

    si dans la cellule AX144 est inscrit"OK" affichez moi le contenue de la plage BA144:BI184 en CK11:CS51

    si dans la cellule AX187 est inscrit"OK" affichez moi le contenue de la plage BA187:BI227 en CK11:CS51

    si dans la cellule AX230 est inscrit"OK" affichez moi le contenue de la plage BA230:BI270 en CK11:CS51

    si dans la cellule AX273 est inscrit"OK" affichez moi le contenue de la plage BA273:B3133en CK11:CS51

    si dans la cellule BZ101 est inscrit"OK" affichez moi le contenue de la plage BO101:BX141en CK11:CS51

    si dans la cellule BZ144 est inscrit"OK" affichez moi le contenue de la plage BO144:BX184en CK11:CS51

    si dans la cellule BZ187 est inscrit"OK" affichez moi le contenue de la plage BO187:BX227en CK11:CS51

    etc jusqua BZ273
    Afficher la suite

  • yg_be

    je suggère de combiner la réponse #1 et la réponse #15.

  • auteur

    Bonjour
    ok mais de quelle manière parce que proposait frenchie n'allait pas du tout dans le bon sens

  • yg_be

    si je que je propose en #15 ne permet pas d'adapter le code proposé en #1, c'est sans doute parce que je n'ai pas compris ce qui ne convenait pas en quoi le #1 ne répondant pas à ta demande initiale.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour
on va faire plus simple parce que je ne suis pas satisfait de ma solution par formules et depuis que j ai mis ce système en place le fichier met un temps infini a s'ouvrir
alors je propose ceci on va tester ta solution qui consisterait a coller toutes les cellules d'es plages dont je te mets la liste vers d' autres plages des qu'une condition est remplie
ce qui veut dire que a chaque fois que la condition sera remplie les formules des plages mentionnées remplaceront celles des plages qui reçoivent (en l 'occurrence les graphes) ;il y aura quatre plages qui reçoivent puisque il y a ,en tout 2 graphes et chacun ayant un cote négatif et un autre positif je te mets la liste en dessous (j (espère que ce code ne perturbera pas les graphes lors du collage et que le code me permettra d'avoir un résultat quasi instantané...... les plages sont:

Plages Sources Vers graphe 1 Barres cote Négatif Plages Sources Vers graphe 1 Barres cote Positif
BA101:BI141 Vers CK11:CS51 =Si(AX101=1;"") BO101:BW141 Vers DB11:DJ51 =Si(BZ101=1;"")
BA144:BI184 Vers CK11:CS51 =Si(AX144=1;"") BO144:BW184 Vers DB11:DJ51 =Si(BZ144=1;"")
BA187:BI227 Vers CK11:CS51 =Si(AX187=1;"") BO187:BW227 Vers DB11:DJ51 =Si(BZ187=1;"")
BA230:BI270 Vers CK11:CS51 =Si(AX230=1;"") BO230:BW270 Vers DB11:DJ51 =Si(BZ230=1;"")
BA273:BI313 Vers CK11:CS51 =Si(AX273=1;"") BO273:BW313 Vers DB11:DJ51 =Si(BZ273=1;"")


Plages Sources Vers graphe 2 Barres cote Négatif Plages Sources Vers graphe 2 Barres cote Positif
BA316:BI356 Vers CK57:CS97 =Si(AX316=1;"") BO316:BW356 Vers DB57:DJ97 =Si(BZ316=1;"")
BA359:BI399 Vers CK57:CS97 =Si(AX359=1;"") BO359:BW399 Vers DB57:DJ97 =Si(BZ359=1;"")
BA402:BI442 Vers CK57:CS97 =Si(AX402=1;"") BO402:BW442 Vers DB57:DJ97 =Si(BZ402=1;"")
BA445:BI485 Vers CK57:CS97 =Si(AX445=1;"") BO445:BW485 Vers DB57:DJ97 =Si(BZ445=1;"")
BA488:BI528 Vers CK57:CS97 =Si(AX488=1;"") BO488:BW528 Vers DB57:DJ97 =Si(BZ528=1;"")

Reply
réponses:
  • yg_be

    je ne comprends pas. cela a-t'il un rapport avec ta demande initiale, que je pensais avoir compris?
    si oui, explique ce qui ne te convient pas dans la solution #1.

  • auteur

    Bonsoir
    il n y a rien acomprendre puisque ce sque je demande est xactement la meme chose mais le code de frenchie ne fonctionne pas au depart je pensais que ce ne serait pas un probleme d amener une plage vers une autre le seul soucis est que je pensais que cetait realiseable sans faire de procedure de copier coller mais comme personne ne m a donne de code le l ai fait moi meme en formules
    je t ai explique que le resultat v net

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

le résultat n était pas satisfaisant puisque le format n était pas bon et j étais oblige de multiplie par1 pour avoir le bon résultat
donc le code de frenchie ne fonctionnant pas je te demande simplement de faire un code qui copie les formules et le format vers le graphe selon le shema que je t'ai envoye puique personne n 'est capable de me faire un code autrement que par ce procédé

Reply
réponses:
  • yg_be

    alors utilise ceci à la place de ma suggestion en #15, cela va également préserver le format:

    Private Sub linkrg(target As Range, source As Range) source.Copy target.Parent.Activate target.Select target.Parent.Paste Link:=True target.PasteSpecial (xlPasteFormats) Application.CutCopyMode = False End Sub

  • auteur

    Bonjour
    je le mets ou ce code dans la feuille ou dans un module, et ou je mets le reste et de quelle manière
    je ne retrouve pas ton message 15 sur le site
    j'ai déjà cela comme code dans cette feuille
    je te remets en dessous les plages a copier comment j écrit cela

    Option Explicit

    Private Sub CommandButton1_Click()

    End Sub
    Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Lig As Byte, Col As Byte
    If Not Application.Intersect(Target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
    Range("DP2") = Target
    End If

    End Sub



    BA101:BI141 Vers CK11:CS51 =Si(AX101=1;"") BO101:BW141 Vers DB11:DJ51 =Si(BZ101=1;"")
    BA144:BI184 Vers CK11:CS51 =Si(AX144=1;"") BO144:BW184 Vers DB11:DJ51 =Si(BZ144=1;"")
    BA187:BI227 Vers CK11:CS51 =Si(AX187=1;"") BO187:BW227 Vers DB11:DJ51 =Si(BZ187=1;"")
    BA230:BI270 Vers CK11:CS51 =Si(AX230=1;"") BO230:BW270 Vers DB11:DJ51 =Si(BZ230=1;"")
    BA273:BI313 Vers CK11:CS51 =Si(AX273=1;"") BO273:BW313 Vers DB11:DJ51 =Si(BZ273=1;"")

    BA316:BI356 Vers CK57:CS97 =Si(AX316=1;"") BO316:BW356 Vers DB57:DJ97 =Si(BZ316=1;"")
    BA359:BI399 Vers CK57:CS97 =Si(AX359=1;"") BO359:BW399 Vers DB57:DJ97 =Si(BZ359=1;"")
    BA402:BI442 Vers CK57:CS97 =Si(AX402=1;"") BO402:BW442 Vers DB57:DJ97 =Si(BZ402=1;"")
    BA445:BI485 Vers CK57:CS97 =Si(AX445=1;"") BO445:BW485 Vers DB57:DJ97 =Si(BZ445=1;"")
    BA488:BI528 Vers CK57:CS97 =Si(AX488=1;"") BO488:BW528 Vers DB57:DJ97 =Si(BZ528=1;"")

  • yg_be

    lis le #15

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

je comprends pas ou tu veux en venir ,si tu connais le code tu me le donnes si tu le connais pas et bien tant pis je vais continuer a le chercher
le code de frenchie le voila il n'y a rien de commun avec ce que tu m'envoies
si je prend ce que tu as écrits en complément du code de frenchie ca ne marchera pas
dans le code de frenchie il fait appel a une boite de dialogue MsgBox moi je veux une procédure automatique
tu me parles comme si j avais déjà fait de la programmation
soyons clair je t'ai déjà explique que ce n 'est pas mon job si je connaissais le langage je ne viendrais certainement pas sur ce forum
que faut il faire exactement? je vais pas passer mon temps a jouer a la devinette parce que je suis tenu par un délai
un jour je t’amènerais un bloc de pierres et on verra ce que tu es capable de faire devant......
Bonne après midi

Option Compare Text

Sub RecopiePlage()
Application.ScreenUpdating = False
Cpt = 0
For Each cell In Range("AX101, AX144, AX187, AX230, AX273, BZ101, BZ144, BZ187, BZ230, BZ273")
If cell = "Ok" Then Cpt = Cpt + 1
If Cpt > 1 Then
MsgBox "Il y a plusieurs cellules avec la mention Ok"
Exit Sub
End If
Next

If [AX101] = "Ok" Then
[CK11:CS51] = [BA101:BI141]
ElseIf [AX144] = "Ok" Then
[CK11:CS51] = [BA144:BI184]
ElseIf [AX187] = "Ok" Then
[CK11:CS51] = [BA187:BI227]
ElseIf [AX230] = "Ok" Then
[CK11:CS51] = [BA230:BI270]
ElseIf [AX273] = "Ok" Then
[CK11:CS51] = [BA273:BI313]
ElseIf [BZ101] = "Ok" Then
[CK11:CS51] = [BO101:BO141]
ElseIf [BZ144] = "Ok" Then
[CK11:CS51] = [BO144:BO184]
ElseIf [BZ187] = "Ok" Then
[CK11:CS51] = [BO187:BO227]
ElseIf [BZ230] = "Ok" Then
[CK11:CS51] = [BO230:BO270]
ElseIf [BZ273] = "Ok" Then
[CK11:CS51] = [BO273:BO313]
End If
End Sub

Reply
réponses:
  • yg_be

    je pensais avoir lu que le code de frenchie était bon à part que le format résultant n'était pas correct.
    ce que je propose en #15, adapté en #59, c'est de faire quelques adaptations dans le code de frenchie pour créer des liens au lieu de copier des valeurs, et pour copier aussi les formats.
    ces adaptations ne demandent pas d'expérience de programmation.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

je comprend rien a ce que tu me racontes
dans ce que tu me proposes en 59 je ne vois pas de plages nommées nulle part.....?

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Pour faire des adaptations il faut connaitre le langage surtout a ce niveau la
moi ce qu 'a fait frenchie je n'y comprend rien y a une boite de dialogue qui s ouvre a un moment donné alors que ces cotations tournent en temps réel??????? dit moi de quelle manière je mets l’écriture des plages a remplacer après ton code ça c'est concret
a on fait du sur place et c'est pas comme çà que je vais trouver la solution

Reply
réponses:
  • yg_be

    la boite de dialogue vient quand il y a plusieurs "ok", parce que, vu ce que tu demandes, cela semble être une anomalie à signaler. que doit-il se passer quand il y a plusieurs "ok"?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

il n y a jamais plus de un ok dans les cellules il y a deux graphes je te l 'ai explique un graphe avec 5 plages négatives a gauche et 5 plages pour le positif a droite
la même chose pour le deuxième graphe il y a une cellule qui se met en Ok pour les cinq plages a gauche et une autre cellule qui se met en ok pour les 5 autres plages a droite donc le problème n 'est pas la
il faut considérer que pour les plages par exemple ces 5 plages il ya un ok ou un numéro au choix comme on veut, qui se met chaque fois quand la condition est remplie pas 2 c'est impossible (mais ce que tu n as pas compris et maintenant j en suis sur c'est que il y 4 ok mais un seul ok pour 5 plages d'un cote pour un graphe et un autre OK pour l autre cote du même graphe quand tu as un ok pour BA:BI c'est pareil pour l autre cote de BO :BW et le graphe réceptionne en DB;DJ
attention j ai mis 1 a la place de OK

donc il faut que le code dise:
exemple prenons pour le premier graphe pour BA101;BI141 copier moi les formules et le format de cette plage vers CK11 ;CS51 si la cellule AX101 est egale a 1
copier moi les formules et format plage BA144 :BI184 vers CK11:CS51 si la celluleAX144 est egale a 1...etc

il faut dabord que tu comprennes le principe et pourtant ya rien de plus simple copier des plages vers d'autres plages si telle cellule est egale a 1 tu as en dessous le rappel des plages






BA101:BI141 Vers CK11:CS51 =Si(AX101=1;"")

BA144:BI184 Vers CK11:CS51 =Si(AX144=1;"")

BA187:BI227 Vers CK11:CS51 =Si(AX187=1;"")

BA230:BI270 Vers CK11:CS51 =Si(AX230=1;"")

BA273:BI313 Vers CK11:CS51 =Si(AX273=1;"")




BO101:BW141 Vers DB11:DJ51 =Si(BZ101=1;"")

BO144:BW184 Vers DB11:DJ51 =Si(BZ144=1;"")

BO187:BW227;Vers DB11:DJ51 =Si(BZ187=1;"")

BO230:BW270 Vers DB11:DJ51 =Si(BZ230=1;"")

BO273:BW313 Vers DB11:DJ51 =Si(BZ273=1;"")



BA316:BI356 Vers CK57:CS97 =Si(AX316=1;"")

BA359:BI399 Vers CK57:CS97 =Si(AX359=1;"")

BA402:BI442 Vers CK57:CS97 =Si(AX402=1;"")

BA445:BI485 Vers CK57:CS97 =Si(AX445=1;"")

BA488:BI528 Vers CK57:CS97 =Si(AX488=1;"")





BO316:BW356 Vers DB57:DJ97 =Si(BZ316=1;"")

BO359:BW399 Vers DB57:DJ97 =Si(BZ359=1;"")

BO402:BW442 Vers DB57:DJ97 =Si(BZ402=1;"")

BO445:BW485 Vers DB57:DJ97 =Si(BZ445=1;"")

BO488:BW528 Vers DB57:DJ97 =Si(BZ528=1;"")

Reply
réponses:
  • yg_be

    bizarre que tu aies la boite de dialogue si il n'y a jamais plus d'un OK dans AX101, AX144, AX187, AX230, AX273, BZ101, BZ144, BZ187, BZ230, BZ273...

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

si il ya un ok de chaque cote
un seul pourAX101, AX144, AX187, AX230, AX273,

un, autre pour BZ101, BZ144, BZ187, BZ230, BZ273... plus deux autres sur l autre graphe
c'est quoi qui t’empêche de faire ce code???

""copier moi la plage correspondante un tel vers plage du graphe si dans une de ces 5 cellules il y a un ok ""
c'est quoi qui te gêne, écrire la condition????
parce que je suppose que le code, copier moi cette plage vers cette plage ne doit pas être compliqué pour quelqu'un qui connait le VBA

Reply
réponses:
  • yg_be

    (écrire le code est très simple. te comprendre est quasi impossible. communiquer avec toi est presque surhumain.)
    relis ta description de départ:
    si dans la cellule AX101 est inscrit"OK" affichez moi le contenue de la plage BA101:BI141 en CK11:CS51
    (...)
    si dans la cellule BZ101 est inscrit"OK" affichez moi le contenue de la plage BO101:BX141en CK11:CS51

    que doit-il se passer si il y a OK en AX101 et aussi en BZ101?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

tout simplement ce que j ai écrit si il ya ok dans AX101 c'est la plage BA101;BA141 qui va s'inscrire en CK11 ;CS51 et si au même moment ou différé peu importe il y a aussi inscrit OK en BZ101 et bien la plage BO101;BO141 s'inscrira de l autre cote vers DB11;DJ51
il en va ainsi pour les autres plages tel que je t'ai envoyé le descriptif
ya rien de sorcier ni d'inhumain dans tout ca
tu n 'as pas compris qui'l y a des plages d'un cote et de l autre et chaque cellule ou s'inscrivent les OK ont une plage correspondante

BA101:BI141 Vers CK11:CS51 =Si(AX101=1;"")

BA144:BI184 Vers CK11:CS51 =Si(AX144=1;"")

BA187:BI227 Vers CK11:CS51 =Si(AX187=1;"")

BA230:BI270 Vers CK11:CS51 =Si(AX230=1;"")

BA273:BI313 Vers CK11:CS51 =Si(AX273=1;"")




BO101:BW141 Vers DB11:DJ51 =Si(BZ101=1;"")

BO144:BW184 Vers DB11:DJ51 =Si(BZ144=1;"")

BO187:BW227;Vers DB11:DJ51 =Si(BZ187=1;"")

BO230:BW270 Vers DB11:DJ51 =Si(BZ230=1;"")

BO273:BW313 Vers DB11:DJ51 =Si(BZ273=1;"")



BA316:BI356 Vers CK57:CS97 =Si(AX316=1;"")

BA359:BI399 Vers CK57:CS97 =Si(AX359=1;"")

BA402:BI442 Vers CK57:CS97 =Si(AX402=1;"")

BA445:BI485 Vers CK57:CS97 =Si(AX445=1;"")

BA488:BI528 Vers CK57:CS97 =Si(AX488=1;"")





BO316:BW356 Vers DB57:DJ97 =Si(BZ316=1;"")

BO359:BW399 Vers DB57:DJ97 =Si(BZ359=1;"")

BO402:BW442 Vers DB57:DJ97 =Si(BZ402=1;"")

BO445:BW485 Vers DB57:DJ97 =Si(BZ445=1;"")

BO488:BW528 Vers DB57:DJ97 =Si(BZ528=1;"")

Reply
réponses:
  • yg_be

    ah, je comprends, tu as changé d'avis après avoir décrit ce que tu souhaitais que nous fassions pour toi.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

absolument pas tu as bien vu que dans le premier message j avais fait une erreur d'ecriture javais marque
si dans la cellule BZ187 est inscrit"OK" affichez moi le contenue de la plage BO187:BX227en CK11:CK51
alors qu il fallait inscrire
si dans la cellule BZ187 est inscrit"OK" affichez moi le contenue de la plage BO187:BW227en DB11:DJ51
je n ai absolument pas changé, quand j ai vu que tu ne pouvais pas faire la procédure comme je le voulais sans copié collé j ai fait ma solution en formules tel que je le concevais et je t ai dit que je n étais pas satisfait du résultat a cause du format et de l obligation de créer un double de la plage puis de copier par 1 pour avoir le bon format donc comme tu n as pas d autres solution que celle du copie colle les formules et le format il est evident que je vais faire avec mais ne me dit pas que j ai change d avis si tu m avais trouve l équivalent en code de ce que j ai réalisé en formules ;je n aurais jamais été vers la solution du copié collé

Reply
réponses:
  • yg_be

    alors tu peux supprimer les lignes 24 à 33 du code de frenchie, et, dans la ligne 6, supprimer ce qui commence par B. cela devrait faire ce que tu demandes pour la ligne CK.
    tu pourras adapter ensuite, si cela fonctionne bien, pour ajouter la ligne DB.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

salut j ai fait comme tu m 'as dits mais ca ne fonctionne pas
jai mis le code dans un module comme ceci j ai essaye aussi en supprimant la partie du code qui concerne la Msgbox puisqu elle n 'est pas utile je te mets les 2 codes que j ai essaye en dessous

If Cpt > 1 Then
MsgBox "Il y a plusieurs cellules avec la mention Ok"
Exit Sub

Option Compare Text

Sub RecopiePlage()
Application.ScreenUpdating = False
Cpt = 0
For Each cell In Range("AX101, AX144, AX187, AX230, AX273")
If cell = "Ok" Then Cpt = Cpt + 1
If Cpt > 1 Then
MsgBox "Il y a plusieurs cellules avec la mention Ok"
Exit Sub
End If
Next

If [AX101] = "Ok" Then
[CK11:CS51] = [BA101:BI141]
ElseIf [AX144] = "Ok" Then
[CK11:CS51] = [BA144:BI184]
ElseIf [AX187] = "Ok" Then
[CK11:CS51] = [BA187:BI227]
ElseIf [AX230] = "Ok" Then
[CK11:CS51] = [BA230:BI270]
ElseIf [AX273] = "Ok" Then
End If
End Sub


Option Compare Text

Sub RecopiePlage()
Application.ScreenUpdating = False
Cpt = 0
For Each cell In Range("AX101, AX144, AX187, AX230, AX273")
If cell = "Ok" Then Cpt = Cpt + 1
End If
If [AX101] = "Ok" Then
[CK11:CS51] = [BA101:BI141]
ElseIf [AX144] = "Ok" Then
[CK11:CS51] = [BA144:BI184]
ElseIf [AX187] = "Ok" Then
[CK11:CS51] = [BA187:BI227]
ElseIf [AX230] = "Ok" Then
[CK11:CS51] = [BA230:BI270]
ElseIf [AX273] = "Ok" Then
End If
End Sub

Reply
réponses:
  • yg_be

    "ca ne fonctionne pas": que veux-tu dire précisément? message d'erreur?
    as-tu essayé de faire tourner ce code?
    comme écrit en #8, il est important de toujours clairement et concisément décrire quand le code doit être exécuté, et ce qu'il doit faire.

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

bien sur que j ai essaye mais rien ne sepasse ni aucun message d'erreur
mais deja ya un truc qui est evident c'est que la procedure de megabox doit etre retire
apres je sais pas si dans le deuxieme code que je t'ai envoyé ,si après If cell = "Ok" Then Cpt = Cpt + 1 il faut écrire End If ou le supprimer et passer directement a If
je l ai mis dans un module normal parce que dans la feuille concernée j ai déjà ce code que je te donne en premier
maintenant il faut que tu me dises ce qui ne va pas dans le deuxième code que j ai essaye(je te le remets tout en dessous

Option Explicit

Private Sub CommandButton1_Click()

End Sub
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lig As Byte, Col As Byte
If Not Application.Intersect(Target, Range("CV12:CV51,CX12:CX51,CV58:CV97,CX58:CX97")) Is Nothing Then
Range("DP2") = Target
End If
End Sub


Option Compare Text

Sub RecopiePlage()
Application.ScreenUpdating = False
Cpt = 0
For Each cell In Range("AX101, AX144, AX187, AX230, AX273")
If cell = "Ok" Then Cpt = Cpt + 1
End If
If [AX101] = "Ok" Then
[CK11:CS51] = [BA101:BI141]
ElseIf [AX144] = "Ok" Then
[CK11:CS51] = [BA144:BI184]
ElseIf [AX187] = "Ok" Then
[CK11:CS51] = [BA187:BI227]
ElseIf [AX230] = "Ok" Then
[CK11:CS51] = [BA230:BI270]
ElseIf [AX273] = "Ok" Then
End If
End Sub

Reply
réponses:
  • yg_be

    qui est megabox?
    qui appelle RecopiePlage()?

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

je comprenda pas ce que tu me dits la megabox est une boite de dialogue dans notre cas on en a pas besoin elle intervenait juste si il y avait deux OK sur les mêmes plages hors ce n 'est plus le cas et je vois mal comment dans une procédure en temps réel qui ne doit en aucun cas être interrompu il devrait y avoir une boite qui s'ouvre
ce bout de code veut dire que si ya un comptage de OK supérieur a 1 la procédure se stoppe et fin


If Cpt > 1 Then
MsgBox "Il y a plusieurs cellules avec la mention Ok"
Exit Sub

Reply
réponses:
  • yg_be

    qui appelle RecopiePlage()?
    pour supprimer la boite de dialogue du code de franchie, tu peux supprimer les lignes de 6 à 12, du "for each" au "next".

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Comme cela ???
a la fin il faut le End If avant End Sub?
ça ne fonctionne toujours pas pour moi ce code doit être bon mais il est pas ou il doit être .....?????
il est pas a sa place ou alors c'est dans un module spécial qu il faut l 'ajouter



Option Compare Text

Sub RecopiePlage()
Application.ScreenUpdating = False
Cpt = 0
If [AX101] = "Ok" Then
[CK11:CS51] = [BA101:BI141]
ElseIf [AX144] = "Ok" Then
[CK11:CS51] = [BA144:BI184]
ElseIf [AX187] = "Ok" Then
[CK11:CS51] = [BA187:BI227]
ElseIf [AX230] = "Ok" Then
[CK11:CS51] = [BA230:BI270]
ElseIf [AX273] = "Ok" Then
[CK11:CS51] = [BA273:BI313]
End If
End Sub

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

je crois que tu te payes de ma tète parce que moi qui connait rien je suis arrive par une macro toute simple a faire la procédure de = comme l je le voulais au départ(mis a part qu il n y a pas la condition et quelle n'est pas automatique) en faisant ce petit code alors explique moi maintenant comment tu faits pour y greffer la procédure de OK et ce sur plusieurs plages
et ne me dits pas que tu sais pas je vais pas te croire...... tu donnes les infos au compte goutte.
je viens d'essaye encore un nouveau code et ça marche pas
avec le peu d'info que tu as bien voulu lâcher
je passe des heures a me prendre la tète alors que je suis sur que pour un gars qui connait il ne faut pas 5 mn pour le faire c'est désespérant, je crois bien que je vais aller sur un autre forum parce que ici vous êtes pasdu tout cool et vous avez les chevilles qui enflent
vous répondez jamais aux questions vous prenez toujours des portes a coté
ou vous êtes de mauvaise fois ou alors des branquignolles ou alors vous avez le vice en vous
heureusement que chez les compagnons il n y a pas cette mentalité
je vous laisse à vos travers

Sub RecopiePlage()
Range("BA101:BI141").Select
Selection.Copy
Range("CK11:CS51").Select
ActiveSheet.Paste Link:=True

End Sub


Private Sub linkrg(target As Range, source As Range)
source.Copy
target.Parent.Activate
target.Select
target.Parent.Paste link:=True
target.PasteSpecial (xlPasteFormats)
Application.CutCopyMode = Fals

If [AX101] = "Ok" Then
Call linkrg([CK11:CS51] = [BA101:BI141])
ElseIf [AX144] = "Ok" Then
Call linkrg([CK11:CS51] = [BA144:BI184])
ElseIf [AX187] = "Ok" Then
Call linkrg([CK11:CS51] = [BA187:BI227])
ElseIf [AX230] = "Ok" Then
Call linkrg([CK11:CS51] = [BA230:BI270])
ElseIf [AX273] = "Ok" Then
Call linkrg([CK11:CS51] = [BA273:BI313])
End If
End Sub

Reply
réponses:
  • yg_be

    en #15, quand j'écrivais "ajouter ceci dans le même module:", je sous-entendais "tout en bas du module", en tous cas en dehors d'une procédure existante.
    le mieux, quand tu modifies du code, est d'immédiatement vérifier que la syntaxe est correcte, pour éviter de découvrir des erreurs beaucoup plus tard. pour cela: clique sur Débogage > Compiler VBAProject
    lecture utile: https://www.commentcamarche.com/contents/1381-debogage

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed