Votre question
Résolu

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

Tags :
  • VB
Dernière réponse : dans Programmation
12 Décembre 2016 16:09:06

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.


http://hpics.li/a6f1db5
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 :

  1. Sub ESSAI()
  2. Dim FL1 As Worksheet, Cell As Range, NoCol1 As Integer
  3. Dim DERLIG As Long, Plage As Range
  4.  
  5. 'Instance de la feuille : Permet d'utiliser FL1 partout dans le code à la place de |Worksheets("FLL")|
  6. Set FL1 = Worksheets("FLL")
  7. 'Fixe le N° de colonne de la plage à lire
  8. NoCol1 = 10
  9. 'Détermine la dernière ligne renseignée de la feuille de calculs
  10. DERLIG = Split(FL1.UsedRange.Address, "$")(4)
  11. With FL1
  12. 'Détermine la plage de données à lire
  13. Set Plage = .Range(FL1.Cells(1, NoCol1), FL1.Cells(DERLIG, NoCol1))
  14. For Each Cell In Plage
  15. If Cell.Text = "#N/A" Then
  16.  
  17.  
  18. Next
  19. End With
  20. Set FL1 = Nothing
  21. Set Plage = Nothing
  22. End Sub

Autres pages sur : renvoyer valeur fonction contenu cellule

12 Décembre 2016 17:20:57

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:
  1. For Each Cell In Plage
  2. If Cell.Text = "#N/A" Then
  3. //Ici il faut alors faire l'affectation du style Cell.text = la cellule initiale de référence.
  4. //ajouter le End if
  5. End if
  6.  
  7. Next
m
0
l
15 Décembre 2016 08:46:15

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.
m
0
l
Contenus similaires

Meilleure solution

15 Décembre 2016 11:18:35

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!
  1. Dim tempValue As String
  2. Dim CodeTmp as String
  3.  
  4. For i = 1 To Rows.Count
  5. If len(Cells(i, 1))= 6 Then ' pour l exemple j ai mis 6 ... à toi d'adapter
  6. tempValue = Cells(i,10) ' On stocke la valeur de remplacement
  7. else
  8.  
  9. if(left(Cells(i, 1),6)=CodeTmp) & (Cells(i,10)="#N/A") Then
  10. (Cells(i,10)="#N/A") = tempValue
  11. End If
  12. Next i
partage
16 Décembre 2016 09:02:57

Salut les gars,
SVP on utilise la balises [code="vb"]... le code ...[/code]
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.
m
0
l
16 Décembre 2016 10:12:51

Je ne savais même pas que l'option existait^^
m
0
l