Correction de Code

Bonjour à vous

Je passe mon dimanche à m'exercer sur du codage et je coince sur une chose

J'ai un onglet ou sont afficher pleins de pourcentages selon des étages de P1 a P4

Un autre onglet avec un tout jolie mini tableau avec une liste déroulante et en fonction du choix sa affiche les pourcentages de la zone

Mais les pourcentages s'affiche pas tellement, ou avec des bidouillages pas très probant sa affiche mais pas le reste ou les cases restent vide

J'ai essayé aussi avec :

Select Case range ("A1").Value
Case Is = P1
.....
Case Is = P3
....
End Select

Sa marche pas non plus

Voici le code de base de ce qui est sortie de ma tête après

Sub etg ()

Dim P1E1OE As Variant, P1E2OE As Variant, P1E3OE As Variant, P1E4OE As Variant
Dim P3E1OE As Variant, P3E2OE As Variant, P3E3OE As Variant, P3E4OE As Variant

P1E1OE = Cells(19, 8).Value
P1E2OE = Cells(18, 8).Value
P1E3OE = Cells(25, 8).Value
P1E4OE = Cells(24, 8).Value

P3E1OE = Cells(71, 8).Value
P3E2OE = Cells(70, 8).Value
P3E3OE = Cells(77, 8).Value
P3E4OE = Cells(76, 8).Value

For Each A In Range("A1")
    If A.Value = P1 Then
        Cells(14, 4).Value = P1E1OE
        Cells(14, 5).Value = P1E2OE
        Cells(8, 4).Value = P1E3OE
        Cells(8, 5).Value = P1E4OE

    End If
Next A

For Each A In Range("A1")
    If A.Value = P3 Then
        Cells(14, 4).Value = P3E1OE
        Cells(14, 5).Value = P3E2OE
        Cells(8, 4).Value = P3E3OE
        Cells(8, 5).Value = P3E4OE

    End If
Next A

End Sub

Bonsoir

Le code ne fait rien en fait.

Possible de mettre votre fichier en ligne sans données confidentielles ??

Bonsoir

Merci Eriic !

@Shenzar, dommage que vous ne précisez pas que vous avez déjà aussi effectué une demande ailleurs...

Sinon comme je viens juste de voir le mot d'Eriic et que j'ai fait le code, voici à tester

Sub etg()
Dim i as byte
Select Case Range("A1")
    Case Is = "P1": i = 18
    Case Is = "P3": i = 70
End Select

    Cells(14, 4).Value = Cells(i + 1, 8).Value
    Cells(14, 5).Value = Cells(i, 8).Value
    Cells(8, 4).Value = Cells(i + 7, 8).Value
    Cells(8, 5).Value = Cells(i + 6, 8).Value

End Sub

Merci de cloturer le fil si ok

Cordialement

Il ne faut y voir aucun mal la dedans, je suis inscrit sur quasi tous les forums de excel pour apprendre, et si j'ai acheter le premium de cours de excel pratique c'est pour apprendre, j'essaye d'apprendre de tout le monde et de cogiter sur toutes les réponses qui sont données, il n y a aucun esprit malsain, des idées vont être données par les uns et les autres car chacun va avoir une approche différentes de la manière de programmer et c'est intéressant de voir que chacun à une manière différentes ce qui me pose à savoir d'ou vient par exemple le Case Is = "P1": i = 18 alors que d'autres vont aller vers une autre approche que je puisse comprendre plutot que de copier coller

Si vous vous êtes senti rabaisser par cela, j'en m'en excuse

Vous pouvez supprimer le sujet

Rassure-toi, on ne se sent pas rabaissés.

C'est surtout que si tu signales par des liens, on peut aller voir les avancées et éviter les redites inutiles.

Sinon c'est plus sympa d'attendre 24 ou 48h sans réponse avant de poster ailleurs, et de laisser en plan un autre topic où tu as eu des réponses...

Comme j'avais émis des hypothèses et posé des questions là-bas, je n'allais pas refaire ici.

eric

Loin de moi l'idée de laisser un sujet en plan parce que j'ai eu la réponse ailleurs, mais tu as raison sur le fait qu'il faut savoir patienter pour avoir une réponse à un sujet et ne pas s'empresser de poser la question à deux endroits pour voir qui va répondre le plus vite. même si ce n'est pas mon intention première, mais je cherche la richesse des réponses et de ce que je peux apprendre sur plusieurs endroit à la fois, ce qui n'est peut être pas bon

Bon courage !

Shenzar

Re

Shenzar, on n'est pas rabaissé et votre démarche est excellente pour apprendre. Chacun de nous fait ou à fait cela.

Comme le dit Eriic dans son message, si vous postez également ailleurs c'est sympa de le signaler sur le forum que vous demandez aussi réponse ailleurs.

Pour répondre à votre question :

ce qui me pose à savoir d'ou vient par exemple le Case Is = "P1": i = 18

Case is P1 --> est le cas où la cellule A1 contient P1

Dans ce cas, on pose la variable i à la valeur de 18. Le 18 étant la référence de la ligne de votre feuille

Si d'autres questions n'hésitez pas en tout cas

Cordialement

Re

Heu Shenzar ? votre fil est cloturé ou c'est une erreur ?

Une erreur de ma part

Je vous remercie

quand tu dis : Cells(i + 1, 8)

I égale à la ligne, sa coule de source, je le savais pourtant je l'utilise souvent sa m'avais échapper le temps d'un instant

Quand tu dis i + 1, .. c'est un genre d'incrémentation ou une addition ?

Bonjour

Quand tu dis i + 1, .. c'est un genre d'incrémentation ou une addition ?

Dans le cas présent, ce n'est pas une addition ni vraiment une incrémentation.

Disons que j'avais remarqué que l'écart entre les lignes était constant selon que l'on utilise P1 ou P3.

Partant de ce constat, j'ai donc attribué une valeur à une variable i de départ en y ajoutant un écart de 1, 6 ou 7 pour définir la cellule à compléter.

Du coup, vous n'avez pas besoin de déclarer les variables P1E1OE,..... elles ne servent plus à rien

Cordialement

D'accord je comprends

Y a t'il une formation spécifique au vba ? je suis a la base dans l'automatisme programmation automate, as tu un livre a proposer ou video en plu de ce site ?

Bonjour

Y a t'il une formation spécifique au vba ? je suis a la base dans l'automatisme programmation automate, as tu un livre a proposer ou video en plu de ce site ?

Si vous voulez acheter un livre, je vous conseille ceux réalisés par J. Walkenbach.

Sinon ne pas oublier l'enregistreur automatique puis modifier le code ensuite. Mon ami Th. Pourtier (Ti sur les forums), décédé aujourd'hui, m'a dit il y a des années qu'il utilisait très souvent cette méthode et adaptait ensuite.

Cordialement

Paix à son âme, c'est un bon conseil

J'ai télécharger ton cour et suis déjà à la page 30, pas mal du tout

J'avais une question supplémentaire sur ce code de programmation plus le temps avance sur les cours que je suis sur ce site et le pdf que je viens de penser a une chose

Le code marche très bien, du moment que les lignes ne bouge pas

capture

Dans le cas ou les cellules bougent sachant que le fichier qui donnent les valeurs et un fichier extérieur passer par X1=cells=(x,x) ==> cells(x,x)=X1 se trouve faux si les cellules bougent

capture1

Dans ce cas quel serait l'idéal ? Passer par un Application.VLookup en se basant sur le texte pour renvoyer sa valeur en disant si tu trouve le texte ###1-A alors 10

Le resultat final :

3

Mon test qui a l'air de fonctionner en cherchant de le texte qu'en pensez vous de cette amélioration

Sub sText()

'Déclarations & Types
Dim P1A#, P1B#, P1C#, P1D#, P1E#, P1F#
Dim P2A#, P2B#, P2C#, P2D#, P2E#, P2F#
Dim P3A#, P3B#, P3C#, P3D#, P3E#, P3F#
Dim P4A#, P4B#, P4C#, P4D#, P4E#, P4F#
Const Lignes% = 60

'Affectation
For i = 2 To Lignes
 If Cells(i, 1) = "1-01-A" Then
 P1A = Cells(i, 2)
 ElseIf Cells(i, 1) = "1-01-B" Then
 P1B = Cells(i, 2)
 ElseIf Cells(i, 1) = "1-02-C" Then
 P1C = Cells(i, 2)
 ElseIf Cells(i, 1) = "1-02-D" Then
 P1D = Cells(i, 2)
 ElseIf Cells(i, 1) = "1-03-E" Then
 P1E = Cells(i, 2)
 ElseIf Cells(i, 1) = "1-03-F" Then
 P1F = Cells(i, 2)
 ElseIf Cells(i, 1) = "2-01-A" Then
 P2A = Cells(i, 2)
 ElseIf Cells(i, 1) = "2-01-B" Then
 P2B = Cells(i, 2)
 ElseIf Cells(i, 1) = "2-02-C" Then
 P2C = Cells(i, 2)
 ElseIf Cells(i, 1) = "2-02-D" Then
 P2D = Cells(i, 2)
 ElseIf Cells(i, 1) = "2-03-E" Then
 P2E = Cells(i, 2)
 ElseIf Cells(i, 1) = "2-03-F" Then
 P2F = Cells(i, 2)
 ElseIf Cells(i, 1) = "3-01-A" Then
 P3A = Cells(i, 2)
 ElseIf Cells(i, 1) = "3-01-B" Then
 P3B = Cells(i, 2)
 ElseIf Cells(i, 1) = "3-02-C" Then
 P3C = Cells(i, 2)
 ElseIf Cells(i, 1) = "3-02-D" Then
 P3D = Cells(i, 2)
 ElseIf Cells(i, 1) = "3-03-E" Then
 P3E = Cells(i, 2)
 ElseIf Cells(i, 1) = "3-03-F" Then
 P3F = Cells(i, 2)
 ElseIf Cells(i, 1) = "4-01-A" Then
 P4A = Cells(i, 2)
 ElseIf Cells(i, 1) = "4-01-B" Then
 P4B = Cells(i, 2)
 ElseIf Cells(i, 1) = "4-02-C" Then
 P4C = Cells(i, 2)
 ElseIf Cells(i, 1) = "4-02-D" Then
 P4D = Cells(i, 2)
 ElseIf Cells(i, 1) = "4-03-E" Then
 P4E = Cells(i, 2)
 ElseIf Cells(i, 1) = "4-03-F" Then
 P4F = Cells(i, 2)
 End If
Next

'Appel
Cells(2, 4) = P1A
Cells(3, 4) = P1B
Cells(4, 4) = P1C
Cells(5, 4) = P1D
Cells(6, 4) = P1E
Cells(7, 4) = P1F
Cells(8, 4) = P2A
Cells(9, 4) = P2B
Cells(10, 4) = P2C
Cells(11, 4) = P2D
Cells(12, 4) = P2E
Cells(13, 4) = P2F
Cells(14, 4) = P3A
Cells(15, 4) = P3B
Cells(16, 4) = P3C
Cells(17, 4) = P3D
Cells(18, 4) = P3E
Cells(19, 4) = P3F
Cells(20, 4) = P4A
Cells(21, 4) = P4B
Cells(22, 4) = P4C
Cells(23, 4) = P4D
Cells(24, 4) = P4E
Cells(25, 4) = P4F

End Sub
capture

Re,

Le code marche très bien, du moment que les lignes ne bouge pas

Ok mais cela correspond pas à la demande initiale dont le code était exécuté en fonction de la valeur en cellule A1.

Mon test qui a l'air de fonctionner en cherchant de le texte qu'en pensez vous de cette amélioration

La déclaration des variables ne sert pas puisque vous pouvez directement faire la même chose en moins de lignes de code et sans utiliser de variables qui, in fine, utilisent de la mémoire inutilement.

Comme ceci :

Sub sText()

Const Lignes As Integer = 60

'Affectation
For i = 2 To Lignes
 If Cells(i, 1) = "1-01-A" Then
    Cells(2, 4) = Cells(i, 2)

 ElseIf Cells(i, 1) = "1-01-B" Then
    Cells(3, 4) = Cells(i, 2)

 ElseIf Cells(i, 1) = "1-02-C" Then
    Cells(4, 4) = Cells(i, 2)

 Elseif...
 .... 

Oui effectivement sa n'a rien à voir avec la demande initiale, mais le fichier et rester sur la demande initiale et restera comme cela et c'est parfait !

Mais j'ai aussi un fichier formation.excel.xlsm ou je m'amuse à modifier ce que vous m'apprenez et ce que ce j'apprends sur les docs etc.

Pour avoir des idées sur des futurs développement. l'idée de chercher par le texte m'est parvenu en réfléchissant sur d'autres projets, même si je suis sur qu'il y a moins casse tête et beaucoup mieux et que les pro d'excel rigolent devant ce bout de code

Mais tu m'apprends une nouvelles chose par rapport à ce que j'ai fais

Merci encore se sera tout pour ce post, pour le moment en espérant que sa aidera d'autres

Rechercher des sujets similaires à "correction code"