Peut on utiliser deux "for each" simultanément?

kaiser

XLDnaute Occasionnel
Bonjour le forum

Voila j'ai un fichier de base, qui grace a un CommandButton va remplir un fichier annexe vierge en fonction de certains critéres puis finira en enregisrant ce fichier sous un autre nom.
J'ai réalisé le code en commencant par faire faire ce que je voulais au programme pour la premiére personne de la liste, pour cette personne ca marche sans souci, mais maitenant je voudrais que avec ce même bouton il me fasse la même chose pour toute les personnes.
Seulement il ne veut pas et me dis "For crontrol variable already in use" (la variable de controle "for" est deja utilisé).

Je me demande donc si il est possible d'utiliser deux commandes "for" en même temps ou sil existe une autre technique pour que je parvienne à mes fins.

Une petite image pour illustrer tout ca:
http://img172.imageshack.us/my.php?image=tempbi6.jpg

et voici mon programme (version qui fonctionne pour une personne)
Code:
Private Sub CommandButton1_Click()
Dim Cell As Range
Dim remplace As String, poste As String, explication As String, mois As String
Dim nom As String, prenom As String
Dim heure As Integer, jour As Integer


Workbooks.Open "c:\Documents And Settings\diaquint\My Documents\rpl.xls"
ActiveWindow.WindowState = xlMinimized
Workbooks("2007Schicht2modif1.xls").Activate
ActiveWindow.WindowState = xlMaximized

Set plage_date = Range("D9:AG9")
i=5
    For Each Cell In plage_date
    If Cell.Interior.ColorIndex = 6 Or Cell.Interior.ColorIndex = 7 Then
 i=i+1
    nom = Range("B9")
    prenom = Range("B10")
    Workbooks("rpl").Worksheets("sheet1").Range("C3") = prenom & " " & nom
    Workbooks("rpl").Worksheets("sheet1").Range("C3").Borders.LineStyle = xLineStyleNone
    heure = Cell.Value
    jour = Cells(6, Cell.column)
     
         Select Case ActiveSheet.Name
         blablabla
         End Select
         
    Workbooks("rpl").Worksheets("sheet1").Range("E1") = mois
    With Workbooks("rpl").Worksheets("sheet1").Range("E1").Font
    .Bold = False
    .Italic = False
    .Underline = False
    End With
    Workbooks("rpl").Worksheets("sheet1").Cells(i, 1) = heure
    Workbooks("rpl").Worksheets("sheet1").Cells(i, 2) = jour & " " & mois

    remplace = InputBox("Entrez le nom de la personne remplacée le " & jour & " " & mois & " par " & prenom & " " & nom, "Remplacement")
    Workbooks("rpl").Worksheets("sheet1").Cells(i, 3) = remplace
    poste = InputBox("Entrez le poste", "Remplacement")
    Workbooks("rpl").Worksheets("sheet1").Cells(i, 4) = poste
    explication = InputBox("Entrez les explications du remplacement", "Remplacement")
    Workbooks("rpl").Worksheets("sheet1").Cells(i, 5) = explication
    End If
Next

Workbooks("rpl").Activate
Workbooks("rpl").SaveAs Filename:="remplacement " & mois & " " & nom
  

End Sub
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Peut on utiliser deux "for each" simultanément?

bonjour kaiser

sans savoir comment sont disposés les noms prénoms etc
il ne sera pas possible de t'aider

tout juste peut-on voir que les noms prénoms de la 1ere personne sont dans la colonne B et se suivent

ou sont les autres ??

par ailleurs on n'arretera pas de dire et repeter qu'une macro est infiniment plus lisible dans son contexte a savoir un fichier

peux-tu en creer un avec quelques données non confidentielles presentant les divers cas de figure ??
 

kaiser

XLDnaute Occasionnel
Re : Peut on utiliser deux "for each" simultanément?

j'ai mis l'image justement dans le but d'aider a la visualisation.

Le prenom est en B9 et le nom en B10, j'ai volontairement supprimé les noms par "confidentialité".

Je vais faire une archive avec le fichier la et le fichier secondaire pour que ce soit plus clair.
 

kaiser

XLDnaute Occasionnel
Re : Peut on utiliser deux "for each" simultanément?

Voila une ptite archive pour plus de clarté.

Elle fonctionne au poil pour la premiere personne, mais le but est qu'elle fasse la même chose pour les autres personne de la liste.
 

Pièces jointes

  • kaiser.zip
    20.4 KB · Affichages: 28
  • kaiser.zip
    20.4 KB · Affichages: 28
  • kaiser.zip
    20.4 KB · Affichages: 28

pierrejean

XLDnaute Barbatruc
Re : Peut on utiliser deux "for each" simultanément?

bonjour kaiser

vois si cette version te convient

Attention : j'ai du modifier le chemin de rpl.xls , le renommer Workbooks("rpl.xls") au lieu de Workbooks("rpl") a cause je pense de ma version (Excel 2000)

en cas de souci ne pas hesiter a revenir
 

Pièces jointes

  • kaiser.zip
    19.4 KB · Affichages: 22
  • kaiser.zip
    19.4 KB · Affichages: 21
  • kaiser.zip
    19.4 KB · Affichages: 22

kaiser

XLDnaute Occasionnel
Re : Peut on utiliser deux "for each" simultanément?

bonjour le forum

Merci PierreJean pour ton aide, ca m'aide enormément!
Même si ca ne marche pas encore à la perfection: certains cas ( les fleches rouge) ne sont pas pris en compte dans l'exemple du fichier ci dessous (la y a toute les personnes de la tournée).
Il faudrait aussi exlure les 4 lignes (29 a 32) la ou le calendrier est repeté, et donc par conséquent une fois que n a pris la valeur 27 il faudrait directement passer a la valeur 33.

Mais mis a part le fait que ca marche pas encore au poil j'ai quelques question:

1. que signifie la ligne:
Code:
For n = 9 To Range("B65536").End(xlUp).Row Step 2

2. Pourquoi as tu créer une variable "feuille" avec le nom des classeurs? Le "Select case" avec directement "activesheetname" dedans ca allais pas?



Voila encore une fois merci de ton aide
 

Pièces jointes

  • kaiser.zip
    22.1 KB · Affichages: 19
  • kaiser.zip
    22.1 KB · Affichages: 16
  • kaiser.zip
    22.1 KB · Affichages: 20
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Peut on utiliser deux "for each" simultanément?

bonjour kaiser

avant de me pencher à nouveau sur ton fichier:
réponse à tes questions

1)
For n = 9 To Range("B65536").End(xlUp).Row Step 2

boucle a partir de 9 (1ere ligne ayant un nom ) jusqu'a la derniere ligne non vide de la colonne B , par pas de 2 (9 11 13 etc) c-a-d les lignes ayant un nom

2) lorsque le fichier rpl.xls est ouvert c'est lui qui est activé et le Activesheet.Name n'est plus celui du fichier kaiser
pour ne pas deplacer tout le select j'ais préféré créer une variable alimentée au bon moment

pour le reste je regarde​
 

pierrejean

XLDnaute Barbatruc
Re : Peut on utiliser deux "for each" simultanément?

re

kaiser est un farceur !!

il introduit subrepticement une ligne vide (reduite au minimum)
du coup les noms ne se repetent plus toute les 2 lignes mais toute les 3 lignes
d'ou la modif:
For n = 9 To Range("B65536").End(xlUp).Row Step 2
devient​

For n = 9 To Range("B65536").End(xlUp).Row Step 3​


quant a passer de 27 (en fait 30) a 33 il suffit de le dire !!

if n=30 then n=33​

vois si cela te convient

edit:
bravo
j'avais pas rafraichi !!!​


 

Pièces jointes

  • kaiser.zip
    22 KB · Affichages: 21
  • kaiser.zip
    22 KB · Affichages: 20
  • kaiser.zip
    22 KB · Affichages: 20

kaiser

XLDnaute Occasionnel
Re : Peut on utiliser deux "for each" simultanément?

héhé, et ouais j'susi un ptit filou!^^

en fait la ligne du milieu sert a bien différencier les différentes lignes de noms, de l'avis commun entre moi et les chef d'équipe ca fais mieux comme ca que avec un simple cadre.

Existe-t-il un moyen pour que excel fasse toutes les manips en arriére plan en gardant a l'ecran la feuille de pointage et sans qu'il essaye de rafraichir sans cesse les feuilles de remplacement?
 

kaiser

XLDnaute Occasionnel
Re : Peut on utiliser deux "for each" simultanément?

Yep pas mal!

Seul probléme: avec "Application.ScreenUpdating = False" il est impossible de deplacer les inputbox pour bien voir les pointages (le mouvement des inputbox laisse une trainée à l'écran)

Donc pour corriger ca, j'ai mis des valeurs pour la position en X et en Y des input box (afin de caler les inputbox dans le coin supérieur droit de la fenetre, juste sous les 3boutons reduire/agrandir/fermer d'excel) seulement pour parvenir a ca, j'ai du mettre comme valeur 10000en X et 350 en Y.
Ma question est: à quoi correspondent ces valeurs? (c'est pas des cm, ni des pixels...)
 

pierrejean

XLDnaute Barbatruc
Re : Peut on utiliser deux "for each" simultanément?

re

l'unité est le twip

et d'apres mes recherches

Un centimètre contient 567 twips

exactement:
1cm = 566.92913385826771653543307086614 Twips

mais il n'est pas impossible qu'en réalité cela soit subordonné a la

resolution de l'ecran utilisé

je pense qu'il y a la une base suffisante pour l'utilisation courante

s'il te faut mieux j'approfondirais

derniere minute:

1Pixel=15 Twips

ce qui raccorde le twip a la resolution
 
Dernière édition:

kaiser

XLDnaute Occasionnel
Re : Peut on utiliser deux "for each" simultanément?

Eh beh t'es vraiment l'homme de la situation PierreJean!

Encore une fois un grand merci à toi pour t'être penché avec autant de ferveur sur mon cas!

Pour les twips merci pour les infos, je me débrouillerais si je veut plus de precision.
C'est juste que avec des chiffres aussi élevé je voyais deja les membres de mon jury de stage me demandé l'unité utilisé, donc c'est cool j'ai de quoi leur répondre!

Par contre on ne peut surement pas qvoir
1cm = 566.92913385826771653543307086614 Twips
et 1pixel = 15twips car ca impliquerais que 1cm = 37.8 pixels et ca c'est une caractéristiques qui varie sur chaque écran!
Je vais creuser un peu voir ce que je trouve la dessus!
 

JYLL

Nous a quitté
Repose en paix
Re : Peut on utiliser deux "for each" simultanément?

Bonsoir PierreJean, Kaiser et le forum,

Si je ne trompes pas, la résolution d'un écran c'est 72PPP après suivant la taille de l'écran on a plus ou moins de points et c'est pour cela que suivant la taille de l'écran, il y a toujours une résolution de conseillée. Quand on fait une copie d'écran, si on va dans un logiciel de traitement d'image et que l'on regarde la résolution de l'image on a 72PPP.

J'espère ne pas me tromper. Bonne soirée à vous.
 

Discussions similaires

Réponses
7
Affichages
434

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote