Récupérer valeur d'une cellule vers une autre (avec conditions)

Signaler
-
 aange93 -
Bonjour,
je débute en VBA et j'ai écrit un algorithme que je trouve un peu chaud à traduire. Le voici:

Je fixe une ligne dans une feuille (disons ligne 1 feuil1), je la parcours à partir de la première cellule
Tant que A1 <> Null,
copier la valeur de A1,
Aller dans feuil 2,
coller valeur de A1 dans A1,
revenir à la feuil 1
se placer dans B1,
fin tant que

Merci pour votre aide

10 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour,
Tu vas nous faire le plaisir, si tu veux de l'aide, de nous montrer le code au moins tenté que tu as écrit pour résoudre cette petite difficulté.
Car pour l'instant, ton message ressemble plus à un mini cahier des charges ou à un énoncé qu'à autre chose !

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Bonjour,
Tu as tout à fait raison. Je suis un peu pris de justesse parce que je ne connais pas la syntaxe sur VBA donc pendant que j'essaie d'apprendre j'ai juger bon de demander de l'aide.
Voici une macro que j'ai essayé d'écrire sans succès

Sub courbe_de_taux()

Dim Colums As Integer

For Colums = 2 To 30
If Cells(42, Colums).Value <> Null Then
''Ici test si la valeur de la cellule de la ligne 1 est non nulle''
Cells(42, Colums).Select
Selection.Copy
Sheets("Bootstrapping ").Select
Range("A1").Select
ActiveCell.End(xlToLeft).Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Feuil1").Select
End If
Next Colums

end sub

Balises codes rajoutées. Il est important d'y penser, dorénavant.

Merci de votre aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
1) Qu'entends-tu exactement par NULL ?
2) Columns est un mot réservé de VBA/Excel (c'esdt le nom de la collection des colonnes). A ne pas utiliser comme nom de variable.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
merci de votre aide,
en fait je voulais dire 0. Avec Null, j'ai remarqué que ca ne fonctionnait pas.
La boucle For aussi me semble par bonne parce qu'elle parcoure la ligne en une fois alors que je veux y aller cellule par cellule. Pensez vous qu'avec un while ca irait mieux?

Oui je sais pour Columns du coup j'ai écrit Colums :)
Voici un code un peu plus frais mais toujours aussi inefficace

 
Sub courbe_de_taux()
'
' courbe_de_taux Macro
'

Dim Col As Integer

Col = 2
While Cells(42, Col).Value <> 0
''Ici test si la valeur de la cellule de la ligne 1 est non nulle''
Cells(42, Col).Select
Selection.Copy
Sheets("Bootstrapping ").Select
Range("A1").Select
ActiveCell.End(xlToLeft).Select
ActiveCell.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Feuil1").Select
Col = Col + 1
Wend
End Sub
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
1) Comment se fait-il que certaines de tes cellules aient un "0".
Est-ce le résultat d'une formule ?
Sinon : d'où viennent ces "0" ?
2) ta ligne 42 contient-elle des formules de la colonne 2 à la colonne 30 ?
3)
Range("A1").Select
ActiveCell.End(xlToLeft).Select
ActiveCell.Offset(0, 1).Select

- sélectionne la cellule A1
- cherche a aller à la dernière remplie à sa gauche +++>> comme il n'y en a pas ===Reste sur A1
- va sur la cellule de droite suivante
!!!
Conclusion : tu es toujours sur A2 !!!
4) on ne travaille jamais à coups de select, selection, etc ..., mais avec les objets Excel, directement

Eclaircis le point 1) (important pour la suite) et on verra.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
1) oui c'est le résultat d'une formule, et renvoie #DIV/0! quand la formule ne peut plus être exécutée

2) oui elle contient des résultats de la colonne 2 à une colonne inconnue en fait parce que le calcul qui y est réalisé peut durer comme finir plus vite

3) en fait c'est une alternative que j'avais écrite pour passer d'une cellule à une autre à bout de copier coller de code (par-ci par-là)

Comme je l'ai dit, je suis un gros novice sur VBA. Je vois clairement ce que je veux faire mais comme je ne maitrise pas le langage la réalisation m'est impossible (d'où le mini cahier des charges en haut)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Désolé, mais avant de continuer ici, il va falloir que tu te débarrasses de ces vilaines divisions par zéro !
Mais il s'agit là d'un autre problème : ouvre une autre discussion à CE SEUL SUJET.
Nous ne reviendrons dans la présente discussion que lorsque ce problème fondamental-là aura été résolu.

Avant d'ouvrir ton autre discussion : analyse et comprends ce que ferait cette formule mise en C1 selon que B1 est vide ou = 0.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
je peux définir exactement par une formule à quelle cellule commencent les division par 0.

sur la ligne 42, le n° de la colonne où la dernière division possible est donnée par la formule suivante: DATEDIF(B10;B11;"Y")+1

Donc en fait j'ai la taille de mon tableau est (B42:(DATEDIF(B10;B11;"Y")+1)42)
Mon code deviendrait un truc du genre

Dim D As Integer
D = Cells("14,2").Value + 1
'B14 est la cellule où le résultat de la formule datediff est inscrit'
Range ("B42",Cells(42,D)).select
Selection.Copy
Sheets("Bootstrapping ").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Feuil1").Select
End Sub



Qu'est ce que vous en dites ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Je n'en dit rien du tout.
Ton 1er code contenait une boucle et une expression conditionnelle
- celui-ci n'en contient aucune
Ce forum n'est pas fait pour te "suivre" dans tous tes petits essais. Encore moins s'ils sont très différentes entre eux !
Pour mieux comprendre : regarde donc quelle peut maintenant être la justification de ton titre :
Récupérer valeur d'une cellule vers une autre (avec conditions)

plus rien n'est maintenant en rapport !
Tout ce que je peux te dire est ceci :
Ton second code se traduit ainsi en VBA correct (pas de select, etc ..) :
D = Cells("14,2").Value + 1
Range ("B42",Cells(42,D)).Copy destination:= Sheets("Bootstrapping ").Range("A2"

Tu es par contre seul à savoir ce que tu veux faire.
Bonne chance
Merci pour votre aide