Recherche d'une valeur de cellule dans le nom des feuilles

Résolu
adamfred Messages postés 12 Statut Membre -  
adamfred Messages postés 12 Statut Membre -
Bonjour,
Je suis novice en Vba, un long chemin pour acquérir les notions essentielles en Vba.
J'ai un classeur avec plusieurs feuilles. Dans une feuille ici en occurrence la feuille "Recap Fr , j'ai la colonne A ( de la Range("A4:A21")) des noms de ligne qui correspondent souvent aux noms des feuilles de calcul. je souhaiterai extraire le nom des cellules, par exemple TLE D, puis TLE C...6B) le comparer aux noms des feuilles et s'il existe une correspondance, activer cette feuille et mettre des formules dans les cellules B4,C4, D6,E4,F4 et ainsi de suite pour toutes les occurrences trouvées.
Et pour compliquer le tout je reprends la feuille (Recap Angl) et fait la même chose que précédemment.
J'aimerai joindre un fichier mais je n'ai pas su le faire
Merci

4 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Voici un exemple de code pour débutant :
    Option Explicit
    Option Private Module
    
    Public Sub adamfred()
    Dim wsh As Worksheet
    Dim rng As Range
    Dim cel As Range
    Dim txt As String
    
      'Analyser chaque cellule de la plage A4:A21
      For Each cel In ThisWorkbook.Worksheets("Recap Fr").Range("A4:A21").Cells
        'Pour chaque feuille du classeur
        For Each wsh In ThisWorkbook.Worksheets
          'Comparer la valeur de la cellule avec le nom de la feuille
          If cel.Value = wsh.Name Then
            'si ça correspond, mettre en place les formules :
            '1° formule
            txt = "=""MaFormuleN°1"""
            wsh.Range("B4").FormulaLocal = txt
            '2° formule
            txt = "=GAUCHE(B4;11) & ""2"""
            wsh.Range("C4").FormulaLocal = txt
            'Etc..
          End If
        Next wsh
      Next cel
    
    End Sub
     


    Essaies de l'adapter à ton besoin, tu pourras ensuite poursuivre cette discussion en mettant ton fichier sur https://www.cjoint.com/
    Tutoriel : Utiliser ci-joint
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      PS : tu noteras qu'il est inutile d'activer la feuille pour y mettre en place une formule.
      0
  2. adamfred Messages postés 12 Statut Membre 2
     
    Merci, Patrice33740
    pour la reponse ,je m'y mets
    0
  3. adamfred Messages postés 12 Statut Membre 2
     
    je viens de terminer une autre façon de faire sauf qu'il y'a un boucle infini.
    Sub ParcoursdesRecap()
    Dim myRangeRech, myRangeR As Range
    Dim myLastRow, LastRowMp
    Dim myLast As Variant
    Dim i, j As Integer
    Dim mySheet As Worksheets
    Dim Nom As String
    Dim mySheetRech As Range
    Dim CellRech As Range
    Dim MtPayé As Double
    'DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    'DernLigne = Range("A" & Rows.Count).End(xlUp).Row

    Worksheets("Recap Fr").Select
    myLastRow = Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
    ' nbre de ligne
    myLastRow = myLastRow - 1

    Set myRangeRech = Range("A4:A" & myLastRow)

    For Each Cell In myRangeRech
    Worksheets("Recap Fr").Select

    For i = 4 To myLastRow
    ' la recherche des feuilles de calcul commence à la feuille(9)
    For j = 9 To Worksheets.Count
    Worksheets("Recap Fr").Select

    Nom = Range("A" & i).Value

    If Nom = Worksheets(j).Name Then
    Worksheets(j).Select
    Range("D4").Select
    If Range("D4") = "" Then
    LastRowMp = 0
    Else
    LastRowMp = Columns("D:D").Find("*", Range("D1"), , , xlByRows, xlPrevious).Row
    'somme des colonnes
    Worksheets("Recap Fr").Range("B" & i).FormulaR1C1 = Application.WorksheetFunction.Sum(Range("D4:D" & LastRowMp))
    Worksheets("Recap Fr").Range("C" & i).FormulaR1C1 = Application.WorksheetFunction.Sum(Range("E4:E" & LastRowMp))
    Worksheets("Recap Fr").Range("D" & i).FormulaR1C1 = Application.WorksheetFunction.Sum(Range("F4:F" & LastRowMp))
    Worksheets("Recap Fr").Range("F" & i).FormulaR1C1 = LastRowMp - 3

    End If

    End If

    Next j
    Next i

    Next

    End Sub
    Certes, il est chaotique mais il semble fonctionner, mais ta solution est plus limpide.
    j'y joint le fichier
    Merci
    0
  4. adamfred Messages postés 12 Statut Membre 2
     
    Finalement ,j'ai vu pourquoi il y avait un boucle infini un "For Each Cell In myRangeRech" qui n'avait pas sa raison d'être.

    " Je me nourri de mes échecs" ce qui permet d'apprendre toujours un peu plus
    0