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

VBA - Nouvelles lignes cellule spécifiques

11 réponses
Avatar
ptitrital67
Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai déjà résolu pas mal de mes problèmes mais la je bloque et mes recherches n'ont rien donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse dans le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise en forme (bordure, ...)

merci de votre aide.

10 réponses

1 2
Avatar
DanielCo
Bonjour,

Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
'pareil pour les autres cellules
End With

Cordialement.
Daniel


Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai déjà résolu pas mal de
mes problèmes mais la je bloque et mes recherches n'ont rien donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise en
forme (bordure, ...)

merci de votre aide.
Avatar
ptitrital67
DanielCo a écrit le 02/11/2011 à 10h19 :
Bonjour,

Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
'pareil pour les autres cellules
End With

Cordialement.
Daniel


Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de
mes problèmes mais la je bloque et mes recherches n'ont rien
donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en
forme (bordure, ...)

merci de votre aide.




Merci de votre rapidité mais mon problème n'est pas résolu..

La copie du format se fait parfaitement, malheureusement mes nouvelles données ne commencent pas en A13 mais en A1 ...

Merci encore
Avatar
DanielCo
Si le code suivant ne fonctionne pas, poste ta macro.

Sub test()
Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
End With
End Sub

Daniel


DanielCo a écrit le 02/11/2011 à 10h19 :
Bonjour,

Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
'pareil pour les autres cellules
End With

Cordialement.
Daniel


Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de
mes problèmes mais la je bloque et mes recherches n'ont rien
donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse
dans le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en
forme (bordure, ...)

merci de votre aide.




Merci de votre rapidité mais mon problème n'est pas résolu..

La copie du format se fait parfaitement, malheureusement mes nouvelles
données ne commencent pas en A13 mais en A1 ...

Merci encore
Avatar
MichD
Bonjour,

Nous pouvons supposés que tu insères une nouvelle ligne en A1:E1 pour insérer ta nouvelle ligne de données,

comme ceci :

'------------------------------------------
Sub test()

With Worksheets("Feuil1")
.Range("A1").EntireRow.Insert
.Range("A2:E2").Copy
.Range("A1:E1").PasteSpecial xlPasteFormats
.Range("A1") = "...."
.Range("B1") = "````"
'.../etc...
End With
Application.CutCopyMode = False

End Sub
'------------------------------------------


MichD
------------------------------------------
"ptitrital67" a écrit dans le message de groupe de discussion :

DanielCo a écrit le 02/11/2011 à 10h19 :
Bonjour,

Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
'pareil pour les autres cellules
End With

Cordialement.
Daniel


Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de
mes problèmes mais la je bloque et mes recherches n'ont rien
donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse




dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en
forme (bordure, ...)

merci de votre aide.




Merci de votre rapidité mais mon problème n'est pas résolu..

La copie du format se fait parfaitement, malheureusement mes nouvelles données
ne commencent pas en A13 mais en A1 ...

Merci encore
Avatar
ptitrital67
DanielCo a écrit le 02/11/2011 à 15h51 :
Si le code suivant ne fonctionne pas, poste ta macro.

Sub test()
Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
End With
End Sub

Daniel


DanielCo a écrit le 02/11/2011 à 10h19 :
Bonjour,

Dim Ligne As Long
With Sheets("Feuil1")
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'copie formats
.[A13:E13].Copy
.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
.Cells(Ligne, 1).Value = Me.textbox1.Text 'par exemple
'pareil pour les autres cellules
End With

Cordialement.
Daniel


Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de
mes problèmes mais la je bloque et mes recherches n'ont rien
donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse
dans le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même
mise
en
forme (bordure, ...)

merci de votre aide.






Merci de votre rapidité mais mon problème n'est pas
résolu..

La copie du format se fait parfaitement, malheureusement mes nouvelles
données ne commencent pas en A13 mais en A1 ...

Merci encore




Yes merci !! ca marche niquel :)

Encore merci ca faisait un certain temps que je cherchais !

Si j'ai un autre problème je sais ou me tourner maintenant !

Merci encore
Avatar
ptitrital67
ptitrital67 a écrit le 02/11/2011 à 10h00 :
Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de mes problèmes mais la je
bloque et mes recherches n'ont rien donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en forme (bordure, ...)

merci de votre aide.


Bonjour à tous, je reviens vers vous pour une aide supplémentaire :)

Je vous copie mon code ca évitera trop de blabla inutile :

Private Sub CommandButton1_Click()

Dim Ligne As Long
Dim wbk As Workbook
Dim Sh As Worksheet
Dim fichierAutre As String

If Annee = "2011" Then
If Mois = "Décembre" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais Tableaux de bordsTEST2011NovembreLes Offres décembre 2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

ElseIf Mois = "Janvier" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais Tableaux de bordsTEST2011DécembreLes Offres décembre 2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

'ici en copie dans A1 de Feuil1 de AutreFichier la valeur de TextBox1
Set Sh = Nothing
wbk.Close True
Set wbk = Nothing

End If
End If

End Sub

J'ai une erreur de compilation au niveau du (.Rows.Count,1)...

Si vous avez une solution alternative à me proposer je suis preneur, l'idée est que selon le mois et l'année, les données iront se loger dans un fichier spécifique...

Merci de votre aide !
Avatar
MichD
Bonjour,

un problème de syntaxe...

Pour pouvoir employer un "Point" devant .Rows.Count, il faut que cette propriété
fasse référence à une feuille particulière comme ceci :

Set Sh = wbk.Sheets("Détails")

With sh
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With

OU comme ceci : le nombre de lignes dans un classeur est le même dans toutes les feuilles !
Ligne = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1

OU pour être sûr de faire la différence entre les feuilles des classeurs .xls et xlsx
Ligne = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row + 1


Tu choisis l'approche qui te convient le mieux!

MichD
------------------------------------------
"ptitrital67" a écrit dans le message de groupe de discussion :

ptitrital67 a écrit le 02/11/2011 à 10h00 :
Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de mes problèmes mais la je
bloque et mes recherches n'ont rien donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse


dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en forme (bordure, ...)

merci de votre aide.


Bonjour à tous, je reviens vers vous pour une aide supplémentaire :)

Je vous copie mon code ca évitera trop de blabla inutile :

Private Sub CommandButton1_Click()

Dim Ligne As Long
Dim wbk As Workbook
Dim Sh As Worksheet
Dim fichierAutre As String

If Annee = "2011" Then
If Mois = "Décembre" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais
Tableaux de bordsTEST2011NovembreLes Offres décembre 2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

ElseIf Mois = "Janvier" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais
Tableaux de bordsTEST2011DécembreLes Offres décembre 2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

'ici en copie dans A1 de Feuil1 de AutreFichier la valeur de TextBox1
Set Sh = Nothing
wbk.Close True
Set wbk = Nothing

End If
End If

End Sub

J'ai une erreur de compilation au niveau du (.Rows.Count,1)...

Si vous avez une solution alternative à me proposer je suis preneur, l'idée est
que selon le mois et l'année, les données iront se loger dans un fichier
spécifique...

Merci de votre aide !
Avatar
ptitrital67
MichD a écrit le 15/11/2011 à 11h55 :
Bonjour,

un problème de syntaxe...

Pour pouvoir employer un "Point" devant .Rows.Count, il faut que
cette propriété
fasse référence à une feuille particulière comme
ceci :

Set Sh = wbk.Sheets("Détails")

With sh
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With

OU comme ceci : le nombre de lignes dans un classeur est le même dans
toutes les feuilles !
Ligne = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1

OU pour être sûr de faire la différence entre les feuilles
des classeurs .xls et xlsx
Ligne = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row + 1


Tu choisis l'approche qui te convient le mieux!

MichD
------------------------------------------
"ptitrital67" a écrit dans le message de groupe de discussion
:

ptitrital67 a écrit le 02/11/2011 à 10h00 :
Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de mes problèmes mais la je
bloque et mes recherches n'ont rien donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse



dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en forme (bordure, ...)

merci de votre aide.



Bonjour à tous, je reviens vers vous pour une aide supplémentaire
:)

Je vous copie mon code ca évitera trop de blabla inutile :

Private Sub CommandButton1_Click()

Dim Ligne As Long
Dim wbk As Workbook
Dim Sh As Worksheet
Dim fichierAutre As String

If Annee = "2011" Then
If Mois = "Décembre" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais
Tableaux de bordsTEST2011NovembreLes Offres décembre 2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

ElseIf Mois = "Janvier" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais
Tableaux de bordsTEST2011DécembreLes Offres décembre
2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

'ici en copie dans A1 de Feuil1 de AutreFichier la valeur de TextBox1
Set Sh = Nothing
wbk.Close True
Set wbk = Nothing

End If
End If

End Sub

J'ai une erreur de compilation au niveau du (.Rows.Count,1)...

Si vous avez une solution alternative à me proposer je suis preneur,
l'idée est
que selon le mois et l'année, les données iront se loger dans un
fichier
spécifique...

Merci de votre aide !


Effectivement petite erreur de syntaxe de ma part ! Corrigée :)

Que pensez-vous de mon code ? j'ai bien peur qu'il soit "trop long" avec tous ces "If" ...
Existe-il un moyen plus pratique ?

Selon le "mois" et "annee" les données s'injecterons dans un tableau d'une feuille précise.

Merci
Avatar
MichD
Difficile de faire une suggestion éclairée lorsque l'on ne sait pas ce que le code est censé faire...

mais à tout hasard, il y aurait une structure comme ceci :

'--------------------------------------------------
Sub test()

Dim Année As Integer, Arr()
Dim Mois As String, M As Integer

'Liste des mois
Arr = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", _
"Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")

Mois = "Décembre"
Année = 2011

M = Application.Match(Mois, Arr, 0)

If IsNumeric(M) Then
Select Case Année
Case 2000 To 2020 'Pour les années 2000 à 2020
Select Case M
Case 1 'Pour le mois de janvier
'le code spécifique pour chaque mois
Case 2 'pour le mois de février
'le code spécifique pour chaque mois
Case 3 'pour le mois de mars
'le code spécifique pour chaque mois
'.../etc pour chacun des mois
End Select
End Select
Else
Err = 0
MsgBox "Pas trouvé le mois donné."
End If
End Sub
'--------------------------------------------------


MichD
------------------------------------------
"ptitrital67" a écrit dans le message de groupe de discussion :

MichD a écrit le 15/11/2011 à 11h55 :
Bonjour,

un problème de syntaxe...

Pour pouvoir employer un "Point" devant .Rows.Count, il faut que
cette propriété
fasse référence à une feuille particulière comme
ceci :

Set Sh = wbk.Sheets("Détails")

With sh
Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
End With

OU comme ceci : le nombre de lignes dans un classeur est le même dans
toutes les feuilles !
Ligne = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1

OU pour être sûr de faire la différence entre les feuilles
des classeurs .xls et xlsx
Ligne = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row + 1


Tu choisis l'approche qui te convient le mieux!

MichD
------------------------------------------
"ptitrital67" a écrit dans le message de groupe de discussion
:

ptitrital67 a écrit le 02/11/2011 à 10h00 :
Bonjour,

Je suis nouveau sur le forum et gâce à celui-ci j'ai
déjà résolu pas mal de mes problèmes mais la je
bloque et mes recherches n'ont rien donné...

Je vous expose mon problème:

J'ai créé un userform afin de remplir automatiquement un
tableau.

je souhaiterais :
A chaque validation du formulaire qu'une ligne nouvelle ligne apparaisse



dans
le tableau

Voici la plage de mon tableau : A13:E13. (si possible avec la même mise
en forme (bordure, ...)

merci de votre aide.



Bonjour à tous, je reviens vers vous pour une aide supplémentaire
:)

Je vous copie mon code ca évitera trop de blabla inutile :

Private Sub CommandButton1_Click()

Dim Ligne As Long
Dim wbk As Workbook
Dim Sh As Worksheet
Dim fichierAutre As String

If Annee = "2011" Then
If Mois = "Décembre" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais
Tableaux de bordsTEST2011NovembreLes Offres décembre 2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

ElseIf Mois = "Janvier" Then
fichierAutre = "C:Documents and SettingscarmeloMes documentsEssais
Tableaux de bordsTEST2011DécembreLes Offres décembre
2011.xls"
Application.ScreenUpdating = False
Set wbk = Workbooks.Open(fichierAutre)
Set Sh = wbk.Sheets("Détails")

Ligne = Sh.Cells(.Rows.Count, 1).End(xlUp).Row + 1
If Ligne < 13 Then Ligne = 13
'copie formats
Sh.[A13:E13].Copy
Sh.Cells(Ligne, 1).PasteSpecial xlPasteFormats
'remplissage
Sh.Cells(Ligne, 1).Value = Partenaire.Value
Sh.Cells(Ligne, 2) = MonthView1.Value
Sh.Cells(Ligne, 3) = Sujet.Value
Sh.Cells(Ligne, 5) = Montant.Value
Sh.Cells(Ligne, 4) = MonthView2.Value

'ici en copie dans A1 de Feuil1 de AutreFichier la valeur de TextBox1
Set Sh = Nothing
wbk.Close True
Set wbk = Nothing

End If
End If

End Sub

J'ai une erreur de compilation au niveau du (.Rows.Count,1)...

Si vous avez une solution alternative à me proposer je suis preneur,
l'idée est
que selon le mois et l'année, les données iront se loger dans un
fichier
spécifique...

Merci de votre aide !


Effectivement petite erreur de syntaxe de ma part ! Corrigée :)

Que pensez-vous de mon code ? j'ai bien peur qu'il soit "trop long" avec tous
ces "If" ...
Existe-il un moyen plus pratique ?

Selon le "mois" et "annee" les données s'injecterons dans un tableau d'une
feuille précise.

Merci
Avatar
Gloops
ptitrital67 a écrit, le 15/11/2011 14:06 :
Que pensez-vous de mon code ? j'ai bien peur qu'il soit "trop long" ave c tous
ces "If" ...
Existe-il un moyen plus pratique ?




Bonjour,

Je dirais que la première chose à faire, c'est de repérer ce qui ch ange
d'une branche à l'autre.

Dans l'exemple donné, semble-t-il, il n'y a rien de différent, donc
l'utilité du test n'apparaît pas évidente. Mais j'imagine que
potentiellement, le fichier source et la colonne cible sont différents
selon le mois ?

Si c'est cela, on peut créer un champ FichiersSource qui contiendra les
différents chemins et numéros de colonne.

La lecture peut être du style

strChemin = Sh.Names("FichiersSource").RefersToRange.Cells(Mois, 1)
numColonne = Sh.Names("FichiersSource").RefersToRange.Cells(Mois, 2)

Je concède que pour un tableau qui contient un numéro de colonne cibl e,
le nom FichiersSource n'est pas forcément bien choisi. On peut mettre
Parametres, mais du coup ça a des chances de paraître un peu flou don c
pas forcément plus évocateur. Maintenant que j'ai bien détaillé
l'intention, ce que je dis ne sera pas forcément beaucoup plus clair
parce que je passerai une heure à trouver un nom plus adapté. Pour un
code qui sera à maintenir par quelqu'un des années plus tard, ça pe ut
valoir le coup (un nom de variable bien choisi concourt à la sobriété
des commentaires).

Puisqu'il y a 5 colonnes à créer par mois, elles pourront s'échelon ner
entre numColonne et numColonne + 4.

Si le nombre de colonnes par mois est figé on peut préféré calcul er la
colonne de début, par exemple :
numColonne = 3 + ((Mois - 1) * 5)
(du moment qu'on n'oublie pas une éventuelle colonne d'intervalle dans
le calcul)

ça peut d'ailleurs, du coup, faciliter le choix du nom du champ qui
contient les chemins de fichiers.

Le jour où le nom d'un fichier change, on le repère dans le tableau, et
on corrige là. C'est quand même largement plus facile que de naviguer
entre les ElseIf, sur quinze pages-écrans.


Une fois que tout est ainsi préparé, on exécute le code unique.

Le site Developpez.com a publié il y a un certain nombre de mois dans
son magazine mensuel un article où était expliqué que la qualité d'un
code peut se mesurer à l'absence de duplication. En effet, plus un code
est dupliqué, plus il est difficile à maintenir. Si il est dupliqué
douze fois, il faut reporter une correction douze fois, donc on a douze
fois plus de chances de se tromper au moins une fois, et on a même des
chances de se tromper plusieurs fois à des endroits différents.
Potentiellement, une erreur dans la douzième branche ne sera peut-êtr e
détectée que le douzième mois, une fois le programmeur parti depuis
belle lurette. Si c'est le nom de fichier qui est faux dans le tableau,
une fois que ça apparaîtra on pourra confier ça à Madame Michu, q ui
passera là en stage ce mois-là. Peut-être que je force un petit peu ,
mais ça reste quand même plus lisible.
1 2