Selection de cellules contenant du texte
Bonjour,
Je suis nouvelle sur VBA et essaye de coder sans franc succès..
Voici mon problème :
J'ai un fichier Excel avec un grand nombre de feuilles. Chacune de ces feuilles contient des tableaux. (cf photo ci jointe).
Par exemple, je souhaite séléctionner toutes les valeurs de la case "Total (kgCO2/m2)" qui correspondent à un materiaux de type "Structure/Maçonnerie", et ceci dans toutes mes différentes feuilles Excel. Le but étant d'obtenir le total de kgCO2/m2 rejeté par la Structure/Maçonnerie du batiment.
Auriez vous une idée de résolution ?
Merci d'avance,
Bonne fin de journée !
La démarche que j'ai en tête serait :
- Séléctionner les cases contenant le texte "Structure/Maçonnerie"
- Séléctionner les lignes contenant ces cases.
- Séléctionner les nombres de ces lignes qui se trouvent sur la colonne I (cette colonne est celle des valeurs total kgCO2/m2)
- Additionner ces nombres
Je ne sais pas comment le mettre en codage mais cela me parait etre une solution
Bonjour,
tu peux utiliser ce code dans un module
Dim ligneFNR() As String
Dim test
test = findVal.FindAll("Structure/Maçonnerie", Sheets(1), "B:B", ligneFNR()) 'remplace B par la colonne de "Type"
For i = 1 To UBound(ligneFNR)
total = Cells(ligneFNR(i), 5) + total 'remplace 5 par le numéro de la colonne "Total"
Next i
MsgBox totalpour cela j'utilise une fonction
Celle-ci va te retourner l'ensemble des lignes possédant le mot recherché dans la colonne sélectionné.
Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)
If Not rFnd Is Nothing Then
rFirstAddress = rFnd.Address
Do Until rFnd Is Nothing
iArr = iArr + 1
ReDim Preserve arMatches(iArr)
arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
Set rFnd = oSht.Range(sRange).FindNext(rFnd)
If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
Loop
FindAll = True
Else
' ----------------------
' No Value is Found
' ----------------------
FindAll = False
End If
' -----------------------
' Error Handling
' -----------------------
Err_Trap:
If Err <> 0 Then
MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
Err.Clear
FindAll = False
Exit Function
End If
End FunctionSi tu souhaites des explications précises n'hésites pas.
Cordialement.
Je vais me pencher dessus dans la journée !
Merci beaucoup !
bonjour
salut Vince au passage
autre suggestion : avec Power Query tu concatène tous les onglets, puis tu fais un TCD
il n'y a aucun code à saisir, ni aucune formule
connais-tu les TCD et Power Query ?
amitiés à vous