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

Probleme VBA suite

5 réponses
Avatar
bruno
Voici quelque jours, j'ai déjà réclamé de l'aide sur ce forum et pierre
fauconnier ainsi que HS2O4, FFO etc...
m'ont donné quelques pistes et je les en remercie, mais malgré les
corrections apporté en suivant leurs conseils et mes efforts, cette macro ne
fonctionne toujours pas, auriez vous quelques pistes à me suggérer.
Je précises que je suis totalement débutant en vba.
Merci d'avance

Sub Etiquette_Atelier()
'
Feuil1.Select
'
Dim cellule As Range
Dim selection As Range
Dim cellule1 As Range
Dim cellule2 As Range
Dim cellule3 As Range
Dim cellule4 As Range
Dim OA As String
Dim Programme As String
Dim Couleur As String
Dim Quantite As String
'
Set selection = Range("A1:A350")
For Each cellule In selection.Rows
statut_ligne = Mid(cellule, 75, 8)
If statut_ligne = "atelier " Then
OA = Mid(cellule.Value, 2, 7) & "/" & Mid(cellule.Value, 9, 3)
Programme = Mid(cellule.Value, 126, 6) & "/" & Mid(cellule.Value, 129, 4)
Couleur = Mid(cellule.Value, 211, 6) & Mid(cellule.Value, 229, 10)
Quantite = Mid(cellule.Value, 116, 2)
'
Set cellule1 = Feuil9.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Value = OA
Set cellule2 = Feuil9.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Value = Programme
Set cellule3 = Feuil9.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Value = Couleur
Set cellule4 = Feuil9.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Value = Quantite
End If
Next cellule
End Sub

5 réponses

Avatar
MichDenis
Les auteurs vont sûrement se présenter ....

Mais rapidement je te suggère 3 choses :

A ) il y a assez de nom possible pour désigner une variable
de type Range sans utiliser un mot réservé du langage
VBA à cet effet. Je fais référence à
Set selection = Range("A1:A350")

B) Dans cette ligne de code :
If statut_ligne = "atelier " Then
Est-ce que l'espace après "atelier" est voulu ?

C ) quand tu compares 2 chaines de caractère, il
est prudent de t'assurer que la casse des caractères
n'influera pas sur le résultat à moins que cela soit désiré.
au lieu d'écrire : If statut_ligne = "atelier " Then
utilise plutôt : If Lcase(statut_ligne) = "atelier" Then



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

Voici quelque jours, j'ai déjà réclamé de l'aide sur ce forum et pierre
fauconnier ainsi que HS2O4, FFO etc...
m'ont donné quelques pistes et je les en remercie, mais malgré les
corrections apporté en suivant leurs conseils et mes efforts, cette macro ne
fonctionne toujours pas, auriez vous quelques pistes à me suggérer.
Je précises que je suis totalement débutant en vba.
Merci d'avance

Sub Etiquette_Atelier()
'
Feuil1.Select
'
Dim cellule As Range
Dim selection As Range
Dim cellule1 As Range
Dim cellule2 As Range
Dim cellule3 As Range
Dim cellule4 As Range
Dim OA As String
Dim Programme As String
Dim Couleur As String
Dim Quantite As String
'
Set selection = Range("A1:A350")
For Each cellule In selection.Rows
statut_ligne = Mid(cellule, 75, 8)
If statut_ligne = "atelier " Then
OA = Mid(cellule.Value, 2, 7) & "/" & Mid(cellule.Value, 9, 3)
Programme = Mid(cellule.Value, 126, 6) & "/" & Mid(cellule.Value, 129, 4)
Couleur = Mid(cellule.Value, 211, 6) & Mid(cellule.Value, 229, 10)
Quantite = Mid(cellule.Value, 116, 2)
'
Set cellule1 = Feuil9.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Value = OA
Set cellule2 = Feuil9.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Value = Programme
Set cellule3 = Feuil9.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Value = Couleur
Set cellule4 = Feuil9.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Value = Quantite
End If
Next cellule
End Sub
Avatar
h2so4
bonsoir,

je ne suis pas sur d'avoir compris exactement ce que tu cherches à
faire,mais j'ai fait selon ma compréhension.

Sub Etiquette_Atelier()
Dim cellule As Range

Dim OA As String
Dim Programme As String
Dim Couleur As String
Dim Quantite As String

For Each cellule In _
Worksheets("Feuil1").Range("A1:A350").Rows
statut_ligne = Mid(cellule, 75, 7)
If LCase(statut_ligne) = "atelier" Then
OA = Mid(cellule, 2, 7) & "/" _
& Mid(cellule.Value, 9, 3)
Programme = Mid(cellule, 126, 6) & "/" _
& Mid(cellule, 129, 4)
Couleur = Mid(cellule, 211, 6) & _
Mid(cellule, 229, 10)
Quantite = Mid(cellule, 116, 2)
'
With Worksheets("Feuil9").Range("A:A").End(xlDown)
.Offset(1, 0) = OA
.Offset(1, 1) = Programme
.Offset(1, 2) = Couleur
.Offset(1, 3) = Quantite
End With
End If
Next cellule
End Sub

--

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

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

Voici quelque jours, j'ai déjà réclamé de l'aide sur ce forum et pierre
fauconnier ainsi que HS2O4, FFO etc...
m'ont donné quelques pistes et je les en remercie, mais malgré les
corrections apporté en suivant leurs conseils et mes efforts, cette macro
ne
fonctionne toujours pas, auriez vous quelques pistes à me suggérer.
Je précises que je suis totalement débutant en vba.
Merci d'avance

Sub Etiquette_Atelier()
'
Feuil1.Select
'
Dim cellule As Range
Dim selection As Range
Dim cellule1 As Range
Dim cellule2 As Range
Dim cellule3 As Range
Dim cellule4 As Range
Dim OA As String
Dim Programme As String
Dim Couleur As String
Dim Quantite As String
'
Set selection = Range("A1:A350")
For Each cellule In selection.Rows
statut_ligne = Mid(cellule, 75, 8)
If statut_ligne = "atelier " Then
OA = Mid(cellule.Value, 2, 7) & "/" & Mid(cellule.Value, 9, 3)
Programme = Mid(cellule.Value, 126, 6) & "/" & Mid(cellule.Value, 129,
4)
Couleur = Mid(cellule.Value, 211, 6) & Mid(cellule.Value, 229, 10)
Quantite = Mid(cellule.Value, 116, 2)
'
Set cellule1 = Feuil9.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Value = OA
Set cellule2 = Feuil9.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Value = Programme
Set cellule3 = Feuil9.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Value = Couleur
Set cellule4 = Feuil9.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Value = Quantite
End If
Next cellule
End Sub





Avatar
bruno
Pour répondre aux questions de MichDenis :

A) pas de probmème je ne savais pas que ce nom était réservé par vba,
j'avais trouvé ça dans un bouquin, donc je renomme ma variable

B)oui l'espace est voulu car la plage est de 8 caractères, et je teste si =
au mot atelier qui en comporte 7

C) je ne connaissais pas cette expression, et il s'avère que c'était
apparement un des point bloquant de ma macro, merci donc pour cette remarque
très pertinente. Je ne connaissais pas Lcase, je vais aller bouquiner pour
voir comment celà fonctionne.



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

Les auteurs vont sûrement se présenter ....

Mais rapidement je te suggère 3 choses :

A ) il y a assez de nom possible pour désigner une variable
de type Range sans utiliser un mot réservé du langage
VBA à cet effet. Je fais référence à
Set selection = Range("A1:A350")

B) Dans cette ligne de code :
If statut_ligne = "atelier " Then
Est-ce que l'espace après "atelier" est voulu ?

C ) quand tu compares 2 chaines de caractère, il
est prudent de t'assurer que la casse des caractères
n'influera pas sur le résultat à moins que cela soit désiré.
au lieu d'écrire : If statut_ligne = "atelier " Then
utilise plutôt : If Lcase(statut_ligne) = "atelier" Then



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

Voici quelque jours, j'ai déjà réclamé de l'aide sur ce forum et pierre
fauconnier ainsi que HS2O4, FFO etc...
m'ont donné quelques pistes et je les en remercie, mais malgré les
corrections apporté en suivant leurs conseils et mes efforts, cette macro
ne
fonctionne toujours pas, auriez vous quelques pistes à me suggérer.
Je précises que je suis totalement débutant en vba.
Merci d'avance

Sub Etiquette_Atelier()
'
Feuil1.Select
'
Dim cellule As Range
Dim selection As Range
Dim cellule1 As Range
Dim cellule2 As Range
Dim cellule3 As Range
Dim cellule4 As Range
Dim OA As String
Dim Programme As String
Dim Couleur As String
Dim Quantite As String
'
Set selection = Range("A1:A350")
For Each cellule In selection.Rows
statut_ligne = Mid(cellule, 75, 8)
If statut_ligne = "atelier " Then
OA = Mid(cellule.Value, 2, 7) & "/" & Mid(cellule.Value, 9, 3)
Programme = Mid(cellule.Value, 126, 6) & "/" & Mid(cellule.Value, 129,
4)
Couleur = Mid(cellule.Value, 211, 6) & Mid(cellule.Value, 229, 10)
Quantite = Mid(cellule.Value, 116, 2)
'
Set cellule1 = Feuil9.Range("A4").End(xlDown).Offset(1, 0)
cellule1.Value = OA
Set cellule2 = Feuil9.Range("A4").End(xlDown).Offset(1, 1)
cellule2.Value = Programme
Set cellule3 = Feuil9.Range("A4").End(xlDown).Offset(1, 2)
cellule3.Value = Couleur
Set cellule4 = Feuil9.Range("A4").End(xlDown).Offset(1, 3)
cellule4.Value = Quantite
End If
Next cellule
End Sub





Avatar
JLuc
*Bonjour bruno*,
Que contient ta cellule pour devoir prendre des textes si loin ??
Tu pourrais peut être splitter les données dans un tableau, ce serait
sans doute plus simple à gerer !

Exemple :
cellule = "Rapport;Atelier;Nom;Situation;bleu;100"
MaTable = Split(cellule, ";")

ou, si le séparateur est un espace :
cellule = "Rapport Atelier Nom Situation bleu 100"
MaTable = Split(cellule)

Et tu obtiens :
Matable(1) --> "Rapport"
...
MaTable(5) --> "bleu"


OA = Mid(cellule.Value, 2, 7) & "/" & Mid(cellule.Value, 9, 3)
Programme = Mid(cellule.Value, 126, 6) & "/" & Mid(cellule.Value, 129, 4)
Couleur = Mid(cellule.Value, 211, 6) & Mid(cellule.Value, 229, 10)
Quantite = Mid(cellule.Value, 116, 2)


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
bruno
Merci à tous pour votre aide, ma macro fonctionne, entre autre grace au
Lcase, mercià tous pour votre aide et vos conseils, grace à vous j'ai
progressé un peu plus.


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

*Bonjour bruno*,
Que contient ta cellule pour devoir prendre des textes si loin ??
Tu pourrais peut être splitter les données dans un tableau, ce serait sans
doute plus simple à gerer !

Exemple :
cellule = "Rapport;Atelier;Nom;Situation;bleu;100"
MaTable = Split(cellule, ";")

ou, si le séparateur est un espace :
cellule = "Rapport Atelier Nom Situation bleu 100"
MaTable = Split(cellule)

Et tu obtiens :
Matable(1) --> "Rapport"
...
MaTable(5) --> "bleu"


OA = Mid(cellule.Value, 2, 7) & "/" & Mid(cellule.Value, 9, 3)
Programme = Mid(cellule.Value, 126, 6) & "/" & Mid(cellule.Value, 129,
4)
Couleur = Mid(cellule.Value, 211, 6) & Mid(cellule.Value, 229, 10)
Quantite = Mid(cellule.Value, 116, 2)


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O