Gestion variable boucle FOR

Résolu/Fermé
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018 - 12 mars 2018 à 14:44
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018 - 13 mars 2018 à 08:29
Bonjour,

J'ai besoin d'aide pour un problème de gestion de variables.
Le but de mon programme et de genérer un fichier .txt avec un formatage bien particulier de mes données inscrites sur mes feuilles Excel.

Actuellement je suis bloqué voici mon problème :

Je voudrais scruter la totalité de la colonne A jusqu'à la première ligne 'vide' avec un IsEmpty.
Faire une sorte de For 1 to IsEmpty(Feuil5.Cells(IP,1)
Avec ce For les 4 premières valeurs sont inscrites dans les variables E2,S2,E1,S1.
De plus, je voudrais inscrire ces 4 valeurs dans une nouvelle variable "Alarme(1)" qui contient les données E2,S2,E1,S1.

Pour résumé : Il y a x lignes dans ma feuil5 je voudrai que les lignes de 1 à 4 soit contenu dans les variables E2,S2,E1,S1 et que ces dernières soit enregistrer dans une variables Alarme(1) et ensuite ont recommence en prenant les variables 5 à 8 et inscrit dans Alarme(2)

Voici mon programme :
For IP = 1 To 21  '(IsEmpty(Feuil2.Cells(IP, 1)))

E2_ALARME = Feuil5.Cells(IP + 1, 1)
S2_ALARME = Feuil5.Cells(IP + 3, 1)
E1_ALARME = Feuil5.Cells(IP, 1)
S1_ALARME = Feuil5.Cells(IP + 2, 1)


Next


ALARME = "ITEM SYMBOL { " & vbCrLf & "NOM= " & nom_variable & vbCrLf & "TRAME=2000000,2ffffff,ffffffff,0" & vbCrLf & "CONTOUR=2ffffff,fffffff7,1" & vbCrLf & "UID=" & Hex(uID) & vbCrLf & "ANIMATION {" & vbCrLf & "@E2=&" & E2_ALARME & vbCrLf & "@S2=&" & S2_ALARME & vbCrLf & "@EI=&" & E1_ALARME & vbCrLf & "@SI=&" & S1_ALARME & vbCrLf & "}" & vbCrLf & "RECT=767,208,783,224" & vbCrLf & "Rotation = 0" & vbCrLf & "}"
A voir également:

3 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
12 mars 2018 à 16:20
Bonjour

ça pourrait ressembler à ceci

Option Explicit  ' oblige à déclarer toutes les variables

Public Sub OK()
Dim IP As Long, n As Long, lifin As Long
Dim ALARME()  ' tableau qu'on dimensionnera au fur et à mesure
Dim E2_ALARME, S2_ALARME, E1_ALARME, S1_ALARME
Dim AL As String
Dim nom_variable, uID   ' variables utilisées dans ta procedure
n = 0
With Sheets("Feuil5")
  lifin = .Range("A" & Rows.Count).End(xlUp).Row
  For IP = 1 To lifin Step 4  ' on saute 4 ligne à chaque tour de boucle
    E2_ALARME = .Cells(IP + 1, 1)
    S2_ALARME = .Cells(IP + 3, 1)
    E1_ALARME = .Cells(IP, 1)
    S1_ALARME = .Cells(IP + 2, 1)
    AL = "ITEM SYMBOL { " & vbCrLf & "NOM= " & nom_variable & vbCrLf _
         & "TRAME=2000000,2ffffff,ffffffff,0" & vbCrLf & "CONTOUR=2ffffff,fffffff7,1" & vbCrLf _
         & "UID=" & Hex(uID) & vbCrLf & "ANIMATION {" & vbCrLf & "@E2=&" & E2_ALARME & vbCrLf _
         & "@S2=&" & S2_ALARME & vbCrLf & "@EI=&" & E1_ALARME & vbCrLf & "@SI=&" _
         & S1_ALARME & vbCrLf & "}" & vbCrLf & "RECT=767,208,783,224" & vbCrLf _
         & "Rotation = 0" & vbCrLf & "}"
    ' redimensionner le tableau ALARME et affecter à sa dernière case la variable AL
    n = n + 1
    ReDim Preserve ALARME(1 To n)
    ALARME(n) = AL
  Next IP
End With
End Sub

Cdlmnt
1
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018
12 mars 2018 à 16:21
Je test ceci au plus vite et je te redit ! Merci d'avance pour ton aide
0
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018
Modifié le 12 mars 2018 à 16:39
Petite question, est ce que je pourrai utiliser la variable "AL" pour effectuer un Print dans un fichier txt ?
Je ne sais pas si le VBA pour enregistrer un tableau. En effet la suite de programme ce déroule comme ceci :


Open "D:\Users\test.txt" For Output As #1
Print #1, "//EDITEUR DE SYNOPTIQUE - SYNO"
Print #1, "//TIL TECHNOLOGIES (C)"
Print #1, "//VERSION 2.8"

Print #1, "Synoptique {" ' Début du fichier Synoptique
Print #1, AL 'Ancienne variable ALARME

Print #1, "CX=600" 'Début déclaration taille du synoptique
Print #1, "CY=400"
Print #1, "TRAME=2000000,2dcdcdc,1,1"
Print #1, "SYMBOL LOCAL=0"
Print #1, "LIBRAIRIE {"

Print #1, "}" 'Fin du fichier Synoptique
Print #1, "// Fin de fichier"

Close #1 'Fermer le fichier


Actuellement je répare l'érreur "9" "L'objet n'appartient pas à la sélection" Donc je n'est pas encore testé ton programme.

Edit : Je viens de comprendre qu'il faut inscrire le Nom de la feuille.
0
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018
12 mars 2018 à 16:46
La macro semble fonctionné, lors de l’exécution de celle ci le programme affiche bien les données de "AL" mais uniquement les dernières valeurs. Ceci doit être dût à mon Print, j'ai du mal le programmer pour qu'il lise toutes les itérations de la variable.

Je vais tester de mon coter pour résoudre ce problème ! Cela me permettra de mieux comprendre ton programme ( Je débute évidemment :) )



Option Explicit ' oblige à déclarer toutes les variables

Public Sub OK()
Dim IP As Long, n As Long, lifin As Long
Dim ALARME() ' tableau qu'on dimensionnera au fur et à mesure
Dim E2_ALARME, S2_ALARME, E1_ALARME, S1_ALARME
Dim AL As String
Dim nom_variable, uID ' variables utilisées dans ta procedure
n = 0
With Sheets("Ctrl ACCES RESULT ALARME")
lifin = .Range("A" & Rows.Count).End(xlUp).Row
For IP = 1 To lifin Step 4 ' on saute 4 ligne à chaque tour de boucle
E2_ALARME = .Cells(IP + 1, 1)
S2_ALARME = .Cells(IP + 3, 1)
E1_ALARME = .Cells(IP, 1)
S1_ALARME = .Cells(IP + 2, 1)
AL = "ITEM SYMBOL { " & vbCrLf & "NOM= " & nom_variable & vbCrLf _
& "TRAME=2000000,2ffffff,ffffffff,0" & vbCrLf & "CONTOUR=2ffffff,fffffff7,1" & vbCrLf _
& "UID=" & Hex(uID) & vbCrLf & "ANIMATION {" & vbCrLf & "@E2=&" & E2_ALARME & vbCrLf _
& "@S2=&" & S2_ALARME & vbCrLf & "@EI=&" & E1_ALARME & vbCrLf & "@SI=&" _
& S1_ALARME & vbCrLf & "}" & vbCrLf & "RECT=767,208,783,224" & vbCrLf _
& "Rotation = 0" & vbCrLf & "}"
' redimensionner le tableau ALARME et affecter à sa dernière case la variable AL
n = n + 1
ReDim Preserve ALARME(1 To n)
ALARME(n) = AL
Next IP
End With

Open "D:\Users\test.txt" For Output As #1
Print #1, "//EDITEUR DE SYNOPTIQUE - SYNO"
Print #1, "//TIL TECHNOLOGIES (C)"
Print #1, "//VERSION 2.8"

Print #1, "Synoptique {" ' Début du fichier Synoptique
Print #1, AL

Print #1, "CX=600" 'Début déclaration taille du synoptique
Print #1, "CY=400"
Print #1, "TRAME=2000000,2dcdcdc,1,1"
Print #1, "SYMBOL LOCAL=0"
Print #1, "LIBRAIRIE {"

Print #1, "}" 'Fin du fichier Synoptique
Print #1, "// Fin de fichier"

Close #1 'Fermer le fichier

End Sub
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié le 12 mars 2018 à 18:42
le programme affiche bien les données de "AL" mais uniquement les dernières valeurs.
Ben oui, tu fénfint tes n valeurs AL, puis tu ouvres ton fichier, puis tu lui envoie AL (donc la derniere valeur calculée) puis tu envoies au fichier test la derniere valeur de AL
On va faire ça en deux parties
1. Remplir le tableau ALARME avec les n valeurs AL
2. Créer le fichier test puis
2.1 lui envoyer l'entête
2.2. lui envoyer le tableau ALARME lihne par ligne (la boucle For ...)
2.3. lui envoyer la partie fin de fichier
Comme ceci
Option Explicit ' oblige à déclarer toutes les variables

Public Sub OK()
Dim IP As Long, n As Long, lifin As Long, k As Long
Dim ALARME() ' tableau qu'on dimensionnera au fur et à mesure
             ' et qui contiendra les AL successifs
Dim E2_ALARME, S2_ALARME, E1_ALARME, S1_ALARME
Dim AL As String
Dim nom_variable, uID ' variables utilisées dans ta procedure
n = 0
With Sheets("Ctrl ACCES RESULT ALARME")
  lifin = .Range("A" & Rows.Count).End(xlUp).Row
  For IP = 1 To lifin Step 4 ' on saute 4 ligne à chaque tour de boucle
    E2_ALARME = .Cells(IP + 1, 1)
    S2_ALARME = .Cells(IP + 3, 1)
    E1_ALARME = .Cells(IP, 1)
    S1_ALARME = .Cells(IP + 2, 1)
    AL = "ITEM SYMBOL { " & vbCrLf & "NOM= " & nom_variable & vbCrLf _
         & "TRAME=2000000,2ffffff,ffffffff,0" & vbCrLf & "CONTOUR=2ffffff,fffffff7,1" & vbCrLf _
         & "UID=" & Hex(uID) & vbCrLf & "ANIMATION {" & vbCrLf & "@E2=&" & E2_ALARME & vbCrLf _
         & "@S2=&" & S2_ALARME & vbCrLf & "@EI=&" & E1_ALARME & vbCrLf & "@SI=&" _
         & S1_ALARME & vbCrLf & "}" & vbCrLf & "RECT=767,208,783,224" & vbCrLf _
         & "Rotation = 0" & vbCrLf & "}"
    ' redimensionner le tableau ALARME et affecter à sa dernière case la variable AL
    n = n + 1
    ReDim Preserve ALARME(1 To n)
    ALARME(n) = AL
  Next IP
End With
' le tableau ALARME est rempli avec les n AL
' il ne reste qu'à l'envoyer dans le fichier test
Open "D:\Users\test.txt" For Output As #1
' en tête du fichier test
Print #1, "//EDITEUR DE SYNOPTIQUE - SYNO"
Print #1, "//TIL TECHNOLOGIES (C)"
Print #1, "//VERSION 2.8"
Print #1, "Synoptique {" ' Début du fichier Synoptique
 ' ecriture des n AL du tableau ALARME
For k = 1 To n
  Print #1, ALARME(k)
Next k
' fin du fichier test
Print #1, "CX=600" 'Début déclaration taille du synoptique
Print #1, "CY=400"
Print #1, "TRAME=2000000,2dcdcdc,1,1"
Print #1, "SYMBOL LOCAL=0"
Print #1, "LIBRAIRIE {"
Print #1, "}" 'Fin du fichier Synoptique
Print #1, "// Fin de fichier"
Close #1 'Fermer le fichier
End Sub

RQ. Tu devrais utiliser l'indentation dans ton code (décalages pour mettre en evidence les blocs de code)

Cdlmnt
1
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018
13 mars 2018 à 08:29
Bonjour,

Désolé du retard ! Mais je tient à grandement te remercier le code fonctionne à merveille !
Merci pour le temps consacré :=).

P.S: Je vais coder sur Notepadd maintenant pour y voir plus claire avec les indentations !
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
12 mars 2018 à 16:54
Petite question, est ce que je pourrai utiliser la variable "AL" pour effectuer un Print dans un fichier txt
oui comme tu as fait
Print #1, AL

Je ne sais pas si le VBA pour enregistrer un tableau.
Comme il faut l'envoyer ligne par ligne, ce n'est pas la peine de mettre les AL dans un tableau
0
MastJager Messages postés 21 Date d'inscription jeudi 27 avril 2017 Statut Membre Dernière intervention 13 mars 2018
12 mars 2018 à 16:59
Pour moi il me semblait nécessaire d'avoir les AL dans un tableau pour pouvoir inscrire les valeurs de E2 E1 S1 S2, j'avoue que je ne savais pas que VBA ne permet pas d'enregistrer ! :/

Penses-tu qu'il existerai une autre solution ? Ou ce sont les limites de VBA ?
0