Résolu Renvoyer une valeur en fonction du contenu d'une autre si la cellule est NA....

Florian_72

Nouveau membre
Bonjour tous le monde !

Je sèche et j'ai besoin d'aide....
Je souhaiterais faire la chose suivante en VBA :

SI la valeur de la cellule de la colonne 7 est NA
Alors regarder le début de la référence inscrit dans la colonne 1,
et reporter la valeur de la colonne 7 correspondant à cette référence..... Je peu pas faire moins clair.... pourtant j'ai essayé je vous assure.

Avec un exemple ca sera surement plus parlant.
Dans le cas présent ligne 2 ma valeur en colonne 7 est NA
Je souhaite donc trouver la ligne ou ce trouve le début de la réf de ma cellule (ici 1000.02G01), donc trouver seulement 1000.02 (L1;C1 dans mon exemple)
Et reporter la valeur en colonne 7 de cette ref 1000.02 dans la case L2;C7.



Je ne peu pas vous envoyer de fichier test j'ai trop de lien vers des fichiers divers sur le serveur.


Le résultat serait donc ici la ligne suivante :

1000.02G01 3,9500 UN 70870000 50,000 #N/A 3.5

Comme vous pouvez le voir j'ai plusieur fois le cas avec plusieurs ref différente etc ...

pour le moment j'en suis la :
Vous devez être connecté pour voir les images.


Code:
Sub ESSAI()
Dim FL1 As Worksheet, Cell As Range, NoCol1 As Integer
Dim DERLIG As Long, Plage As Range

    'Instance de la feuille : Permet d'utiliser FL1 partout dans le code à la place de |Worksheets("FLL")|
    Set FL1 = Worksheets("FLL")
    'Fixe le N° de colonne de la plage à lire
    NoCol1 = 10
    'Détermine la dernière ligne renseignée de la feuille de calculs
    DERLIG = Split(FL1.UsedRange.Address, "$")(4)
    With FL1
        'Détermine la plage de données à lire
        Set Plage = .Range(FL1.Cells(1, NoCol1), FL1.Cells(DERLIG, NoCol1))
        For Each Cell In Plage
            If Cell.Text = "#N/A" Then
        
            
        Next
    End With
    Set FL1 = Nothing
    Set Plage = Nothing
End Sub
 

magellan

Modérâleur
Staff
Je vais reformuler pour voir si je saisis bien le problème
Pour toute ligne dont la valeur en colonne 7 est "#N/A", remplacer la valeur "#N/A" par la première valeur de la première colonne.

Cela veut dire que dans ton onglet présent en exemple, tous les N/A de la colonne 7 doivent valoir "1000.02" ?

Si oui ton code n'est pas trop loin de la vérité.
En gros ce qui n'est pas complet:
Code:
For Each Cell In Plage
If Cell.Text = "#N/A" Then
//Ici il faut alors faire l'affectation du style Cell.text = la cellule initiale de référence.
//ajouter le End if
End if

Next
 

Florian_72

Nouveau membre
Non ne c'est pas tout à fait ça.
Les NA de la colonne I doivent valoir 3.5 SI le début de leur référence est 1000.02.
Je pense avoir trouvé une parade à base de Formule pour nettoyer les refs de leur OP1 / OP2 etc... (à base de STXT et de =SUBSTITUE()).

Me restera juste à faire un RECHERCHEV après tous ça. C'est pas forcément la solution la plus économique en temps et nombre de colonne mais je pense que ça peut marcher.
 

magellan

Modérâleur
Staff
Meilleure réponse
attends que je comprenne...
En reprenant ton exemple
Toute référence commençant par 1000.02. ayant N/A doit prendre la valeur de la même colonne issue de la valeur 1000.02
Ensuite dans ton excel même chose pour les 1000.12 qui doivent toutes prendre les valeurs de 1000.12 (par exemple les lignes 13 à 15 doivent prendre les valeurs de la ligne 12)

J'ai bon dans la compréhension?

Si oui deux choses:
- Tes valeurs doivent être triées pour que cela puisse fonctionner... ou effectuer un tri avant l'exécution sous peine de perdre un temps monstre à la boucle
- Identifier une règle stricte pour la mise en place: longueur de chaîne de référence par exemple
Je te mets ça en pseudo code Excel, je ne m'en suis plus servi depuis longtemps!
Code:
  Dim tempValue As String
  Dim CodeTmp as String
               
For i = 1 To Rows.Count
  If len(Cells(i, 1))= 6 Then ' pour l exemple j ai mis 6 ... à toi d'adapter
    tempValue = Cells(i,10) ' On stocke la valeur de remplacement
  else 
  
  if(left(Cells(i, 1),6)=CodeTmp) & (Cells(i,10)="#N/A") Then
    (Cells(i,10)="#N/A") = tempValue
  End If
Next i
 

drul

Obscur pro du hardware
Staff
Salut les gars,
SVP on utilise la balises
Code:
[/b]"vb"]... le code ...[/code[b][/b]]
pour poster du code VBA, comme ça on a plein de jolie couleurs ;) J'ai corriger les posts précédents.

Pour le problème je laisse Magellan suivre le cas.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 850
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut