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 :

image

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:

image

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

image

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

image

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

Rechercher des sujets similaires à "incrementer lignes tableau feuille"