VBA: recherche un mot dans une plage de cellules retourne la valeur de l'entête

jcdffr

XLDnaute Nouveau
Bonjour a tous,

Une feuille contient les données des classification ("classification")
dans cette feuille contient les noms des classification avec des champ contient/Contient pas

une feuille contient des résumé ("Autres")
dans cette feuille,
1. des résumé
2. d'autres infos
3. les classifications (le VBA les rajoute automatiquement)
4. TE_PROV

choisi par (VBA toujours):
a. trouve la cellule du premier "OK" trouvé dans les champs classifications dans cette feuille
b. trouve l'entête de cette cellule
c. nomme la cellule TE_PROV avec le nom de l'entête trouvé

la partie du code que j'utilise pour effectuer cette tache est

Début code ---------------

Sheets("classification").Select
Range("A1").Select
TEPOV = Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, TEPOV + 1).Select
ActiveCell.FormulaR1C1 = "TE_PROV"
Cells(1, TEPOV + 1).Offset(1, 0).Select

'FirstRow contient le premier résumé
'LstRw contient le dernier résumé
'LstCl contient la premiere ligne de classification
'LastCol contient la dernière ligne de classification


For X_Value = FirstRow To LstRw

For Y_Value = LstCl To LastCol

If Sheets("classification").Cells(X_Value, Y_Value).Value = "OK" Then

Sheets("classification").Cells(X_Value, LastCol + 1).Select

Sheets("classification").Cells(X_Value, LastCol + 1) = Sheets("classification").Cells("1", Y_Value).Value

Exit For

Else

Sheets("classification").Cells(X_Value, LastCol + 1) = "vide"

End If

Next Y_Value

Next X_Value

Fin Code ---------------------

ce code fonctionne très bien :D mais très lent :(

merci d'avance pour ceux qui m'ont comprit (pas facile je doute)

et merci pour votre aide surtout
 

Pièces jointes

  • calculTE.xlsm
    13.7 KB · Affichages: 124
  • calculTE.xlsm
    13.7 KB · Affichages: 149
  • calculTE.xlsm
    13.7 KB · Affichages: 147
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : VBA: recherche un mot dans une plage de cellules retourne la valeur de l'entête

Bonjour jcdffr,

Pas sûr d'avoir tout compris !

Une proposition quand même :

Code:
Sub chercher()

Sheets("Autres").Select

    Dim c As Range
    Dim Lastcol As Integer
    
        Cells(1, Cells(1, 256).End(xlToLeft).Column + 1).Value = "TE_PROV"
        Lastcol = Cells(1, 256).End(xlToLeft).Column
        
        With Sheets("Autres").Cells
        
        Set c = .Find("Ok", , xlValues, xlWhole)
        
            If Not c Is Nothing Then
                
                firstAddress = c.Address
                
                Do
                Cells(c.Row, Lastcol).Value = Cells(1, c.Column).Value
                Set c = .FindNext(c)
                
                Loop While Not c Is Nothing And c.Address <> firstAddress

            End If
            
        End With
        
End Sub

Bonne journée
 

jcdffr

XLDnaute Nouveau
Re : VBA: recherche un mot dans une plage de cellules retourne la valeur de l'entête

Bonjour,

j'ai pris si longtemps a répondre car j'ai essayé ce code mais rien..

il s’exécute mais ne marque rien nulpart..

donc pour ré-expliquer;

Sheets(TypeService).Select est la feuille ou se trouve les entrées.

(nous connaissons la cellule départ des applis metier mais pas la fin, car il sont detecter automatiquement après l'ajout d'un nouveau)

A2 = Applis Metier 1
A3 = Applis Metier 2
A4 = Applis Metier 3
jusqu'àu derniere applis metier
A(dernier applis métier +1) = TE_PROV

(B, C, D,....... sont les entrées jusqu'a lastrow)

chaque entrée peux contenir un OK

B1 = info..
B2 = KO
B3 = OK
B4 = KO
jusqu'a en dessous du dernier applis metier


exemple;
Si B3 = OK
B(en dessous dernier applis métier +1) = entête de la cellule B3 (qui est A3)


j'espère avoir mieux expliqué
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : VBA: recherche un mot dans une plage de cellules retourne la valeur de l'entête

Re jcdffr,

C'est précisément ce que la macro de ma proposition fait :)

Par contre je suis partit du principe qu'il n y avait qu'un "Ok" par ligne.
En fait la macro recherche chaque "Ok" dans toute la feuille puis récupère son numéro de ligne et l'envoie à la dernière colonne en dessous de TE_PROV.

Je viens de re-tester elle marche très bien sur ton fichier exemple.
Il faut la mettre dans un module.

Si ta feuille se nomme Typeservice, le code doit ressembler à ça (Toujours sans doublons de "Ok" sur la même ligne):

Code:
Sub chercher()

Sheets("Typeservice").Select

    Dim c As Range
    Dim Lastcol As Integer
    
        Cells(1, Cells(1, 256).End(xlToLeft).Column + 1).Value = "TE_PROV"
        Lastcol = Cells(1, 256).End(xlToLeft).Column
        
        With Sheets("Typeservice").Cells
        
        Set c = .Find("Ok", , xlValues, xlWhole)
        
            If Not c Is Nothing Then
                
                firstAddress = c.Address
                
                Do
                Cells(c.Row, Lastcol).Value = Cells(1, c.Column).Value
                Set c = .FindNext(c)
                
                Loop While Not c Is Nothing And c.Address <> firstAddress

            End If
            
        End With
        
End Sub


Ou sinon, s'il peut y avoir plusieurs "Ok" dans la même ligne, et les mettres dans les colonnes à la suite:

Code:
Sub chercher()

Sheets("Typeservice").Select

    Dim c As Range
    Dim Lastcol As Integer
    
        Cells(1, Cells(1, 256).End(xlToLeft).Column + 1).Value = "TE_PROV"
        Lastcol = Cells(1, 256).End(xlToLeft).Column
        
        With Sheets("Typeservice").Cells
        
        Set c = .Find("Ok", , xlValues, xlWhole)
        
            If Not c Is Nothing Then
                
                firstAddress = c.Address
                
                Do
                Cells(c.Row, Cells(c.Row,256).End(xlToLeft).Column).Value = Cells(1, c.Column).Value
                Set c = .FindNext(c)
                
                Loop While Not c Is Nothing And c.Address <> firstAddress

            End If
            
        End With
        
End Sub

Je te remets le fichier avec un bouton pour la macro.
Le résultat se met dans la dernière colonne de la feuille "Autres"
 

Pièces jointes

  • calculTE.xlsm
    23 KB · Affichages: 144
  • calculTE.xlsm
    23 KB · Affichages: 156
  • calculTE.xlsm
    23 KB · Affichages: 170

jcdffr

XLDnaute Nouveau
Re : VBA: recherche un mot dans une plage de cellules retourne la valeur de l'entête

et si il y a plusieurs OK mais je veut afficher CTED au lieu de l'entête pour que la personne vérifie leurs travail..car il ne faut qu'un OK pour bien faire

par contre.. s'il ne trouve pas OK = "Vide"

merci
 
Dernière édition:

jcdffr

XLDnaute Nouveau
Re : VBA: recherche un mot dans une plage de cellules retourne la valeur de l'entête

dans le fichier que tu m'a envoyer cela fonctionne très bien mais pas dans le miens :|

il faut dire que j'ai 275 possibilités minimum et plus de 1000 entrées minimum
 

Pièces jointes

  • calculTE.xlsm
    27.6 KB · Affichages: 136
  • calculTE.xlsm
    27.6 KB · Affichages: 153
  • calculTE.xlsm
    27.6 KB · Affichages: 156
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 611
Messages
2 090 220
Membres
104 452
dernier inscrit
hamzamounir