[VBA] Récupération de valeurs variables

Résolu/Fermé
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 - 27 juin 2011 à 10:48
trankill076 Messages postés 74 Date d'inscription mercredi 25 mai 2011 Statut Membre Dernière intervention 2 juin 2014 - 27 juin 2011 à 14:14
Bonjour,

Voila j'ai une boucle qui récupère dans la feuille1, colonne A les valeurs des cellules, et qui les écris ensuite sur la feuille2 colonne A jusqu'a ce qu'il n'y ai plus de valeurs:

C'est à dire colonne A feuille 1 si elle contient 46 lignes, dans la feuille2 il y aura 46 lignes..

Le problème est les valeurs des cellules.. J'aimerais récupérer les valeurs de chaques cellules pour les mettre dans la feuille2. Par exemple si la feuille 1 contient dans 1 cellule la valeur 123456 et dans la deuxieme cellule : 654321

Dans la deuxieme feuille sa sera la meme chose.. seulement ma boucle inscrit qu'il y ai 10 lignes ou 46 lignes la derniere valeur trouvée...

sachant que le nombre de lignes ne peut etre défini..

merci de votre aide !



16 réponses

Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
27 juin 2011 à 10:50
Salut!

Je n'ai pas trop compris ca :

Dans la deuxieme feuille sa sera la meme chose.. seulement ma boucle inscrit qu'il y ai 10 lignes ou 46 lignes la derniere valeur trouvée...

Peut-tu poster ton fichier, ou un semblant de fichier sur ?

www.cijoint.fr
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:13
Non je suis désolé je travaille a distance sur ce fichier.. pour faire un semblant je vais essayer en attendant jessaye de te réexpliquer : Ma boucle parcour la colonne A de la feuille1, qu'il y ai 10 lignes (avec des valeurs différentes) ou 45 lignes (de valeurs différentes aussi), ma boucle parcour ces lignes et inscrit les valeurs dans la feuille2 . Le problème est que ma boucle lorsqu'elle inscrit les valeurs dans la feuille2 elle n'inscrit que la derniere valeur trouvée dans la colonne A de la feuille 1 ! et j'aimerais que sa copie chaques valeur comme elle ne sont pas les mêmes..

Je vais essayer de te donner un fichier similaire.

Merci pour ton aide
0
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
27 juin 2011 à 11:14
Link moi ton code, je pense que tu as fait une petite erreur au niveau de ta boucle ;).
Tu n'as pas du placer correctement ta copie ;)
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:21
Dim derniereLigne3 As Integer
Dim monTexte3 As String

derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27

For l = 1 To derniereLigne3
    monTexte3 = Sheets(1).Range("a" & l).Value


    For i = 1 To derniereLigne3
        Sheets(2).Range("C1").Offset(i, 0).Value = monTexte3
    Next

Next

0
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
Modifié par Ctesias le 27/06/2011 à 11:24
Tu ne peux pas tenter cela?

Dim derniereLigne3 As Integer 
Dim monTexte3 As String 

derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27 

For l = 1 To derniereLigne3 
    Sheets(2).Range("C1").Offset(i, 0).Value = Sheets(1).Range("a" & l).Value 
Next


ou bien :

Dim derniereLigne3 As Integer 
Dim monTexte3 As String 

derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27 

For l = 1 To derniereLigne3 
    Sheets(2).Cells(i,1).Value = Sheets(1).Cells(i,1).Value 
Next
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:27
Alors la premiere refais comme la mienne.. sauf que la sa n'écris qu'une seule fois la derniere valeur de la colonne A feuille1

Et la deuxieme récupère bien les valeur MAIS (car il y en a toujours 1 ^^ ) elle l'écris dans la colonne A de la feuille 2 au lieu de la C bon sa c'est changeable mais sa ne supprime plus les 27 ignes Vides qu'il y a au dessus d'ou le : Row - 27 qu'il y a dans ma boucle..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
27 juin 2011 à 11:31
Dim derniereLigne3 As Integer 
Dim monTexte3 As String 

derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27 

For l = 27 To derniereLigne3 
    Sheets(2).Cells(i,1).Value = Sheets(1).Cells(i,1).Value 
Next


et comme ca? Si tu commence ta boucle à la ligne 27?
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:35
Sa s'arrete a la 36eme valeur (alors qu'il y en a plus) et sa n'écris que la derniere (la 36eme)
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:39
J'ai trouvé poyurquoi sa s'arrétais on a fait une érreur toute pourrie c'est la variable i = 1 to derniereLigne on avait laissé L..

Mainteant sa marche je récupère bien les valeurs ! Mais il les inscrits avec les caces vides qu'il y a au dessus.. 25 lignes ici..
0
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
27 juin 2011 à 11:49
Sheets(2).Cells(i-27,1).Value = Sheets(1).Cells(i,1).Value 
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:55
Le cells(i-27,1) (le -27) créé une erreur..
0
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
Modifié par Ctesias le 27/06/2011 à 11:57
Huhuh... pas pensé... mais 27 - 27, ca fait 0...

Essai avec un -26

et si ca ne marche pas , essai:

For l = 27 To derniereLigne3 
    i = i - 26
    Sheets(2).Cells(i,1).Value = Sheets(1).Cells(i,1).Value 
Next
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 11:59
Je veux bien essayer mais a quoi sert le l = 27 To derniereLigne3 ? Car le l ne réapparait pas..

Et le - 26 marche seulement sa me bouffe la premeire ligne qui est le libellé de la colonne
0
Ctesias Messages postés 724 Date d'inscription lundi 16 mai 2011 Statut Membre Dernière intervention 1 décembre 2011 36
27 juin 2011 à 12:00
Excuse moi, le copier coller me fais default: remplace ton L par un i
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 12:03
Ne t'excuse pas c'est pas grave =)

j'ai donc ceci

For i = 27 To derniereLigne3
i = i - 26
Sheets(2).Cells(i, 3).Value = Sheets(1).Cells(i, 1).Value
Next

Et sa me met une erreure..
0
digsaw_- Messages postés 489 Date d'inscription lundi 14 septembre 2009 Statut Membre Dernière intervention 24 septembre 2013 57
27 juin 2011 à 12:19
Oui bah je suis con... j'ai mis - 25 au lieu de - 26 carje t'ai dis que le - 26 me bouffais le libellé... -_-

des fois c'eszt en face de nous et on le vois pas ! ^^

Merci beaucou pour ton aide !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
27 juin 2011 à 13:28
Bonjour,
1- suis surpris que ceci fonctionne :
For i = 27 To derniereLigne3 
i = i - 26 
Sheets(2).Cells(i, 3).Value = Sheets(1).Cells(i, 1).Value 
Next 

Mais si tu le dis...

2- la déclaration des variables est très importante lorsque l'on parle de code VBA. Il faut déclarer toutes les variables, et leur donner un nom explicite d'au moins 3 caractères. Les i et autres l sont à prohiber, vous en aveze eu la preuve à patauger au début de cette discussion.
A titre d'exemple :
1- une boucle sur les lignes
Dim Lign As Integer
For Lign = 1 To 20
    Cells(Lign, 1) = "Toto" & Lign
Next
est immédiatement explicite. Non?
2- Sur les colonnes?
Dim Col As Integer
For Col = 1 To 20
    Cells(2, Col) = "Toto" & Col
Next

3- La dernière ligne non vide de la colonne A :
Dim DernLign As Long
DernLign = Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

0
trankill076 Messages postés 74 Date d'inscription mercredi 25 mai 2011 Statut Membre Dernière intervention 2 juin 2014 21
27 juin 2011 à 14:14
Ou plus simplement avec un While

i = 1
While Feuil1.Cells(i, 1) <> ""
  Feuil2.Cells(i, 1) = Feuil1.Cells(i, 1)
  i = i + 1
Wend


La boucle copie chaque cellule de la première colonne de la première feuille dans la cellule correspondante de la feuille 2 et s'arrête dès qu'elle trouve une cellule vide

Je suis d'accord avec pijaku en ce qui concerne les noms des variables
0