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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
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
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)
- 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)
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.
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
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