XL 2019 Correction code VBA

Shenzar

XLDnaute Nouveau
Bonsoir,

Je encore novice et je bloque sur une chose

Je cherche sur un même tableau à afficher des valeur différentes en fonction du choix d'une liste déroulante en A1

VB:
Sub Etgaes()

Dim P1E1OE As Variant
Dim P1E2OE As Variant
Dim P1E3OE As Variant
Dim P1E4OE As Variant

Dim P3E1OE As Variant
Dim P3E2OE As Variant
Dim P3E3OE As Variant
Dim 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 = P2 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

Le résultat vient d'un autre tableau cacher ou son rassembler des tonnes de pourcentages que je voudrais afficher par zones de P1 a P4 et en fonction du choix il affiche le résultat

J'ai essayé plusieurs choses sans succès
 
Dernière édition:

fanfan38

XLDnaute Barbatruc
Bonjour
Je te propose:
VB:
Sub Etgaes()
  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

Select Case Range("A1").Value
 Case Is = P1
   Cells(14, 4).Value = P1E1OE
   Cells(14, 5).Value = P1E2OE
   Cells(8, 4).Value = P1E3OE
   Cells(8, 5).Value = P1E4OE
 Case Is = P2
   Cells(14, 4).Value = P3E1OE
   Cells(14, 5).Value = P3E2OE
   Cells(8, 4).Value = P3E3OE
   Cells(8, 5).Value = P3E4OE
End Select
End Sub
A+ François
 

Shenzar

XLDnaute Nouveau
Merci fanfan38 je test ça et merci d'avoir simplifier le code, tu m'appends des choses sur la déclaration des variables

Par contre pour le select case sa ne fonctionne pas :( quand je bidouille un peu des choses fonctionne mais pas bien probant j'ai dû me plante quelque part
 

laurent950

XLDnaute Accro
Bonsoir le forum.

Ps : le code a fanfan38 est une bonne approche avec le select case et un très bon code.
Eriiiic à raison pour les "" qui correspond à une chaîne de caractères, et donc écrire "P1" comme cela.

VB:
Sub Etgaes()

Dim P1E1OE As Variant
    P1E1OE = Cells(19, 8)
Dim P1E2OE As Variant
    P1E2OE = Cells(18, 8)
Dim P1E3OE As Variant
    P1E3OE = Cells(25, 8)
Dim P1E4OE As Variant
    P1E4OE = Cells(24, 8)

Dim P3E1OE As Variant
    P3E1OE = Cells(71, 8)
Dim P3E2OE As Variant
    P3E2OE = Cells(70, 8)
Dim P3E3OE As Variant
    P3E3OE = Cells(77, 8)
Dim P3E4OE As Variant
    P3E4OE = Cells(76, 8)
Dim A As Range
    Set A = Range("A1")
   
    If A.Value = "P1" Then
        Cells(14, 4) = P1E1OE
        Cells(14, 5) = P1E2OE
        Cells(8, 4) = P1E3OE
        Cells(8, 5) = P1E4OE
    ElseIf A.Value = "P2" Then
        Cells(14, 4) = P3E1OE
        Cells(14, 5) = P3E2OE
        Cells(8, 4) = P3E3OE
        Cells(8, 5) = P3E4OE
    End If
   
' Ps : Declaration des variables
' P1E1OE = Cells(19, 8) s'écrit comme cela // est le Cells(19, 8).value est inutile

' Lorsqu'il y a un point c'est un objet donc A.value (A est un objet) de la classe Range
' est donc Dim A As Range pour A (et donc le .value a sont importance)
' Pour le .Value il faut passé l'instruction avec le Set A = Range("A1")
' Ainsi le A. (A des méthodes et des propriété de la classe range d'ou la Valeur pour .value)
   
End Sub
 

Shenzar

XLDnaute Nouveau
Merci Laurent sa marche pas mal :)

Je cherché justement comment faire plusieurs condition à la suite : ElseIf je vais accélérer mes cours sur le vba avancé

Je me poser la question sur
Dim A As Range
Set A = Range("A1")

Je vais regarder encore pour bien comprendre

Petite question, je vois que tu as déclarer et affecter les variable à la suite et tu les as appelé différemment dans la mienne

Quand tu fais un appel de type P1E1OE = Cells(19, 8).Value

On peut retirer le .Value et faire Cells(14, 4) = P1E1OE

Ou la condition et de faire un Set A suivi de If A.value avant

comme pour

VB:
With ActiveCell
    .Borders.Weight = 3
    With .Font
        .Bold = True
        .Size = 18
        .Italic = True
        .Name = "Arial"
    End With
End With

Au lieu de faire

Code:
'ActiveCell.Borders.Weight = 3
'ActiveCell.Font.Bold = True
'ActiveCell.Font.Size = 18
'ActiveCell.Font.Italic = True
'ActiveCell.Font.Name = "Arial"
 

laurent950

XLDnaute Accro
En réponse au poste #6

un Set A suivi de If A.value avant
en considérant que la cellule Active pour "ActiveCell" est la cellule A1

Puis des exemples avec cette même variable objet (Pour une cellule ou une plage de cellule) ci dessous.

VB:
Dim A As Range
    Set A = ActiveCell
        ' ou
        'Set A = Cells("A1")
        'Set A = Cells(1, 1)
        ' Ou une plage
        'set A = Range("A1:A2")
        Set A = Range(Cells(1, 1), Cells(2, 1))
        ' Value de A1
        'MsgBox A(1, 1) ' Valeur A1
        'MsgBox A(2, 1) ' Valeur A2
        'MsgBox A(A.Row, A.Column)  ' Valeur A1
        'MsgBox A(A.Row + 1, A.Column) ' Valeur A2
        'MsgBox A(A.Offset(0, 0).Row, A.Column) ' Valeur A1
        'MsgBox A(A.Offset(1, 0).Row, A.Column) ' Valeur A2
        '' etc La puissance de la variable Objet

With A
    .Borders.Weight = 3
    With .Font
        .Bold = True
        .Size = 18
        .Italic = True
        .Name = "Arial"
    End With
End With

End Sub
 

Shenzar

XLDnaute Nouveau
Super tes explications, je telecharge en PDF pour garder une trace de tes explications :)

J'ai profiter du jour ferié pour me pense sur le cour d'excel pratique sur le select case et comprendre ce qui a été proposer

J'ai ressayer avec la méthode select case pour comprendre tout ce qui a été dit pour apprendre à la reproduire seul, celle de fanfan38 fonctionne si je mets la variable etg en integer et remplacer P1 par Case Is = 1

Celle d'Eric fonctionne aussi en variable etg$ Case "P1"

Celle de laurent marche super bien avec le set et if, elseif que j'ai gardé pour d'autres travaux

Le code que j'ai refais solo en testant des trucs pour comprendre quand je changeais une variable pour afficher des erreurs et comprendre quand eric parlait d'initialisation de variable

VB:
Sub etg()

Dim P1A As Variant, P1B As Variant, P1C As Variant, P1D As Variant, P1E As Variant, P1F As Variant
Dim P2A As Variant, P2B As Variant, P2C As Variant, P2D As Variant, P2E As Variant, P2F As Variant

Dim etg$

etg = Range("A31")

P1A = Cells(31, 8)
P1B = Cells(32, 8)
P1C = Cells(33, 8)
P1D = Cells(34, 8)
P1E = Cells(35, 8)
P1F = Cells(36, 8)

P2A = Cells(37, 8)
P2B = Cells(38, 8)
P2C = Cells(39, 8)
P2D = Cells(40, 8)
P2E = Cells(41, 8)
P2F = Cells(42, 8)

Select Case etg
    Case "P1"
        Cells(32, 1) = P1A
        Cells(34, 1) = P1B
        Cells(32, 2) = P1C
        Cells(34, 2) = P1D
        Cells(32, 3) = P1E
        Cells(34, 3) = P1F
    Case "P2"
        Cells(32, 1) = P2A
        Cells(34, 1) = P2B
        Cells(32, 2) = P2C
        Cells(34, 2) = P2D
        Cells(32, 3) = P2E
        Cells(34, 3) = P2F
    Case Else
        MsgBox "Veuillez sélectionner un étage"
End Select

End Sub
 

eriiic

XLDnaute Barbatruc
Bonjour,

As Variant, ce n'est pas nécessaire de le mettre puisque c'est c'est le type par défaut.
Le but du jeu est de les typer au plus proche du besoin.
Une chaine : As String,
un entier : As Long,
un décimal : As Double, etc
Que ce soit plus rapide, et qu'éventuellement ça te génère une erreur àsi tu t'es trompé.
eric
 

Statistiques des forums

Discussions
312 520
Messages
2 089 281
Membres
104 083
dernier inscrit
hecko