[Catégorie encore modifiée VB6 --> VBA] Erreur 1004 dans macro imbriquée [Résolu]

Signaler
Messages postés
12
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
16 octobre 2010
-
cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour,
J'essaye de faire tourner ce script mais une erreur 1004 survient au niveau de la macro imbriquée pour la sélection du Range.
La macro fonctionne normalement séparément.
Sub Essai()
' Avec boucle
Dim x As Integer
Dim y As Integer
Dim Count As Integer
Dim Counter As Integer

x = 26
y = 4
For Counter = 1 To 8
Call Deplacement
x = x + 26
y = y + 4
Next Counter

End Sub

Sub Deplacement()
For Count = 1 To 11
Range(Rows(x), Rows(x + 1)).Select
Selection.Cut
Rows(y).Select
Selection.Insert Shift:=xlDown
x = x + 2
y = y + 4
Next Count
End Sub

Pouvez-vous m'expliquer ce qui ne va pas?
Merci pour votre aide
Uspa

8 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
Ah, c'est vrai.
Je pense toujours en terme d'index mais c'est vrai qu'on peut utiliser cette syntaxe. Mes excuses pour l'embrouillage.

Comme tu le vois dans la syntaxe, les chiffres sont encadrés par des " donc il s'agit d'une chaine. Il te suffit donc de recréer une chaine à partir de tes chiffres, le b.a.ba, quoi.
    maChaine = CStr(x) & ":" & CStr(x + 1)
    Rows(maChaine).Select
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
Salut

x et y sont dimensionnés dans la Sub Essai.
Hors de cette Sub, il n'existent pas.

Pour éviter de tomber sur des erreurs de ce type, va dans les options et coche la case "déclaration obligatoire des variables".
Sur les pages de code existantes, il te faudra manuellement ajouter cette ligne à la première ligne de chaque page de code :
Option Explicit

Pour tes x et y, comme je ne vois pas du tout ce que tu veux faire, difficile de te dire où ils sont réellement utiles.

Prends aussi l'habitude de deboguer par toi même et suivre, ligne après ligne ce qui se passe dans ton programme :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

Et enfin, voilà trois fois que je te dis que tu ne fais pas de VB6, mais du VBA : merci de correctement choisir la catégorie de ta question la prochaine fois.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
PS : Ton erreur arrive surement sur la ligne
Range(Rows(x), Rows(x + 1)).Select
(tu aurais pu le préciser)

Si tu regardes la valeur de x, tu verras qu'il vaut 0 et que Rows(0) n'existe pas.
Messages postés
12
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
16 octobre 2010

Bonsoir,

Merci Jack pour tous ces conseils.
Face aux problèmes liés aux variables que j'utilise j'ai modifié l'algo et utiliser la fonction "While...Wend" à la place.
Voilà mon algo qui fonctionne maintenant correctement.
Option Explicit
Sub Essai()
' Avec boucle

Dim x As Integer
Dim y As Integer
Dim Count As Integer
Dim Counter As Integer

x = 26
y = 4
Counter = 1

While Counter < 9

For Count = 1 To 11
Range(Rows(x), Rows(x + 1)).Select
Selection.Cut
Rows(y).Select
Selection.Insert Shift:=xlDown
x = x + 2
y = y + 4
Next Count

x = x + 26
y = y + 4
Counter = Counter + 1
Wend

End Sub

Cet algo me permet de remanier mes 384 lignes de telle façon qu'à partir de A1 A2 A3 A4 ...A24, B1 B2 B3...B24 jusqu'à P24 les lignes soient replacées selon A1 A2 B1 B2 A3 A4 B3 B4.....
C'est surement un peu lourd comme algo mais j'ai pas d'autres solutions à mon niveau.

Encore merci pour ton aide.

PS: as-tu une réponse à ma dernière question du post d'hier?(Syntaxe pour sélectionner des lignes contiguës avec une variable).
Uspa
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
PS : Oui, et je t'ai répondu avec le Range.
D'ailleurs, tu t'en sert ici ...
Selection est un Range qui a la particularité de prendre le focus, d'avoir une sorte de représentation visuelle pour l'utilisateur, c'est tout.
Messages postés
12
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
16 octobre 2010

Oui j'ai bien compris et utilisé le Range mais comme tu m'as dit que le "Rows" ne pouvait désigner qu'une seule ligne et que l'enregistreur de macro m'écrit:

Rows("26:27").Select
Selection.Cut
Rows("4:4").Select
Selection.Insert Shift:=xlDown

Ici la fonction Rows a désigné 2 lignes (c'est d'ailleurs pourquoi j'avais essayé de l'appliquer la première fois)
as-tu une explication?
Uspa
Messages postés
12
Date d'inscription
mercredi 21 juin 2006
Statut
Membre
Dernière intervention
16 octobre 2010

Bonjour,
Merci beaucoup Jack pour ces explications.
Il est difficile pour un néophyte comme moi d'appréhender toutes les notions, même de base pour toi, pour démarrer dans l'utilisation de VBA (je n'avais pas vu non plus la différence entre le VBA d'Office et le VB6).
Comme tu l'a sûrement compris mon but est de pouvoir mieux manipuler et automatiser Excel pour traiter plus rapidement mes données.
Si mon niveau est vraiment trop faible , même pour la section débutants, il faut me le dire. Je ne veux pas non plus "polluer" cette section du forum avec des questions trop basiques.
D'un autre côté grâce à tes réponses rapides j'ai pu déjà progresser dans la manipulation de mes données!
Encore merci pour ta patience et celle des autres participants experts très actifs sur ce forum.

PS: J'ai encore un gros problème avec l'aide de VBA qui me retourne des erreurs de syntaxe lors de la recherche par mot clé d'où mes difficultés à mieux connaitre les arguments et la syntaxe exacte des fonctions.
Uspa
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
Ne t'excuse pas, on a tous été débutants.
La seule chose sur laquelle j'insiste toujours, c'est de demander aux questionneurs de lire l'aide et de chercher des solutions avant de poser leur question.
L'apprentissage, s'il n'est pas dispensé par une formation adéquat, peut|doit être faite par la lecture d'autres codes, de leur compréhension et de tests personnels : la recherche personnelle. Beaucoup arrivent ici sans avoir commencé par apprendre les bases :
- les types de variables,
- l'étendue des variables (Private, Public, Dim) et des fonctions ou Sub,
- les manipulations de chaine,
etc, sans parler de l'anglais (même de base) permettant de deviner l'utilité des mots clés du langage.