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

4 réponses

1 2
Avatar
bruno
Pour répondre à la question de pierre, voici le fonctionnement que je
souhaite
Je suis dans une feuille X d'ou je lance ma macro
La macro va lire dans chaque lignes de la collone A de la feuil1 si à partir
du caractère 75 si il est indiqué Atelier ou Chantier
Si c'est égale à atelier, alors il lit différentes portions de ce texte et
va copier ces informations dans différentes cellules de la feuilleY
De plus (je n'ai pas encore essayé de coder cette partie) si la quantité >
à1 alors il doit coller ces informations sur un nombre de ligne égale à la
quantité.

Voilà j'espère avoir été clair, à partir de ces informations peut être aurez
vous des conseils autres pour faire fonctionner cette macro.

PS : Ca se voit surement mais je précises que je suis débutant en vba, d'ou
certaines imprécisions et mauvaises habitudes dans mon code.
Avatar
bruno
Malheureusement ce fichier est très lourd, donc difficile à poster sur
cjoint.com, de plus il y a malheureusement un problème de condidentialité,
car ce fichier sert à utiliser des données texte que nous envoie notre
client, et je ne suis pas certain qu'il veuille voir ces données ce balader
sur un newsgroup, pourtant ce serait bien pratique pour que vous puissiez
m'aider.


"LSteph" a écrit dans le message de news:
%
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




Avatar
anonymousA
Bonjour,

Peut-être comme ça,ca pourrait coller. J'ai condensé ton code et corrigé
celui-ci en fonction du fait que j'ai compris qu'il fallait que tu
parcoures les lignes de Usedrange dans la colonne A de la feuille Feuil1.
Par ailleurs, j'ai aussi supposé que tu voulais inscrire dans la Feuil4
à compter de la 1ere cellule non vide de la colonne A ( mais si ce n'est
pas le cas il te faudra adapter le code). Par ailleurs, .formula attend
des données Américaines pour les formules, mais ca c'est à toi de voir
en fonction de tes données.

Sub Etiquette_Atelier()

For Each ligne In Sheets("Feuil1").UsedRange.Rows

valeur = Cells(ligne.Row, 1).Value

If Mid(valeur, 75, 8) = "ATELIER " Then

With Feuil4.Range("A65536").End(xlUp)

.Offset(1, 0).Formula = Mid(valeur, 2, 7) & "/" &
Mid(valeur, 9, 3)
.Offset(1, 1).Formula = Mid(valeur, 126, 6) & "/" &
Mid(valeur, 129, 4)
.Offset(1, 2).Formula = Mid(valeur, 211, 6) & Mid(valeur,
229, 10)
.Offset(1, 3).Formula = Mid(valeur, 116, 2)

End With

End If

Next ligne

End Sub

Je en sais pas si ca peut résoudre ton problème mais qui ne tente rien
n'a rien.

A+


Pour répondre à la question de pierre, voici le fonctionnement que je
souhaite
Je suis dans une feuille X d'ou je lance ma macro
La macro va lire dans chaque lignes de la collone A de la feuil1 si à partir
du caractère 75 si il est indiqué Atelier ou Chantier
Si c'est égale à atelier, alors il lit différentes portions de ce texte et
va copier ces informations dans différentes cellules de la feuilleY
De plus (je n'ai pas encore essayé de coder cette partie) si la quantité >
à1 alors il doit coller ces informations sur un nombre de ligne égale à la
quantité.

Voilà j'espère avoir été clair, à partir de ces informations peut être aurez
vous des conseils autres pour faire fonctionner cette macro.

PS : Ca se voit surement mais je précises que je suis débutant en vba, d'ou
certaines imprécisions et mauvaises habitudes dans mon code.




Avatar
h2so4
"bruno" wrote in message
news:
Pour répondre à la question de pierre, voici le fonctionnement que je
souhaite
Je suis dans une feuille X d'ou je lance ma macro
La macro va lire dans chaque lignes de la collone A de la feuil1 si à
partir du caractère 75 si il est indiqué Atelier ou Chantier
Si c'est égale à atelier, alors il lit différentes portions de ce texte et
va copier ces informations dans différentes cellules de la feuilleY
De plus (je n'ai pas encore essayé de coder cette partie) si la quantité >
à1 alors il doit coller ces informations sur un nombre de ligne égale à la
quantité.

Voilà j'espère avoir été clair, à partir de ces informations peut être
aurez vous des conseils autres pour faire fonctionner cette macro.

PS : Ca se voit surement mais je précises que je suis débutant en vba,
d'ou certaines imprécisions et mauvaises habitudes dans mon code.



Bonsoir,

Dès lors, je pense que la modification que j'ai proposée le 20/5 à 23:37
devrait te permettre de faire ce que tu souhaites.

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


worksheets("Feuil1").cells(ligne, 1).select : 'activer la cellule A de la
ligne

Statut_ligne = Mid(ActiveCell.Value, 75, 8)
'
If ucase(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



--

h2so4
play triogical at http://www.triogical.com

1 2