Précise la différence de besoin avec la personne qui a fait la demande.Bonjour, je rentre exactement le même besoin pour un tableau de suivi. Mais je ne comprends pas la macro pour pouvoir l'adapter à mon cas. Quelqu'un peu m'aider.
Ici on vient insérer a partir de la ligne 6, une ou plusieurs lignes en fonction de la différence de mois entre la date actuelle et la date renseignée et donc décaler toute la suite du tableau.
On vient également préremplir les champs en fonction des cellules B2 a E2.
Ici on déclare les variable que nous allons utiliser et on leur alloue un espace mémoire en fonction de leur dimension
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim I As Long, nMois As Long Dim Mois As Integer
Cette ligne calcule et stocke le delta mois, donc le nombre de lignes a ajouter
Code : Sélectionner tout - Visualiser dans une fenêtre à part nMois = DateDiff("m", Range("D2"), Range("E2"))
Cette ligne commande l'insertion du nombre de lignes décidé juste précédemment avant la 6eme ligne de la feuille.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Rows(6 & ":" & 6 + nMois).Insert
Ces lignes représente la boucle qui va nous permettre de préremplir les champs de chaque ligne inséré.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 For I = 6 To 6 + nMois Range("A" & I) = DateSerial(Year(Range("D2")), Month(Range("D2")) + Mois, 28) Range("A" & I).NumberFormat = "m/d/yyyy" Range("B" & I) = Range("B2") Range("C" & I) = Range("C2") Range("D" & I) = Range("D2") Range("E" & I) = Range("E2") Mois = Mois + 1 Next
Voila tu as tous les éléments.
A+
CB
Re bonjour,
je suis bluffé, j'ai rien compris . Je t'avoue que mon niveau en macro est limité. du coup j'ai joint le fichier avec en vert ce qu'il faut dupliquer avec les date de la première ligne.
Sincèrement est ce compliqué ? Je peux le faire seule.
J'ai ouvert le fichier et il me semble que la problématique n'est pas la même.Du coup j'ai joint le fichier avec en vert ce qu'il faut dupliquer avec les date de la première ligne.
Le sujet ici c'est de faire de l'incrémentation automatique de base de données avec des données variables qui sont rentrées par l'utilisateur en entrée.
Je ne comprends pas du tout ce que tu veux faire toi.
Bonjour Christian,
Je vais essayer d'être un peu plus claire.
tu vois la première ligne: il y a une date de fin et date de début de versement de prime. je voudrais que la macro duplique autant de ligne que de mois (différence entre les deux dates). qu'il duplique la ligne entière pour chaque mois de paiement et que dans date de début et fin de chaque ligne il change la période de mois
exemple versement du 01-01-2021 au 31-03-2021
Je veux donc qu'il duplique 3 lignes avec en date pour la première ligne 01-01-2021 au 31-01-2021, 2ème ligne 01-02-2021 au 28-02-2021 etc. Et en dupliquant tout le contenu de la première ligne sauf les dates qu'il doit changer automatiquement.
Est ce claire ?
Merci pour ton aide
Re,
Ce que je n'arrive pas a comprendre c'est ou compte tu rentrer les valeurs input ? Un userform ? Des cellules ? Si on a pas ces infos on peut pas faire de code.
CB
Salut.
Perso, je m'appuierais sur des tableaux structurés.
Ici, j'ai le tableau nommé Tableau3 et les cellules de saisie en B1:B3. Voici comment on pourrait remplir le tableau avec une ligne par mois entre la première et la dernière date (B1 et B2).
Le code suivant manipule les références structurées du tableau pour alléger ton code et permettre une correspondance claire des colonnes du tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub Addrows() Dim d As Date Dim Index As Long d = Application.EoMonth(Range("b1").Value, 0) Do While d <= Range("b2").Value Index = Range("tableau3").ListObject.ListRows.Add().Index Range("tableau3[date]")(Index).Value = d Range("tableau3[Personne]")(Index).Value = Range("b3").Value d = Application.EoMonth(d, 1) Loop Range("b1:b3").ClearContents End Sub
Tu pourras adapter cela facilement à tous tes tableaux en rendant la procédure d'ajout générique
Ceci te permet d'ajouter une ligne dans un tableau structuré et de la remplir avec les données d'un tableau "clé/valeur" comprenant les paires "Nom de colonne/Valeur à insérer".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Function AddValues(Tablename As String, Values) Dim i As Long Dim Index As Long Index = Range(Tablename).ListObject.ListRows.Add.Index For i = LBound(Values) To UBound(Values) Step 2 Range(Tablename & "[" & Values(i) & "]")(Index).Value = Values(i + 1) Next End Function
Tu peux alors utiliser cette fonction pour ajouter les données dans ton tableau. Sur base de l'illustration ci-dessus, tu utiliseras cette fonction générique comme suit:
Donc, pour ajouter une ligne avec des données dans un tableau, il te suffit de connaître le nom du tableau, les noms des colonnes et de créer ton tableau (array).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub Addrows() Dim d As Date d = Application.EoMonth(Range("b1").Value, 0) Do While d <= Range("b2").Value AddValues "tableau3", VBA.Array("Date", d, "Personne", Range("b3").Value) ' <== Cette ligne appelle la procédure générique d'ajout d = Application.EoMonth(d, 1) Loop Range("b1:b3").ClearContents End Sub
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Voici
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
3 cellules à remplir et un bouton à cliquer... Ça fonctionne très bien !J'ai pas réussi à l'utiliser.
Mr Fauconnier t'as seulement donné de quoi ajouter des lignes au tableau avec en entrée le mois de début, le mois de fin et le nom de la personne.Comment l'intégrer ton a mon tableau
Je pense qu'il faut maintenant que tu adapte ce qu'il t'as envoyé. Tu ajoute tous les autres entêtes au tableau du classeur qu'il t'a envoyés, Si les champs sont répétitifs mais fixes, tu crée une ligne, tu rentre a la main ce que tu veux (avec un "=" devant et des guillemets pour forcer en champ texte) et quand tu va ajouter des lignes, ça va automatiquement se copier aussi par défaut. Ça fonctionne également pour les champs calculés (Ex: référence a une autre cellule d'une autre feuille ou fonction mathématique), il faut cependant penser a ajouter un "$" devant les lignes si la référence est une cellule fixe. Les listes déroulantes qui font partie des validations de données et donc de la mise en forme (je crois) sont aussi incrémentées avec la création de la ligne du tableau.
Si tu fais du cas par cas sur un champ, tu rempli une fois les lignes incrémentées, sans mettre de "=" et les valeurs ne seront pas incrémentées lors de l'ajout de nouvelles lignes.
Soit tu adapte a ton classeur, mais il va falloir que tu comprenne ce qui a été fait, notamment le changement de nom des plages de cellules et celui du tableau, etc... C'est plus compliqué.
Dans tous les cas le but ici c'est d'aider, pas de faire les choses a la place des gens étant donné que les personnes qui aident le font bénévolement et surtout dans l'idée de pouvoir aider un maximum d'autres personnes. Si tu a le niveau débutant sur excel il faudrait peu être déjà lire ou regarder quelques tutos pour avoir les bases car on pourra pas le faire pour toi ni tout expliquer.
Dans cette discussion, je donne une solution générique utilisant un tableau Excel pour les paires "Colonne/Valeur"...
Il faut bien comprendre le code qui est donné. Au départ, lorsque l'on débute, on peut avoir l'impression qu'il est plus simple de dupliquer les lignes comme dans certaines solutions qui t'ont été données, en manipulant les cellules de la feuille. C'est, pour moi, une fausse impression de facilité car elle va t'obliger à dupliquer les lignes pour chacun de tes tableaux dans des procédures qui vont être lourdes à maintenir.
Pourquoi? D'abord, parce qu'avec cette solution, tu as autant de procédures que tu as de tableaux, et dans chaque procédure autant de lignes que tu as de colonnes et donc de cellules de formulaire. Si demain tu ajoutes une paire Formulaire/Tableau, tu vas devoir copier-coller du code puis manipuler plein de lignes pour arriver à tes fins.
De plus, les solutions proposées n'utilisent pas les tableaux structurés, et perso, je n'admets pas cela en 2021. Cela signifie que si demain, tu insères une colonne en début de tableau, tu vas devoir "t'amuser" à décaler tous les indices de colonnes dans ton code.
Si tu reprends mon code AddRows et que tu mets un point d'arrêt sur la première ligne de la procédure, tu pourras suivre l'exécution du code en pas à pas. Cela te permettra de voir quelles sont les lignes de code qui dépendent de ta structure (formulaire et tableau => AddRows) et ce qui est générique (AddValues)
@Christian... Si je peux me permettre
Dans le cadre d'un formulaire placé dans une feuille Excel, je préfèrerais mette la cellule au format TEXTE. Ca évite l'oubli de "forcer le format"... Plutôt que forcer le format avec "=..." (ce qui, dans un tableau structuré, ne pourra pas fonctionner à cause du mécanisme des colonnes formulées), je préfère, lorsque la saisie d'un texte est ponctuelle, faire précéder ledit texte d'une apostrophe '.
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
@Pierre Merci du retour
Je parlais d'une valeur fixe pour toutes les lignes, avec le "=" on demande au tableau de l'appliquer sur toutes les lignes, avec un simple ' on lui indique que la valeur est un champs texte et qu'elle est unique a la cellule du tableau, donc pas incrémentée dans les cellules ajoutées par la suite ou précédemment.
Quand je parlais de "forcer en string" c'était plus dans le sens ou après le "=" on entre un texte et pas une formule.
Bien sur quand c'est ponctuel on peut donner le format texte avec l'apostrophe sans le "=", ce que j'ai formulé en disant :
Après c'est vrai que je ne m'y connais pas bien en tableau structurés qui sont pourtant très utiles, on s'en rend compte quand on apprend a les utiliser, tant en simple tableur qu'en VBASi tu fais du cas par cas sur un champ, tu rempli une fois les lignes incrémentées, sans mettre de "=" et les valeurs ne seront pas incrémentées lors de l'ajout de nouvelles lignes.
CB
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager