Incrémenter les lignes d'un tableau d'une autre feuille Excel
Bonjour,
Merci de prendre du temps pour lire ma demande
Voici mon problème:
Dans mon fichier, la feuille "Tableau" est alimentée par une saisie de données à l'aide d'un formulaire
J'ai créé un code vba derrière le bouton "Etiquettes" permettant de générer sur une autre feuille (Nb Etiquettes) le nombre de code barre désiré
Dans ce code j'ai ajouté la ligne suivante :
Worksheets("Tableau").Cells.Copy Worksheets("BaseDonnées").Cells
pour copier les lignes de la feuille Tableau dans la feuille BaseDonnées
Ma demande est la suivante :
Lorsque j'efface les lignes présentes dans la feuille "Tableau" et que je rajoute des nouvelles saisies à l'aide du formulaire, j'aimerais que ces nouvelles ligne viennent s'incrémenter dans le tableau de la feuille "BaseDonnée" sans écraser les données précédemment copiées et se copient dans la première ligne vide du tableau
J'espère que ma demande est clairement formulée et je vous remercie de l'aide que vous pourrez m'apporter
Je vous joins le fichier également
Bien cordialement,
Bonjour
J'espère que ma demande est clairement formulée et je vous remercie de l'aide que vous pourrez m'apporter
.....
Lorsque j'efface les lignes présentes dans la feuille "Tableau" et que je rajoute des nouvelles saisies à l'aide du formulaire,
Il y a une chose que je ne comprends pas. D'un coté vous écrivez vouloir copier les données de la feuille Tableau et de l'autre vous écrivez vouloir mettre les données dans la feuille Tableau et dans la base de données depuis l'USF
D'où ma question est de savoir si vous ajoutez dans la base de données une fois la feuille Tableau complétée ou si lorsque vous ajoutez dans la feuille Tableau depuis le formulaire,il faut aussi directement mettre les mêmes infos dans la base de données
en gros, soit vous ajoutez dans les deux feuilles depuis l'USF ou vous ajoutez d'abord dans la feuille Tableau depuis l'USF et une fois terminé, vous ajoutez dans la base de données les lignes de la feuille Tableau via un bouton
Crdlt
Bonjour Dan,
Merci de prendre du temps concernant ma demande
vous ajoutez d'abord dans la feuille Tableau depuis l'USF et une fois terminé, vous ajoutez dans la base de données les lignes de la feuille Tableau via un bouton
En effet, ce que je souhaite consiste en votre 2e proposition :
J’ajoute en premier lieu dans Tableau avec le USF
Ensuite avec le bouton Étiquettes, je génère le bon nombre d’étiquettes Code Barre dans la feuille Nb Étiquettes et dans le même temps je copie les lignes de Tableau dans BaseDonnées
La difficulté se pose lorsque j'efface mes données dans Tableau et que j’en rajoute via le USF ; ces dernières doivent s’incrémenter dans basedonnées en dessous des lignes préalablement collées sans les écraser
J'espère avoir donné les précisions nécessaires à la résolution de mon problème
En attente de vous lire
Bonne journée
Ensuite avec le bouton Étiquettes, je génère le bon nombre d’étiquettes Code Barre dans la feuille Nb Étiquettes et dans le même temps je copie les lignes de Tableau dans BaseDonnées
Si je regarde votre fichier, on doit donc ajouter 17 lignes de nbetiquettes vers la feuille Base de données ou 1 ligne comme dans la feuille Tableau ?
Si c'est une ligne, il suffit que le code qui génère les étiquettes ajoute juste la ligne de la feuille Tableau vers la feuille Base de données avant de générer les étiquettes
Donc en gros, on ajoute tout ce qui est dans la feuille Tableau vers la basedonnées, ensuite vous générez les étiquettes
rem : mettez votre profil excel à jour car avec "Français" cela ne me dit pas quelle est votre version --> 97, 2003, 2007, MAC2011, MAC2016 ??
En fait, je souhaite copier tout ce qu'il y a dans Tableau dans Base données au moment ou je clique sur le bouton Étiquette J'alimente Basedonnees avec ce que je saisis dans Tableau
A un moment, j'efface tout ce qu'il y a dans Tableau, je resaisis des nouvelles données dans Tableau, génère mes étiquettes et copie mes lignes dans Basededonnees en dessous des lignes préalablement copiées et ainsi de suite
Basededonnées constitue ma base patients enregistrés au fil de l'eau
Donc je pense que ma demande correspond à :
si c'est une ligne, il suffit que le code qui génère les étiquettes ajoute juste la ligne de la feuille Tableau vers la feuille Base de données avant de générer les étiquettes
re,
Désolé des toutes mes questions.
si c'est une ligne, il suffit que le code qui génère les étiquettes ajoute juste la ligne de la feuille Tableau vers la feuille Base de données avant de générer les étiquettes
Heu non.... Si vous créer les étiquettes votre code lit tout ce qu'il y a dans la feuille Tableau. Donc il vaut mieux commencer par copier toutes les lignes d'un seul tenant puis de continuer à créer les étiquettes.
Là vous avez deux choix possible :
- Choix 1 : vous ne voulez que les données et donc sans les formules. Prenez ce code :
Sub ajout()
Dim dlg As Byte
Dim tablo()
With Sheets("Tableau")
dlgtab = .Range("A" & Rows.Count).End(xlUp).Row
tablo = Range("A2:V" & dlgtab).Value
End With
With Sheets("BaseDonnées")
dlg = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & dlg).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
End With
End Sub
NB : dans ce cas, pensez à formater la colonne P avec la police CODE 39 si vous voulez le conserver. Bien que cela n'est peut être pas vraiment nécessaire
- Choix 2 : vous voulez conservez les formules et le format de code
Sub ajout()
Dim dlgtab As Integer, dlgbd As Integer
With Sheets("Tableau")
dlgtab = .Range("A" & Rows.Count).End(xlUp).Row
dlgbd = Sheets("BaseDonnées").Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:V" & dlgtab).Copy Sheets("BaseDonnées").Range("A" & dlgbd)
End With
End Sub
Une fois votre choix effectué, mettez cette instruction dans la Sub MultiplicatonNbétiquettes() juste en dessous des déclarations de variable
Call ajout
Rem :
- il vaut mieux deux petits codes qu'un long dans une seule macro, raison pour laquelle je vous propose cette manière de faire
- Avec VBA évitez les accents et espaces dans le nom des feuilles ou nom de sub. C'est toujours la meilleur d'avoir des erreurs
Cordialement
Bonjour Dan,
Merci pour votre réponse rapide et surtout ne soyez pas désolé de demander des explications supplémentaires
J'ai juste mis l'instruction Call ajout en fin de code car sinon cela ne générait pas les étiquettes
Maintenant tout fonctionne comme je le souhaitais
Le but de ce fichier étant d'imprimer les étiquettes de la feuille "Nb Etiquettes" avec un publipostage WORD, pensez vous qu'il soit possible de créer un code qui permettrait d'ouvrir automatiquement le fichier Word préalablement configuré (via un bouton?) pour qu'il ne reste plus qu'a lancer l'édition dans Word
Ou bien auriez vous une autre solution a me proposer ? (impression des étiquettes à partir d'Excel ce qui semble compliquer car il faudrait fusionner les champs nom, prénom, DN, sexe et CB dans une même cellule?)
Votre aide m'a été précieuse et je vous remercie pour votre expertise
Bien cordialement
re
Merci pour votre réponse rapide et surtout ne soyez pas désolé de demander des explications supplémentaires
Mettons que si vous m'aviez directement écrit que vous souhaitiez mettre les données du Tableau vers la basedonnées, j'aurais compris la manipulation à effectuer.
Au final, l'aspect étiquettes était secondaire. Mais maintenant c'est plus clair
J'ai juste mis l'instruction Call ajout en fin de code car sinon cela ne générait pas les étiquettes
Heu ?? cela n'a pas de sens. La macro ajout terminée, le code plus bas continue. vous avez dû vous tromper quelque part
Pour le publipostage, le mieux est de préparer votre document dans word. Une fois terminé, on pourrait lancer un code qui ouvre le fichier word
Crdlt
Bonjour,
J'avais placé l'instruction en jaune dans le code mais cela ne fonctionnait pas donc je l'ai mis a la fin du code (violet)
Sub ajout()
Dim dlgtab As Integer, dlgbd As Integer
With Sheets("Tableau")
dlgtab = .Range("A" & Rows.Count).End(xlUp).Row
dlgbd = Sheets("BaseDonnées").Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A2:V" & dlgtab).Copy Sheets("BaseDonnées").Range("A" & dlgbd)
End With
End Sub
Sub MultiplicatonNbétiquettes()
Application.ScreenUpdating = False
Dim Derlig&, i&, VarQte As Byte
Call ajout
Worksheets("Tableau").Cells.Copy Worksheets("Nb Etiquettes").Cells
With Worksheets("Nb Etiquettes")
Derlig = .Range("A" & Rows.Count).End(xlUp).Row
For i = Derlig To 2 Step -1
If .Range("Q" & i) > 1 Then
VarQte = .Range("Q" & i)
.Range("Q" & i) = 1
.Rows(i + 1).Resize(VarQte - 1).Insert Shift:=xlDown
.Range("A" & i).Resize(VarQte, 16) = .Range("A" & i & ":Q" & i).Value
End If
Next i
Call ajout
End With
MsgBox "Etiquettes générées !", vbInformation, "Etiquettes générées"
End Sub
en ce qui concerne le publipostage, comment pouvons nous faire
Le fichier word s'appelle plage_etiquette
merci pour votre aide
Bien cordialement
Merci d'utiliser les balises de code en cliquant sur l'icone </> lorsque vous postez un code. J'ai corrigé dans votre post
Mais c'est pas ce que je vous ai dit de faire dans mon post
Vous mettez deux fois Call Ajout. Là je vous ai écrit de placer cette instruction juste en dessous des déclarations dim.
NB : j'ai édité mon post précédent sur le code
Donc votre code comme ceci
Sub MultiplicatonNbétiquettes()
Dim Derlig&, i&, VarQte As Byte
Application.ScreenUpdating = False
Call ajout
Worksheets("Tableau").Cells.Copy Worksheets("Nb Etiquettes").Cells
With Worksheets("Nb Etiquettes")
Derlig = .Range("A" & Rows.Count).End(xlUp).Row
For i = Derlig To 2 Step -1
If .Range("Q" & i) > 1 Then
VarQte = .Range("Q" & i)
.Range("Q" & i) = 1
.Rows(i + 1).Resize(VarQte - 1).Insert Shift:=xlDown
.Range("A" & i).Resize(VarQte, 16) = .Range("A" & i & ":Q" & i).Value
End If
Next i
End With
MsgBox "Etiquettes générées !", vbInformation, "Etiquettes générées"
End Sub
Mais il y avait mieux à faire pour copier les données
Pour le fichier Word, vous devez ouvrir le fichier excel et aller d'abord préparer les rubriques pour le publipostage dans votre fichier word
Faites le manuellement pour le moment
Bonjour,
Je ne l'ai mis qu'une seule fois
C'était juste pour vous montrer où je l'avais mis en premier (jaune)..ca ne fonctionnait pas
Je l'ai donc mis en bas du code (violet) et là ça fonctionne très bien
Sinon mon fichier Word en publipostage est déjà prêt
Reste à dire à Excel de l'ouvrir, j'imagine en lui indiquant le chemin du fichier
Bien cordialement
re
Je l'ai donc mis en bas du code (violet) et là ça fonctionne très bien
Désolé je ne comprends pas pourquoi le fait de le mettre en premier cela ne fonctionne pas
Le code Ajout ne fait qu'ajouter les lignes de la feuille tableau vers la feuille Basedonnées. Il n'intervient pas pour les lignes de code plus bas
Vous devez faire quelque chose que je comprends pas
le code pour ouvrir Word
Sub ouvrirWord()
Dim strFichier As String, chemin As String
Dim objWord As New Word.Application
chemin = "c:\documents\" 'repertoire du fichier
Fichier = "MonFichier.docx" 'nom de votre fichier
objWord.Documents.Open chemin & Fichier 'ouvrir doc word
objWord.Visible = True ' rendre Word visible
end sub
Attention que vous devez aller dans l'editeur VBA --> menu Outils --> référence et aller cocher la case "Microsoft Word 16.0 object library"
Merci d'ajouter votre version excel. Cela n'aide pas celui qui vous répond.
Bonjour Dan,
Merci pour votre réponse
Le code ouvre bien le document Word
Seulement, lorsque l'on utilise le publipostage celui ci fait appel à une base de données
Et dans le cas présent, seul le fichier Word s'ouvre ; il manque la requête SQL suivante :
Pourrais ton ajouter dans le code cette requête ?
Je vous remercie de votre aide
version Excel2016
Bonjour
Et dans le cas présent, seul le fichier Word s'ouvre ;
Heu, ... si le fichier word s'ouvre c'est depuis votre macro placée dans exce Non ?
Si vous devez cliquez sur OUI, est-ce que vous avez bien les étiquettes ?
Pour votre version excel, cela ne sert pas de la mettre dans le post. C'est dans votre profil de compte qu'il faut aller la mettre sans quoi on va vous reposer la même question à chacune de vos demandes
Bonjour,
le document Word s'ouvre depuis la macro placée dans Excel
Par contre, il ne s'ouvre pas correctement car il ne fait pas appel à la base de donnée nécessaire pour le publipostage
Je n'ai donc pas accès au menu Publipostage dans Word
Par contre, si j'ouvre directement mon fichier Word( sans passer par le code vba), j'ai le message suivant qui me permet de selectionner ma base de donnée en cliquant sur oui:
Y a t il un moyen dans le code vba de lui dire d'exécuter cette commande en plus
Merci
re
Pas simple sans avoir le fichier word
Essayez peut être comme ceci en ajoutant ceci en dessous de la ligne objword.visible
ActiveDocument.MailMerge.OpenDataSource Name:="Chemin\nomfichierexcel.xlsm"
Chemin est le chemin complet du répertoire où se trouve votre fichier excel
Nomfichierexcel est le nom de votre fichier excel
Sinon essayez aussi avec l'enregistreur Auto d'excel pour voir les lignes de code qu'excel génère
Bonjour Dan,
1) J'ai essayé avec le code que vous m'avez donné mais comme vous le supposiez cela ne fonctionne pas
La requête SQL ne se lance pas
Je vous joins le fichier Word si cela peut aider
2) J'ai une dernière requête concernant l'onglet BaseDonnées
J'ai créé un formulaire de recherche qui me permet de retrouver un dossier via le numéro
Avec ce formulaire, j'aimerais pouvoir saisir des infos supplémentaires dans les colonnes R, S, T U V (qui sont vides)
Je n'arrive pas à ajouter ces informations via le bouton "ENTRER" figurant sur mon formulaire de recherche au bon patient sélectionné
Pourriez vous m'aider à compléter le code de la procédure "CbtEntréeCR_Click()"
Je vous remercie de votre aide particulièrement efficace qui m'a permis de faire de grandes avancées dans mon projet
Bien cordialement
re
1) J'ai essayé avec le code que vous m'avez donné mais comme vous le supposiez cela ne fonctionne pas
Déjà il faudrait que votre fichier word soit mentionné avec le même nom. Le fichier que vous postez n'a pas le même que ce qui mentionné dans le code
Si vous cliquez sur Oui cela donne quoi ?
2) J'ai une dernière requête concernant l'onglet BaseDonnées
Avec ce formulaire, j'aimerais pouvoir saisir des infos supplémentaires dans les colonnes R, S, T U V (qui sont vides)
Je n'arrive pas à ajouter ces informations via le bouton "ENTRER" figurant sur mon formulaire de recherche au bon patient sélectionné
C'est normal puisque vous n'avez pas les objets textbox dans votre usf pour compléter votre feuille