Problèmes code excel
nordoc
Messages postés
67
Statut
Membre
-
lermite222 Messages postés 9042 Statut Contributeur -
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour à tous,
Je viens vous voir car j'ai deux petits problèmes.
Pour le premier, lorsque je clique sur mon bouton des nouveaux classeurs sont générés, correspondant au nombre de croix dans les cellules d'une colones.
ex :
X A
1 X
2
3 X
4 X
5
Donc 4 nouveaux classeurs doivent être ouvert, hors dans mon code il s'arrete au premier classeur qui souvre car c'est celui-ci qui devient actif et plus celui de base ou la recherche ce fait.
Lorsque mon classeur s'ouvre je veux que les informations saisis dans mon classeur de base aille dedans.
X A B
1 x Merci
2
3 x Beaucoup
4 x De votre aide
5
Voici mon code (qui regroupe les deux problèmes à la fois):
Private Sub btn_valide_Click()
Dim ligne As Integer
Dim cel As String
Dim nomFeuille As String
Dim PTDM As String
nomFeuille = ComboBox1.Value ' recupère la valeur de la liste
For ligne = 9 To 22
Worksheets(nomFeuille).Activate
cel = "K" & ligne
If Range(cel) = "x" Or Range(cel) = "X" Then
cel = "A" & ligne
If Range(cel) = "x" Or Range(cel) = "X" Then
'croix dans la col A --> ouvrir ptdm
PTDM = "C:\Documents and Settings\SML04891\Bureau\doc coor le mans\PTDM.xls"
Application.Workbooks.Open PTDM
End If
Je viens vous voir car j'ai deux petits problèmes.
Pour le premier, lorsque je clique sur mon bouton des nouveaux classeurs sont générés, correspondant au nombre de croix dans les cellules d'une colones.
ex :
X A
1 X
2
3 X
4 X
5
Donc 4 nouveaux classeurs doivent être ouvert, hors dans mon code il s'arrete au premier classeur qui souvre car c'est celui-ci qui devient actif et plus celui de base ou la recherche ce fait.
Lorsque mon classeur s'ouvre je veux que les informations saisis dans mon classeur de base aille dedans.
X A B
1 x Merci
2
3 x Beaucoup
4 x De votre aide
5
Voici mon code (qui regroupe les deux problèmes à la fois):
Private Sub btn_valide_Click()
Dim ligne As Integer
Dim cel As String
Dim nomFeuille As String
Dim PTDM As String
nomFeuille = ComboBox1.Value ' recupère la valeur de la liste
For ligne = 9 To 22
Worksheets(nomFeuille).Activate
cel = "K" & ligne
If Range(cel) = "x" Or Range(cel) = "X" Then
cel = "A" & ligne
If Range(cel) = "x" Or Range(cel) = "X" Then
'croix dans la col A --> ouvrir ptdm
PTDM = "C:\Documents and Settings\SML04891\Bureau\doc coor le mans\PTDM.xls"
Application.Workbooks.Open PTDM
End If
A voir également:
- Problèmes code excel
- Code ascii - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
6 réponses
Re,
Pour couper court...
Copie ce code dans l'événement Click du bouton.
Faut juste adapter les nouveaux noms de fichiers, le nom de la feuille et la/les plages à copier.
A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Pour couper court...
Copie ce code dans l'événement Click du bouton.
Private Sub CommandButton1_Click()
Dim Lig As Long
For Lig = 9 To 22
If UCase(Range("K" & Lig)) = "X" Then
Workbooks.Open "C:\Documents and Settings\SML04891\Bureau\doc coor le mans\PTDM.xls" "
ThisWorkbook.Sheets("Feuil1").Range(Cells(Lig, 1), Cells(Lig, 10)).Copy Range("A1")
ActiveWorkbook.SaveCopyAs "C:\Documents and Settings\SML04891\Bureau\doc coor le mans\PTDM" & Lig & ".xls"
ActiveWorkbook.Close
End If
Next Lig
End Sub
Faut juste adapter les nouveaux noms de fichiers, le nom de la feuille et la/les plages à copier.
A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Bonjour,
Dans le code du bouton tu dois mettre .. par exemple Call OuvreClasseur
Et le corp de ta macro tu dois le mettre dans un Module Public (Module1 par exemple)
Avec
A=
Dans le code du bouton tu dois mettre .. par exemple Call OuvreClasseur
Et le corp de ta macro tu dois le mettre dans un Module Public (Module1 par exemple)
Avec
Public Sub OuvreClasseur()
'Le code...
End Sub
A=
Bonjour lermite, merci de te pencher sur mes problèmes ^^
je ne comprend pas tous ce que tu as marqué, dans quel ordre mettre tous ça, vu que apparement ça change pas mal la forme ce que tu me dis de faire
je ne comprend pas tous ce que tu as marqué, dans quel ordre mettre tous ça, vu que apparement ça change pas mal la forme ce que tu me dis de faire
Si je te suis bien..et une chose à la fois.
Dans la colonne K
Les lignes 9 à 22 contiennent des noms de classeurs ? si oui, le chemin est compris ?
Ensuite tu veux ouvrir les classeurs qui ont, dans la colonne ?? un X ?
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Dans la colonne K
Les lignes 9 à 22 contiennent des noms de classeurs ? si oui, le chemin est compris ?
Ensuite tu veux ouvrir les classeurs qui ont, dans la colonne ?? un X ?
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Désolé pour le retard.
Non dans ma colone K il y a des X, c'est à dire que à chaque fois que la boucle passe sur une ligne et qu'elle trouve un X, un nouveau classeur s'ouvre (ptdm.xls), ce qui fonctionne très bien, car quand je met un msgbox, il me trouve bien le bon nombre de X sans problème.
Le souci est que lorqu'il m'ouvre ce nouveau classeur (ptdm.xls) celui-ci devient actif, et donc mon classeur initial non-actif donc la recherche ne s'effectue plus.
Ce que je souhaiterai c'est qu'il m'ouvre mon classeur met les informations dedans l'enregistre et le ferme et passe au suivant s'il y a encore des X.
J'espère que je me suis exprimé correctement :)
ps : désolé pour les fautes s'il y en a, je suis pas un as de l'orthographe
Non dans ma colone K il y a des X, c'est à dire que à chaque fois que la boucle passe sur une ligne et qu'elle trouve un X, un nouveau classeur s'ouvre (ptdm.xls), ce qui fonctionne très bien, car quand je met un msgbox, il me trouve bien le bon nombre de X sans problème.
Le souci est que lorqu'il m'ouvre ce nouveau classeur (ptdm.xls) celui-ci devient actif, et donc mon classeur initial non-actif donc la recherche ne s'effectue plus.
Ce que je souhaiterai c'est qu'il m'ouvre mon classeur met les informations dedans l'enregistre et le ferme et passe au suivant s'il y a encore des X.
J'espère que je me suis exprimé correctement :)
ps : désolé pour les fautes s'il y en a, je suis pas un as de l'orthographe
Salut nordoc, lermite222,
Excusez l'incruste...
La solution est donc dans la première réponse de lermite222. Ton code VBA est, pour l'instant dans le code de ta feuille excel. Il faut qu'il soit dans un module. Pour cela, ouvre ton classeur, ouvre Visual Basic (ALT+F11) et regarde dans la fenêtre "Projet - VBA Project" (en haut à gauche de l'écran). Tu y verras :
VBA Project (nom du classeur)
Microsoft Excel Objects
Feuil1(Feuil1)*
Feuil2(Feuil2)*
Feuil3(Feuil3)*
ThisWorkBook
[* les noms des feuilles indiqués ici ne sont pas forcément les mêmes que toi...]
Pour résoudre ton souci :
Sous visual Basic :
1- Insertion/Module
2- copie colle ceci dans la fenêtre de code :
3- remplace 'Le code... par le code de ton bouton
4- remplace le code de ton bouton par :
Excusez l'incruste...
La solution est donc dans la première réponse de lermite222. Ton code VBA est, pour l'instant dans le code de ta feuille excel. Il faut qu'il soit dans un module. Pour cela, ouvre ton classeur, ouvre Visual Basic (ALT+F11) et regarde dans la fenêtre "Projet - VBA Project" (en haut à gauche de l'écran). Tu y verras :
VBA Project (nom du classeur)
Microsoft Excel Objects
Feuil1(Feuil1)*
Feuil2(Feuil2)*
Feuil3(Feuil3)*
ThisWorkBook
[* les noms des feuilles indiqués ici ne sont pas forcément les mêmes que toi...]
Pour résoudre ton souci :
Sous visual Basic :
1- Insertion/Module
2- copie colle ceci dans la fenêtre de code :
Public Sub OuvreClasseur()
'Le code...
End Sub
3- remplace 'Le code... par le code de ton bouton
4- remplace le code de ton bouton par :
Call OuvreClasseur
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Y a qu'ai chose qui me chiffonne..
Non dans ma colone K il y a des X, c'est à dire que à chaque fois que la boucle passe sur une ligne et qu'elle trouve un X, un nouveau classeur s'ouvre (ptdm.xls),
Tu ouvre chaque fois un nouveau classeur avec ce nom ???
Si oui, il écrase les autres.
Non dans ma colone K il y a des X, c'est à dire que à chaque fois que la boucle passe sur une ligne et qu'elle trouve un X, un nouveau classeur s'ouvre (ptdm.xls),
Tu ouvre chaque fois un nouveau classeur avec ce nom ???
Si oui, il écrase les autres.
en faite ce classeur ptdm.xls sert de modèle.
donc effectivement il l'ouvre à chaque fois, mais je souhaite qu'il l'ouvre, que les données de la liste ou ce trouvais le X aille dans les cellule que je désigne, l'enregistre sous un autre nom et le ferme.
Donc logiquement il existera toujours l'original (ptdm.xls) pour chaque ligne ou ce trouve un X
donc effectivement il l'ouvre à chaque fois, mais je souhaite qu'il l'ouvre, que les données de la liste ou ce trouvais le X aille dans les cellule que je désigne, l'enregistre sous un autre nom et le ferme.
Donc logiquement il existera toujours l'original (ptdm.xls) pour chaque ligne ou ce trouve un X
Rectificatif : à partir d'un UF ça va plus.. changer par..
(Merci à Eriiic !)
A+
Private Sub CommandButton1_Click()
Dim Lig As Long, Wks As Worksheet
Set Wks = ThisWorkbook.Sheets("Feuil1")
For Lig = 9 To 22
If UCase(Wks.Range("K" & Lig)) = "X" Then
Workbooks.Open "C:\Documents and Settings\SML04891\Bureau\doc coor le mans\PTDM.xls"
ActiveSheet.Range("A1").Resize(1, 9) = Wks.Cells(Lig, 1).Resize(1, 9).Value
ActiveWorkbook.SaveCopyAs "C:\Documents and Settings\SML04891\Bureau\doc coor le mans\PTDM" & Lig & ".xls"
ActiveWorkbook.Close
End If
Next Lig
End Sub
(Merci à Eriiic !)
A+
A B C D E F G H I J K
1X X X
2 X
3 X
4X X X X
donc si dans K il y a une croix alors il m'ouvre le nombre de classeur (ptdm.xls) suivant le nombre de croix de A à G. ( A à G correspond de lundi à dimanche)
donc pour K1 il m'ouvre deux classeur car il y a 2 croix de A à G.
pour K4 il m'ouvre trois classeur car il y a 3 croix de A à G.
Par contre pour enregistrer et fermer pas de problème.
Désolé d'etre lourd, mais je ne peux pas transmettre mes fichiers car ils sont interne à la SNCF ce qui serai beaucoup plus simple pourtant.
Encore merci de votre aide quand même :)