Bonjour,
J'ai vu sur le forum le code suivant :
1/ Est-ce que la macro est faite dans le document à remplir ou dans le document de données?
(hrem, si la réponse est "dans le document à remplir" j'ai plein de question complémentaire sur à quoi se réfère "Activeworkbook" après)
2/ dans le code suivant, nous sommes d'accord qu'il s'agit de la plage de données complète, pas seulement la ligne qui m’intéresse pour le développement de la première macro ?
2bis/ (sur le format A12:N250 ?)
3/ dans la formule suivante, mon A est correct (va bien chercher la dernière ligne où A est remplit) si mon range est A12:N250 ?
4/ que signifie le "Type" dans :
5 / Please help (#perdue) :
5.1 comment gère t'on le document source/bdd et le document "fils/à remplir" ? (c'est le .range, c'est ça? je pense que ça reste toujours embrouillée avec cette idée que je ne sais pas sur lequel des classeur est ma macro et comme j'intègre les lien avec la bdd ? en dur ? j'imagine que non le plus possible...)
5.2 'Lig' c'est pour récuperer des infos sur une ligne ??
-----
Sinon, j'ai aussi vu ceci :
qui dans ce cas ci ouvre dans des onglets (ça m’intéresse un peu moins, mais peut être est-ce moins dur à gérer)
J'ai tenté de modifier les éléments suivants
en 3e ligne :
=>
en me disant qu'ensuite ce que je voyais en tant que "bd" était peut être cette feuille? ou une valeur de VBA, ou les deux, selon les cas ?
Par contre, là où sans doute j'ai fait une erreur, même si le débug ne dit rien, c'est en passant de
à
car ça m'efface tout mon tableau
(mais l'erreur que j'ai est une
Comment faire commencer mon tableau à la huitième ligne ? (septième si on compte la ligne de titre, je ne sais pas si elle peut être utilisé comme référence...)
Question subsidiaire :
Est-ce qu'il y a moyen de modifier le code pour qu'il ne génère que la dernière ligne ou la ligne sélectionnée ?
Bon, je m'arrête là pour le moment ;-)
Autres précisions, je suis assez noob dans excel et n'ai jamais fait de macro, donc désolé si je pose des questions bêtes
sinon j'avoue, ce ne doit pas être facile de travailler sans fichier exemple, mais je n'ai pas trop le temps de "maquiller" mes fichiers, et les règles de confidentialité sont toujours importantes... même si un fichier vide...donc si vraiment nécessaire je verrai mais j'ai essayée de me concentrer sur le code plutôt que sur mon fichier, pour simplifier
J'ai vu sur le forum le code suivant :
Je suis très intéressée par cette possibilité, mais comme je débute juste dans les macro, j'aimerais avoir des précisions :VB:Sub PublipostageSurExcel() Dim sPath As String, sFicBdD As String Dim ShtD As Worksheet Dim DLig As Long, Lig As Long ' Définir le chemin d'accès et le nom du fichier de données ' Avec ce code, les 2 fichiers doivent être au même endroit sPath = ThisWorkbook.Path & "\" ' sPath = "C:\" ' Chemin en dur sFicBdD = "base de données.xls" ' Ouvrir le classeur de données Workbooks.Open sPath & sFicBdD ' Définir l'objet feuille de données Set ShtD = ActiveWorkbook.Sheets("données") ' Trouver la dernière ligne du tableau DLig = ShtD.Range("A" & Rows.Count).End(xlUp).Row ' Activer ce classeur ThisWorkbook.Activate ' Lancer le travail With ThisWorkbook.Sheets("Type") ' Pour chaque ligne du tableau de donnée For Lig = 2 To DLig ' Inscrire les valeurs contenues dans le tableau ' Le point devant range indique que l'on travaille avec l'objet compris dans With .Range("B9") = ShtD.Range("G" & Lig) .Range("B11") = ShtD.Range("H" & Lig) .Range("B13") = "M. DUPONT" ' pas de colonne définit pour ce champ .Range("B9") = ShtD.Range("K" & Lig) ' Etc ... ' On lance l'impression .PrintOut Next Lig End With ' On peut ferme le classeur des données Workbooks("base de données.xls").Close SaveChanges:=False End Sub
1/ Est-ce que la macro est faite dans le document à remplir ou dans le document de données?
(hrem, si la réponse est "dans le document à remplir" j'ai plein de question complémentaire sur à quoi se réfère "Activeworkbook" après)
2/ dans le code suivant, nous sommes d'accord qu'il s'agit de la plage de données complète, pas seulement la ligne qui m’intéresse pour le développement de la première macro ?
2bis/ (sur le format A12:N250 ?)
VB:
' Définir l'objet feuille de données
Set ShtD = ActiveWorkbook.Sheets("données")
3/ dans la formule suivante, mon A est correct (va bien chercher la dernière ligne où A est remplit) si mon range est A12:N250 ?
VB:
' Trouver la dernière ligne du tableau
DLig = ShtD.Range("A" & Rows.Count).End(xlUp).Row
4/ que signifie le "Type" dans :
VB:
With ThisWorkbook.Sheets("Type")
' Pour chaque ligne du tableau de donnée
5 / Please help (#perdue) :
5.1 comment gère t'on le document source/bdd et le document "fils/à remplir" ? (c'est le .range, c'est ça? je pense que ça reste toujours embrouillée avec cette idée que je ne sais pas sur lequel des classeur est ma macro et comme j'intègre les lien avec la bdd ? en dur ? j'imagine que non le plus possible...)
5.2 'Lig' c'est pour récuperer des infos sur une ligne ??
VB:
With ThisWorkbook.Sheets("Type")
' Pour chaque ligne du tableau de donnée
For Lig = 2 To DLig
' Inscrire les valeurs contenues dans le tableau
' Le point devant range indique que l'on travaille avec l'objet compris dans With
.Range("B9") = ShtD.Range("G" & Lig)
.Range("B11") = ShtD.Range("H" & Lig)
.Range("B13") = "M. DUPONT" ' pas de colonne définit pour ce champ
.Range("B9") = ShtD.Range("K" & Lig)
' Etc ...
' On lance l'impression
.PrintOut
Next Lig
End With
-----
Sinon, j'ai aussi vu ceci :
VB:
Sub CreeOnglets()
Application.ScreenUpdating = False
supOnglets
Set bd = Sheets("bd")
bd.[A1].CurrentRegion.Sort Key1:=bd.Range("A2"), Order1:=xlAscending, Header:=xlGuess
ligBD = 2
Do While ligBD <= bd.[A65000].End(xlUp).Row
nom = bd.Cells(ligBD, 1) ' Premier nom
Sheets("modèle").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = "F_" & nom
Set fiche = Sheets("F_" & nom)
fiche.Range("B3").Value = nom
fiche.Range("b4").Value = bd.Cells(ligBD, "B")
fiche.Range("b6").Value = bd.Cells(ligBD, "C")
fiche.Range("b7").Value = bd.Cells(ligBD, "D")
fiche.Range("b8").Value = bd.Cells(ligBD, "E")
fiche.Range("b10").Value = bd.Cells(ligBD, "F")
bd.Cells(ligBD, "G").Copy fiche.Range("b11")
ligBD = ligBD + 1
Loop
End Sub
Sub supOnglets()
Application.DisplayAlerts = False
For s = Sheets.Count To 1 Step -1
If Left(Sheets(s).Name, 2) = "F_" Then Sheets(s).Delete
Next s
End Sub
Sub exportOnglets()
CheminAppli = ThisWorkbook.Path
Application.DisplayAlerts = False
For i = 1 To Sheets.Count
If Left(Sheets(i).Name, 2) = "F_" Then
Sheets(i).Select
nonglet = ActiveSheet.Name
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=CheminAppli & "\" & nonglet
ActiveWindow.Close
End If
Next i
End Sub
Sub consolideOngletsBD()
ligBD = 2
Set bd = Sheets("bd")
For f = 1 To Sheets.Count
If Left(Sheets(f).Name, 2) = "F_" Then
bd.Cells(ligBD, "A") = Sheets(f).[B3]
bd.Cells(ligBD, "B") = Sheets(f).[B4]
bd.Cells(ligBD, "C") = Sheets(f).[B6]
bd.Cells(ligBD, "D") = Sheets(f).[B7]
bd.Cells(ligBD, "E") = Sheets(f).[B8]
bd.Cells(ligBD, "F") = Sheets(f).[B10]
Sheets(f).[B11].Copy bd.Cells(ligBD, "G")
ligBD = ligBD + 1
End If
Next f
End Sub
J'ai tenté de modifier les éléments suivants
en 3e ligne :
VB:
Set bd = Sheets("bd ")
VB:
Set bd = Sheets("Chrono MR")
en me disant qu'ensuite ce que je voyais en tant que "bd" était peut être cette feuille? ou une valeur de VBA, ou les deux, selon les cas ?
Par contre, là où sans doute j'ai fait une erreur, même si le débug ne dit rien, c'est en passant de
VB:
bd.[A1].CurrentRegion.Sort Key1:=bd.Range("A2")
VB:
bd.[A7].CurrentRegion.Sort Key1:=bd.Range("A8")
car ça m'efface tout mon tableau
(mais l'erreur que j'ai est une
Bref, déjà, pouvez-vous m'aider avec ça?erreur runtime 1004 à dit:"Cannot rename a sheet to the same name as another sheet, a referenced object library or a workbook referenced by visual Basic"
Comment faire commencer mon tableau à la huitième ligne ? (septième si on compte la ligne de titre, je ne sais pas si elle peut être utilisé comme référence...)
Question subsidiaire :
Est-ce qu'il y a moyen de modifier le code pour qu'il ne génère que la dernière ligne ou la ligne sélectionnée ?
Bon, je m'arrête là pour le moment ;-)
Autres précisions, je suis assez noob dans excel et n'ai jamais fait de macro, donc désolé si je pose des questions bêtes
sinon j'avoue, ce ne doit pas être facile de travailler sans fichier exemple, mais je n'ai pas trop le temps de "maquiller" mes fichiers, et les règles de confidentialité sont toujours importantes... même si un fichier vide...donc si vraiment nécessaire je verrai mais j'ai essayée de me concentrer sur le code plutôt que sur mon fichier, pour simplifier
Dernière édition: