Condition et boucle VBA Excel

Merci tu es une machine, aucun bug le fichier test s'ouvre bien mais je pense qu'il ya un soucis avec cette condition :

If sh1.Range("g" & lig_maxi).Value > 0 Then
        sh1.Range("c" & lig_maxi) = wbk2.Sheets(2).Range("a" & wbk2.Sheets(2).Range("d:d").Find("121-33-5_30PG").Row)
        MsgBox ("remplacer par code matière.")
    End If

Car quand je debug, je vois qu'il rentre bien dedans mais on dirait que pour lui il n'ya pas de valeur supérieur à 0, donc il ne modifie pas ma valeur dans C de exemple.

Encore un énorme merci.

Rebonjour,

Dans ce cas une question en plus, tu dis qu'il ne rentre jamais dans ton If, il se fait toujours refouler par le teste c'est bien ça?

Si tu mets un espion sur la valeur : sh1.Range("g" & lig_maxi).Value

En faisant clic droit ajouter un espion sur cette portion de code, est ce qu'il t'affiche bien une valeur numérique, est ce que tu as bien une valeur supérieure à 0, si le test ne marche pas, c'est qu'il y a un soucis avec la valeur que l'on teste, si ça passes bien le If et que tu pars sur le chargement du code matière mais que ça ne marche pas, il faut voir si le find te trouve bien ce que tu veux :

Pour ça tu fais un espion sur ça par exemple :

wbk2.Sheets(2).Range("a" & wbk2.Sheets(2).Range("d:d").Find("121-33-5_30PG").Row)$

Ou encore sur ça :

wbk2.Sheets(2).Range("d:d").Find("121-33-5_30PG").Row

Pour voir si ça renvoie la ligne prévue, courage, tu n'es pas loin d'avoir un code VBA qui fonctionne

J'ai fait différemment et cela fonctionne, j'ai fait une formule avec une macro. Un énorme merci pour ton aide, je ne met pas encore résolu car je me retrouve avec un autre problème auquel je n'avais pas pensé, c'est que maintenant la somme de ma colonne E est supérieur à 1 et elle doit obligatoirement être égal à 1, et pour arriver à ceci je ne peux jouer uniquement sur la ligne du code matière 57-55-6 et jouer avec la valeur de la colonne E mais en sachant que celui peut se retrouver sur n'importe quelle ligne en fonction des fichiers.

Ca doit pas être trop compliqué, je me penche dessus.

J'ai commencer par faire la somme de la colonne E -1, afin d'avoir la valeur à soustraire à 57-55-6:

Sub SommeE()
Dim Fin As Long, Liste As Range
Fin = Columns("E").Find("*", , , , , xlPrevious).Row
Set Liste = Range("E1:E" & Fin)
Range("F1") = Application.Sum(Liste) - 1
End Sub

Maintenant ou je bloque, je doit arriver à repérer la case dans ma colonne E au niveau de la ligne du 57-55-6 et je doit lui soustraire la valeur de F1.

Merci pour votre aide

J'ai réussi, mais le code n'est absolument pas optimisé

Sub SommeE()

Dim Fin As Long, Liste As Range
Fin = Columns("E").Find("*", , , , , xlPrevious).Row
Set Liste = Range("E1:E" & Fin)
Range("F1") = Application.Sum(Liste) - 1

Dim Trouve As Range
Dim PlageDeRecherche As Range
Dim Valeur_Cherchee As String
Dim AdresseTrouvee As String

    'on cherche le mot "57-55-6"
Valeur_Cherchee = "57-55-6"
    'dans la 3 colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(3)
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = Trouve.Offset(0, 2).Select
End If
a = ActiveCell - Range("F1")
ActiveCell = a

'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End Sub

Votre avis?

Bonjour,

Le code est déjà bien, il faudrait passer par des tableaux vba pour l'optimiser

Merci beaucoup Ausecour, sans toi je n'y serais jamais arrivé. Je clos le sujet.

De rien

Merci d'avoir passé le sujet en résolue

Rechercher des sujets similaires à "condition boucle vba"