Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Besoin d'aide VBA

14 réponses
Avatar
bruno
Je ne comprend pas pourquoi ce bout de code ne fonctionne pas, lors de
l'execution, il n'y a que les 2 premières lignes qui sont interprétés, mais
excel ne envoie pas d'erreur de compilation

Sub Etiquette_Atelier()
'
Sheets("Feuil1").Select
Range("A1").Select
'
For Each ligne In ActiveSheet.UsedRange.Rows
Statut_ligne = Mid(ActiveCell.Value, 75, 3)
'
If Statut_ligne = "ATELIER" Then
'
OA = Mid(ActiveCell.Value, 2, 7) & Mid(ActiveCell.Value, 9, 3)
Programme = Mid(ActiveCell.Value, 126, 6) & Mid(ActiveCell.Value, 129, 4)
Couleur = Mid(ActiveCell.Value, 211, 6) & Mid(ActiveCell.Value, 229, 10)
Quantite = Mid(ActiveCell.Value, 116, 2)
'
Sheets("pour faire etiquettes at").Select
Range("A4").End(xlDown).Offset(1, 0).Select
Range(ActiveCell).Formula = "ATELIER"
Range(ActiveCell.Offset(1, 0)).Formula = Programme
Range(ActiveCell.Offset(2, 0)).Formula = Couleur
Range(ActiveCell.Offset(3, 0)).Formula = Quantite
End If
Next
End Sub

10 réponses

1 2
Avatar
FFO
Salut Bruno
Pour moi il ya une incohérence sur 2 instructions qui se suivent :
Statut_ligne = Mid(ActiveCell.Value, 75, 3)
If Statut_ligne = "ATELIER" Then

La première signifie que Statut_ligne est égale à un morceau de la valeur de
la cellule active morceau qui démarre à la 75eme élément de celle-ci avec
les 2 éléments suivantes soit globalement 3 éléments

La deuxième signifie si Statut_ligne = "ATELIER" alors et la suite

Comment est il possible qu'un paramètre puisse être égale à "ATELIER" qui
représente 7 caractères alors qu'on lui donne juste avant une valeur à 3
caractères

Statut_ligne ne pourra jamais être égale à "ATELIER" et donc la suite du
code ne pourra jamais avoir lieu

En modifiant la ligne comme ceci :
Statut_ligne = Mid(ActiveCell.Value, 1, 7)
Et mettant dans la cellule active le mot "ATELIER" je sollicite le reste de
la macro

A toi donc de voir la correction à apporter ou nous donner plus de précision
pour notre aide éventuelle

Au plaisir de te lire




Je ne comprend pas pourquoi ce bout de code ne fonctionne pas, lors de
l'execution, il n'y a que les 2 premières lignes qui sont interprétés, mais
excel ne envoie pas d'erreur de compilation

Sub Etiquette_Atelier()
'
Sheets("Feuil1").Select
Range("A1").Select
'
For Each ligne In ActiveSheet.UsedRange.Rows
Statut_ligne = Mid(ActiveCell.Value, 75, 3)
'
If Statut_ligne = "ATELIER" Then
'
OA = Mid(ActiveCell.Value, 2, 7) & Mid(ActiveCell.Value, 9, 3)
Programme = Mid(ActiveCell.Value, 126, 6) & Mid(ActiveCell.Value, 129, 4)
Couleur = Mid(ActiveCell.Value, 211, 6) & Mid(ActiveCell.Value, 229, 10)
Quantite = Mid(ActiveCell.Value, 116, 2)
'
Sheets("pour faire etiquettes at").Select
Range("A4").End(xlDown).Offset(1, 0).Select
Range(ActiveCell).Formula = "ATELIER"
Range(ActiveCell.Offset(1, 0)).Formula = Programme
Range(ActiveCell.Offset(2, 0)).Formula = Couleur
Range(ActiveCell.Offset(3, 0)).Formula = Quantite
End If
Next
End Sub





Avatar
Pierre Fauconnier
Bonsoir

Je n'ai pas tout regardé, mais si
Statut_ligne = Mid(ActiveCell.Value, 75, 3)
alors,
Statut_ligne ne sera jamais égal à "ATELIER"...
puisque le nombre de caractères de Statut_Ligne sera 3... et ATELIER
compte 7 lettres...
Utilise la méthode "pas à pas" du debogueur pour tester ce qui se
passe. Tu peux par exemple saisir ceci, dans la fenêtre d'exécution
(CTRL+G)
? activesheet.UsedRange.Address
lorsque la ligne "for each ligne..." est en jaune, pour voir la plage
renvoyée par UsedRange...

Ok?


bruno a formulé la demande :
Je ne comprend pas pourquoi ce bout de code ne fonctionne pas, lors de
l'execution, il n'y a que les 2 premières lignes qui sont interprétés, mais


--
Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")

Avatar
bruno
Effectivement FFo, ta réponse est exact, il y a une incohérence, je l'ai
rectifié, mais le résultat est toujours identique :(


"FFO" a écrit dans le message de news:

Salut Bruno
Pour moi il ya une incohérence sur 2 instructions qui se suivent :
Statut_ligne = Mid(ActiveCell.Value, 75, 3)
If Statut_ligne = "ATELIER" Then

La première signifie que Statut_ligne est égale à un morceau de la valeur
de
la cellule active morceau qui démarre à la 75eme élément de celle-ci avec
les 2 éléments suivantes soit globalement 3 éléments

La deuxième signifie si Statut_ligne = "ATELIER" alors et la suite

Comment est il possible qu'un paramètre puisse être égale à "ATELIER" qui
représente 7 caractères alors qu'on lui donne juste avant une valeur à 3
caractères

Statut_ligne ne pourra jamais être égale à "ATELIER" et donc la suite du
code ne pourra jamais avoir lieu

En modifiant la ligne comme ceci :
Statut_ligne = Mid(ActiveCell.Value, 1, 7)
Et mettant dans la cellule active le mot "ATELIER" je sollicite le reste
de
la macro

A toi donc de voir la correction à apporter ou nous donner plus de
précision
pour notre aide éventuelle

Au plaisir de te lire




Je ne comprend pas pourquoi ce bout de code ne fonctionne pas, lors de
l'execution, il n'y a que les 2 premières lignes qui sont interprétés,
mais
excel ne envoie pas d'erreur de compilation

Sub Etiquette_Atelier()
'
Sheets("Feuil1").Select
Range("A1").Select
'
For Each ligne In ActiveSheet.UsedRange.Rows
Statut_ligne = Mid(ActiveCell.Value, 75, 3)
'
If Statut_ligne = "ATELIER" Then
'
OA = Mid(ActiveCell.Value, 2, 7) & Mid(ActiveCell.Value, 9, 3)
Programme = Mid(ActiveCell.Value, 126, 6) & Mid(ActiveCell.Value, 129,
4)
Couleur = Mid(ActiveCell.Value, 211, 6) & Mid(ActiveCell.Value, 229,
10)
Quantite = Mid(ActiveCell.Value, 116, 2)
'
Sheets("pour faire etiquettes at").Select
Range("A4").End(xlDown).Offset(1, 0).Select
Range(ActiveCell).Formula = "ATELIER"
Range(ActiveCell.Offset(1, 0)).Formula = Programme
Range(ActiveCell.Offset(2, 0)).Formula = Couleur
Range(ActiveCell.Offset(3, 0)).Formula = Quantite
End If
Next
End Sub







Avatar
Pierre Fauconnier
Le deuxième problème vient du fait que tu changes la feuille active à
l'intérieur de la boucle
for each ligne in ACTIVESHEET.UsedRange.rows, et que tu utilises des
références à activecell alors que tu as changé de feuilles.

Utilise des objets Worksheet et Range, plutôt que de sélectionner des
feuilles et des cellules.

J'utiliserais plutôt un code qui se servirait du nom VBA des feuilles
(celui que tu vois dans les propriétés VBA de la feuille...
Si le nom vba de Feuil1 est Feuil1 et celui de "pour faire etiquettes
AT" est Feuil2 ( par exemple ), je coderais comme ceci
for each ligne in feuil1.usedrange.rows
...
...
Quantite = Mid(ActiveCell.Value, 116, 2)
set cellule = feuil2.range("a4").End(xlDown).Offset(1, 0)
cellule.formula = ...
...
next ligne

Ok?


bruno a formulé la demande :
Effectivement FFo, ta réponse est exact, il y a une incohérence, je l'ai
rectifié, mais le résultat est toujours identique :(


--
Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")

Avatar
bruno
J'ai corrigé le code en suivant les remarques de FFO et de Pierre, mais j'ai
toujours le même problème. Je vous remet le code corrigé pour voir si je
n'ai pas rajouté des erreurs en essayant de suivre les conseils de Pierre.

Sub Etiquette_Atelier()
'
Sheets("Feuil1").Select
Range("A3").Select
'
For Each ligne In ActiveSheet.UsedRange.Rows
Statut_ligne = Mid(ActiveCell.Value, 75, 8)
'
If Statut_ligne = "ATELIER " Then
'
OA = Mid(ActiveCell.Value, 2, 7) & "/" & Mid(ActiveCell.Value, 9, 3)
Programme = Mid(ActiveCell.Value, 126, 6) & "/" & Mid(ActiveCell.Value,
129, 4)
Couleur = Mid(ActiveCell.Value, 211, 6) & Mid(ActiveCell.Value, 229, 10)
Quantite = Mid(ActiveCell.Value, 116, 2)
'
Set cellule1 = Feuil4.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Formula = OA
Set cellule2 = Feuil4.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Formula = Programme
Set cellule3 = Feuil4.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Formula = Couleur
Set cellule4 = Feuil4.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Formula = Quantite
End If
Next ligne
End Sub
Avatar
h2so4
"bruno" wrote in message
news:OYP3$
J'ai corrigé le code en suivant les remarques de FFO et de Pierre, mais
j'ai toujours le même problème. Je vous remet le code corrigé pour voir si
je n'ai pas rajouté des erreurs en essayant de suivre les conseils de
Pierre.

Sub Etiquette_Atelier()
'
Sheets("Feuil1").Select
Range("A3").Select
'
For Each ligne In ActiveSheet.UsedRange.Rows


L'instruction suivante examine le contenu de la cellule active, qui est
selon moi A3.
il faudrait activer la cellule en fonction de la variable ligne et de la
colonne dans laquelle se trouve le texte "ATELIER " à tester.
worksheets("Feuil1").cells(ligne, 1).select : ' remplacer 1 par le numéro de
colonne adéquat

Statut_ligne = Mid(ActiveCell.Value, 75, 8)
'
If Statut_ligne = "ATELIER " Then



'
OA = Mid(ActiveCell.Value, 2, 7) & "/" & Mid(ActiveCell.Value, 9, 3)
Programme = Mid(ActiveCell.Value, 126, 6) & "/" & Mid(ActiveCell.Value,
129, 4)
Couleur = Mid(ActiveCell.Value, 211, 6) & Mid(ActiveCell.Value, 229, 10)
Quantite = Mid(ActiveCell.Value, 116, 2)
'
Set cellule1 = Feuil4.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Formula = OA
Set cellule2 = Feuil4.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Formula = Programme
Set cellule3 = Feuil4.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Formula = Couleur
Set cellule4 = Feuil4.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Formula = Quantite
End If
Next ligne
End Sub



Avatar
Pierre Fauconnier
Pourrais-tu nous expliquer, en français, c'est-à-dire sans code, ce que
tu souhaites réaliser?

bruno a présenté l'énoncé suivant :
J'ai corrigé le code en suivant les remarques de FFO et de Pierre, mais j'ai
toujours le même problème.


--
Pierre Fauconnier
Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")

Avatar
jps
dis, pierre, t'arrêtes de me prendre la tête à l'aube rieuse avec tes
citations à la chiche m'a eu (comme notera GD), steplé? peut-être faudrat-il
que tu m'offres une triple pinte de bière alsacienne pour que je la
comprenne (la citation, pas la bière
:-)))
jps

"Pierre Fauconnier" a écrit dans le
message de news:

Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")




Avatar
LSteph
;-)
Mais non Jean-Paul!
Ce sera maintenant...!
...précisément le moment où on l'apprécie le mieux(la bière !..pas la
citation....


dis, pierre, t'arrêtes de me prendre la tête à l'aube rieuse avec tes
citations à la chiche m'a eu (comme notera GD), steplé? peut-être faudrat-il
que tu m'offres une triple pinte de bière alsacienne pour que je la
comprenne (la citation, pas la bière
:-)))
jps

"Pierre Fauconnier" a écrit dans le
message de news:

Il n'y a jamais eu un moment dans votre vie qui ne se passait pas
"maintenant" et il n'y en aura jamais (Eckart Toll in "Le pouvoir du
moment présent")








Avatar
LSteph
Bonjour Bruno,

Cela laisse apparaître que tu as bien essayé de suivre les conseils de
Pierre et FFO mais peut-être pas complètement..
il y a toujours ces .select et un doute sur le nombre de caractères 8 ou
7 , le défaut possible d'Ucase (si ATELIER en majuscule et avec ou pas
cet espace au bout),...

outre ce qui t'as été suggèré, tu sembles vouloir fixer des variables
diverses et variées plutôt des Range visiblement à partir d'autres
variables composée de chaines de caractères parmi lesquelles une "Quantité".
(Des déclarations avec un type seraient facultatives, sans doute, mais
éclairciraientt quelque peu)
Statut_Ligne doit il vraiment être redéfini à chaque boucle?

Donc (au lieu des .Select et répétitions d'activecell.value peut-être)
déclarer pour utiliser des variables qui vont servir
exemple:
Dim mycell as range, Couleur as string
Set mycellþuil1.[a3]
Couleur = Mid(mycell, 211, 6)& "..."


A ce que propose Pierre (nous dire l'objectif) pourrais tu donc en plus,
metttre un exemplaire de ton classeur par là: http://www.cjoint.com
et nous redonner le lien sur ce fil, on y verra plus clair.

Cordialement.

LSteph

J'ai corrigé le code en suivant les remarques de FFO et de Pierre, mais j'ai
toujours le même problème. Je vous remet le code corrigé pour voir si je
n'ai pas rajouté des erreurs en essayant de suivre les conseils de Pierre.

Sub Etiquette_Atelier()
'
Sheets("Feuil1").Select
Range("A3").Select
'
For Each ligne In ActiveSheet.UsedRange.Rows
Statut_ligne = Mid(ActiveCell.Value, 75, 8)
'
If Statut_ligne = "ATELIER " Then
'
OA = Mid(ActiveCell.Value, 2, 7) & "/" & Mid(ActiveCell.Value, 9, 3)
Programme = Mid(ActiveCell.Value, 126, 6) & "/" & Mid(ActiveCell.Value,
129, 4)
Couleur = Mid(ActiveCell.Value, 211, 6) & Mid(ActiveCell.Value, 229, 10)
Quantite = Mid(ActiveCell.Value, 116, 2)
'
Set cellule1 = Feuil4.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Formula = OA
Set cellule2 = Feuil4.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Formula = Programme
Set cellule3 = Feuil4.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Formula = Couleur
Set cellule4 = Feuil4.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Formula = Quantite
End If
Next ligne
End Sub




1 2