Gestion variable boucle FOR
Résolu
MastJager
Messages postés
21
Statut
Membre
-
MastJager Messages postés 21 Statut Membre -
MastJager Messages postés 21 Statut Membre -
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 :
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:
- Gestion variable boucle FOR
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- Gestion de fichiers - Télécharger - Gestion de fichiers
- Idm for mac - Télécharger - Téléchargement & Transfert
3 réponses
Bonjour
ça pourrait ressembler à ceci
Cdlmnt
ç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
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
RQ. Tu devrais utiliser l'indentation dans ton code (décalages pour mettre en evidence les blocs de code)
Cdlmnt
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
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
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
Je ne sais pas si le VBA pour enregistrer un tableau. En effet la suite de programme ce déroule comme ceci :
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.
Je vais tester de mon coter pour résoudre ce problème ! Cela me permettra de mieux comprendre ton programme ( Je débute évidemment :) )