OVH Cloud OVH Cloud

VBA Excel - Besoin d'un serieux coup de pouce

4 réponses
Avatar
Michael
Bonjour,

Je souhaiterais savoir si quelqu'un connait une méthode pour pouvoir faire
ce qui suit :

Imaginons un tableau a 2 colonnes et 500 lignes

Je voudrais pouvoir, lorsque la valeur d'une cellule de la deuxième colonne
est ABCD (il y en a plusieurs), recuperer les valeurs correspondantes de la
1ere colonne.

Exemple :

1 ABCD
2 XYZ
3 ABCD
4 ABCD
5 XYZ

RESULTAT : 1+3+4

J'éspère etre assez clair pour que quelqu'un puisse me donner ne serait-ce
qu'un début de réponse.

Merci d'avance.
Michael.

4 réponses

Avatar
Bécarré
"Michael" a écrit :

Bonjour,

Je souhaiterais savoir si quelqu'un connait une méthode pour pouvoir faire
ce qui suit :

Imaginons un tableau a 2 colonnes et 500 lignes

Je voudrais pouvoir, lorsque la valeur d'une cellule de la deuxième colonne
est ABCD (il y en a plusieurs), recuperer les valeurs correspondantes de la
1ere colonne.

Exemple :

1 ABCD
2 XYZ
3 ABCD
4 ABCD
5 XYZ

RESULTAT : 1+3+4

J'éspère etre assez clair pour que quelqu'un puisse me donner ne serait-ce
qu'un début de réponse.

Merci d'avance.
Michael.

En inversant les colonnes (en posant C1 = +A1, C2 = +A2, ...), il y a moyen d'utiliser la fonction somme.si : =SOMME.SI(B1:C5;"ABCD";C1:C5)=8, mais c'est hors VBA, ...


Je ne sais pas si ça répond ...



Avatar
Hervé
Bonjour Michael,
En supposant que les colonnes son A et B et que les lettres cherchées (ABCD)
se trouvent en colonne B. Les valeur situées en colonne A sont récupérées
dans un tableau et affichées ensuite dans la fenêtre d'exécution :

Sub Recup()
Dim Plage As Range
Dim Cel As Range
Dim Tbl()
Dim I As Long

With Worksheets("Feuil1")
Set Plage = .Range(.[B1], .[B63536].End(3))
End With

For Each Cel In Plage
If Cel = "ABCD" Then
I = I + 1
ReDim Preserve Tbl(1 To I)
Tbl(I) = Cel.Offset(0, -1).Value
End If
Next Cel

For I = 1 To UBound(Tbl)
Debug.Print Tbl(I)
Next I

Set Cel = Nothing
Set Plage = Nothing
Erase Tbl
End Sub

Hervé.

"Michael" a écrit dans le message news:
#
Bonjour,

Je souhaiterais savoir si quelqu'un connait une méthode pour pouvoir faire
ce qui suit :

Imaginons un tableau a 2 colonnes et 500 lignes

Je voudrais pouvoir, lorsque la valeur d'une cellule de la deuxième


colonne
est ABCD (il y en a plusieurs), recuperer les valeurs correspondantes de


la
1ere colonne.

Exemple :

1 ABCD
2 XYZ
3 ABCD
4 ABCD
5 XYZ

RESULTAT : 1+3+4

J'éspère etre assez clair pour que quelqu'un puisse me donner ne serait-ce
qu'un début de réponse.

Merci d'avance.
Michael.




Avatar
Michael
Merci beaucoup ça marche impec mais comment récupérer les valeurs de la
table ? dans une colonne par exemple ?

Je sais que je suis exigeant désolé !

Merci
Michael
Avatar
Hervé
Bonsoir Michael,
La plage de valeurs récupérées se trouvera en colonne A de la feuille
"Feuil2" :

Sub Recup()
Dim Plage As Range
Dim Cel As Range
Dim Tbl()
Dim I As Long

With Worksheets("Feuil1")
Set Plage = .Range(.[B1], .[B63536].End(3))
End With

For Each Cel In Plage
If Cel = "ABCD" Then
I = I + 1
ReDim Preserve Tbl(1 To I)
Tbl(I) = Cel.Offset(0, -1).Value
End If
Next Cel

'valeurs en colonne A de Feuil2
Worksheets("Feuil2").Range("A1:A" & UBound(Tbl)) _
= Application.WorksheetFunction.Transpose(Tbl)

Set Cel = Nothing
Set Plage = Nothing
Erase Tbl
End Sub

Hervé.

"Michael" a écrit dans le message news:
uq$
Merci beaucoup ça marche impec mais comment récupérer les valeurs de la
table ? dans une colonne par exemple ?

Je sais que je suis exigeant désolé !

Merci
Michael