Boucle

Résolu
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009 - 20 sept. 2008 à 18:31
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009 - 22 sept. 2008 à 05:56
J'ai des cases que j'ai nommées de M12HC à M80HC j'aimerai boucler sur ce tableau et de récupérer la valeur inscrite dans la case et de l'inscrire dans un autre tableau qui ce trouve sur une autre feuille que j'ai activée quand je lance cette manip. Jusqu'à maintenant je fais contrôle case par case
cela fonctionne, je pensais réduir le nombre de contrôle par une boucle mais je bute et ne comprend pas pourquoi !
 
J'ai un message  erreur d'exécution 1004 erreur définie par l'application ou par l'objet sur la boucle ci-dessous
dim p as integer
For p = 12 To 80
Range("m" & p & "hc").value = ThisWorkbook.Sheets("feuille de calcul prix de vente").Range("m" & p & "h").value
Next p

Merci de vos conseils

8 réponses

shadowmosses Messages postés 14 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 16 décembre 2009
21 sept. 2008 à 21:53
Bonsoir Fne67, je voulais savoir si tu pouvais faire un Zip de ta feuille pour avoir une idee concrete de ton tableau et de la maniere dont tu a renomme tes cellules ?
La sincèrement sans ton tableau sous les yeux, je patauge ?

Si ton tableau comporte 4 lignes & 4 colonnes juxtaposees ont peux faire une boucle avec l'offset et deux variable n & b par exemple Et y insérer une condition .

Dim n, b, j As Variant

j = 0
n = 0
b = 0

While j = 0

Range("M12HC").Offset(n, b).Select

If Range("M12HC").Offset(n, b).Value <> "" Then
Range("M12HC").Offset(n, b).Value = _
ThisWorkbook.Sheets("feuille de calcul prix de vente").Range("M12HC").Offset(n, b).Value
End If

DoEvents

n = n + 1

If n = 4 Then
n = 0
b = b + 1
End If

If b 4 Then j 1

Wend
3
DblK Messages postés 51 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 2 octobre 2008
20 sept. 2008 à 23:40
Bonjour,

Je suis pas sûr pour ton erreur mais dans une fonction "Range", il me semble qu'il faut mettre les ":".
Donc écrit plutôt quelque chose comme :
Range("m" & p & ":hc")

cela devrait marcher.
Ou alors utilise les "Cells".

DblK
0
shadowmosses Messages postés 14 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 16 décembre 2009
21 sept. 2008 à 00:39
Bonsoir Messieurs, je ne suis pas vraiment Ok avec dblk en ce qui concerne les « : »

Pour ma part je ferais :

ActiveSheet.Range("m" &p& "hc")

Tes cellules se nomme " MxxHC " avec les deux petits points cela reviendrais
a faire " Mxx:HC " et en ce qui concerne " Activesheet.range "
il m’est nécessaire pour le bon fonctionnement de mes codes , cela dépend de la version XLS.
Apres je ne suis qu’un débutant.

Sur ceux Messieurs, je vous souhaite a tous de très bonne programmation.
0
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009
21 sept. 2008 à 06:49
Merci de vos réponses mais malheureusement cela ne fonctionne pas.
Le fait d'accoler   << &p& >> donne une erreur de compilation 
Le fait de mettre  << : >> avant le h ou de remplacer "range" par "cells" donne la même erreur
Je continu mes efforts et espères trouver
Cool de de répondre encore merci
a+
0

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

Posez votre question
DblK Messages postés 51 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 2 octobre 2008
21 sept. 2008 à 11:32
Bonjour,

Après quelques test à mon Excel, j'ai résolu le problème de l'erreur 1004.
Le fait est que dans excel, enfin ma version, aucune cellule ne correspond à M12HC.
J'ai parlé des ":" car je pensais que tu voulais sélectionner plusieurs cellule d'un coup, mais à priori vu ta boucle, ce n'est pas ça.
Ainsi si je supprime HC dans ta boucle, le programme veut bien aller de M12 à M80.

Si ce n'est pas ça, merci de donner plus d'informations sur ce fameux "HC".
Pour moi il ne doit pas y être car les lettres sont utilisés pour les colonnes et les chiffres pour les lignes, alors dans M12HC il y a un problème et c'est d'ailleurs pourquoi la méthode RANGE plante et affiche l'erreur 1004.

Merci pour tes précisions.

DblK
0
shadowmosses Messages postés 14 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 16 décembre 2009
21 sept. 2008 à 12:03
Bonjour,

En faite fne67 a renommé toutes ses cellules
Au lieu d’avoir « A1 » il a maintenant « M12HC »
Mais en se qui concerne le fait d'accoler << &p& >> est une faute de frappe de ma part, désoler fne67 mais le problème demeure toujours.
J’ai renommé mes cellules et j’ai maintenant la même erreur que toi.

Et si tu te servais de l’offset de la cellule ?

For n = 0 To 68
ActiveSheet.Range("M12HC").Offset(n, 0).Value = ThisWorkbook.Sheets("feuille de calcul prix de vente").Range("M12HC").Offset(n, 0).Value
DoEvents
Next n

Comme cela je n'ai plus d'erreur.

Tu nous tiens au courant fn67.
0
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009
21 sept. 2008 à 19:49
Bonjour ,
avec ce code
For n = 0 To 68

ActiveSheet.Range("M12_HC").Offset(n, 0).Value =
ThisWorkbook.Sheets("feuille de calcul prix de
vente").Range("M12_H").Offset(n, 0).Value

DoEvents

Next n

cela fonctionne
en fait ce que je recherche à faire est une boucle sur un tableau de 4 ligne et de 4 colonne la case M12 étant le point de départ, je recherche les cases non vides et les inscrits dans la base de données ( H =haut dans la feuille de calcul (thisworkbook) et HC= haut de la feuille "base de données" ). car il faudra faire de même avec le coté droit"D" gauche"G" et bas "B" cela fait beaucoup de données à gérer de 12 jusqu'à 80 pour les 4 cotés d'un coffret. ce que j'ai fais et ça prend pas mal de ligne d'instruction alors je me suis lancé dans les boucles. Je pense que vous avez plus d'expérience dans ce domaine.
Merci de consacrer autant de temps pour mon problème.
a+
0
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009
22 sept. 2008 à 05:56
Dim n, b, p As Variant

Sheets("Feuille de calcul").Select
Range("m12_hc:m80_gc").Select
Selection.ClearContents

p = 0
n = 0
b = 0

While p = 0

Range("M12_HC").Select

If Range("M12_HC").Offset(n, b).value = "" Then
Range("M12_HC").Offset(n, b).value = _
ThisWorkbook.Sheets("feuille de calcul prix de vente").Range("M12H").Offset(n, b).value
End If

DoEvents

n = n + 1

If n = 4 Then
n = 0
b = b + 1
End If
If b 4 Then p 1

Wend

Ecrit de cette façon ça marche très bien , merci beaucoup pour vos aides shadowmosses et Dblk
vraiement simpas d'avoir passé du temps pour mon problème
a+
0
Rejoignez-nous