Créer une ou plusieurs lignes en VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ff145bv

XLDnaute Junior
Bonjour,

Dans un tableau, j'ai deux colonnes.

L'une d'elle contient des noms, l'autre des valeurs.

Robert....|...0
Charles...|...1
Simon.....|...0
Étienne...|...2
Marcel....|...2


😕 Je ne parviens absolument pas (malgré des heures passées sur ce problème) à créer une macro en VBA qui me permettrait d'ajouter dans les deux colonnes autant de case vierges (pas de lignes complètes) que le précise le nombre à droite. Ici, il s'agirait de créer les cellules en-dessous et non au-dessus des cellules concernées.

Ainsi, le tableau ci-dessus deviendrait :

Robert....|...0
Charles...|...1
.............|.....<< 1 cellule vide
Simon.....|...0
Étienne...|...2
.............|.....<< 1 cellule vide
.............|.....<< 1 cellule vide, soit 2 au total
Marcel.....|...2
..............|....<< 1 cellule vide
..............|....<< 1 cellule vide, soit 2 au total

Pourriez-vous m'aider ?

D'avance je vous en remercie car je frise la crise de nerfs. 😱

PS : Désolé pour la mise en forme mal foutue des cellules, je ne suis pas parvenu à en faire une présentation correcte dans l'éditeur de texte du forum.
 
Dernière édition:
Re : Créer une ou plusieurs lignes en VBA

Bonsoir,
Ici rajout des cellules entre les A2 et B10
Code:
Sub inser()
For i = 10 To 2 Step -1
z = Cells(i - 1, 2).Value
If z <> 0 Then
Range(Cells(i, 1), Cells((i + z - 1), 2)).Insert
End If
Next
End Sub
A+
kjin
 
Re : Créer une ou plusieurs lignes en VBA

Bonsoir ff145bv,

Le fichier joint règle-t-il ton problème ?

Cordialement.

Papou-net, déjà merci pour ta superbe démonstration de savoir-faire.

Petit souci (je ne suis décidément pas doué 😱), je ne parviens pas à adapter ton code à la réalité de mon problème. J'avais en effet cherché à le simplifier pour l'explication mais ce n'était pas une bonne idée.

Mon tableau réel répond donc à ces contraintes :
- Les cellules à décaler sont en colonnes AL (nom) et AM (prénom).
- Les valeurs sont en colonnes AN.
- Les entêtes (qui ne participent donc pas au décalage) occupent les lignes 1 & 2
- Les infos (concernées par le décalage) démarrent à la ligne 3.

Merci encore pour ton aide. 😉
 
Re : Créer une ou plusieurs lignes en VBA

Bonjour,
Tu n'avais pas précisé que tu avais une 3e colonne à décaler, néanmoins on ne sait toujours pas si le décalage doit s'effectuer sur toute la colonne ou sur un nb de lignes précis, j'ai donc arrêter la macro à la ligne 10
A adapter donc
Merci à jean-marcel pour la rectification
Code:
Sub inser()
For i = [COLOR="Blue"]10[/COLOR] To 4 Step -1 'change le 10 par la dernière ligne
z = Cells(i - 1, 39).Value
If z <> 0 Then
Range(Cells(i, 38), Cells((i + z - 1), 40)).Insert Shift:=xlDown
End If
Next
End Sub
A+
kjin
 
Re : Créer une ou plusieurs lignes en VBA

Pour être encore plus précis.

J'ai un classeur avec deux feuilles. Chacun est accessible à un opérateur de saisie différent qui ne doit pas pouvoir modifier les infos de l'autre.
Sur la première feuille, des données sont rentrées dans les colonnes A à AK. Sur la seconde, les données sont rentrées dans les colonnes AL et AM.
Comme il faut que les deux tableaux présentent les mêmes infos, les cellules A à AK de la feuille 2 viennent de la feuille 1 et les cellules AL et AM de la feuille 1 viennent de la feuille 2.
Le problème, c'est qu'il y a régulièrement des modifications sur la feuille 1. Des nouveaux arrivants qui doivent être intégrés à l'ordre alphabétique et d'autres qui partent et sont classés en fin de tableau. Sur la feuille 2, les cellules A à AK sont évidemment aussitôt modifiées... mais pas les cellules AL et AM. Cela crée donc des décalages qui faussent toutes les données.
J'ai donc imaginé qu'en déterminant la position (le numéro de ligne) avant et après le tri alphabétique sur la feuille 1, je pourrai savoir pour chaque ligne s'il elle avait été "déplacée" ou non et de combien de positions (vers le haut ou vers le bas). Ce sont les nombres dont je parle pour la colonne AN.
Dans mon esprit, une macro peut alors me permettre d'imposer aux colonnes AL et AM de la feuille 2 exactement les mêmes déplacements qu'aux cellules A à AK de la feuille 1.

J'espère avoir été totalement clair.

Ai-je fait le bon choix ? Y a-t-il un meilleur moyen ?
Quel serait le code le plus approprié pour cette dernière macro sur la feuille 2 ?

Merci d'avance si vous pensez pouvoir m'aider car je suis toujours dans le potage...
 
Re : Créer une ou plusieurs lignes en VBA

Re, -- parce que moi j'ai déjà pris la peine de te dire bonjour une première fois --
Au risque que tu ne prennes pas la peine de me répondre
...
Comme il faut que les deux tableaux présentent les mêmes infos, les cellules A à AK de la feuille 2 viennent de la feuille 1 et les cellules AL et AM de la feuille 1 viennent de la feuille 2...
Je suppose que tu as mis des formules pour ça
Si oui il eut été bien de les voir
Si non, il est grand temps d'en prévoir pour t'y retrouver
Sinon excel est bien plus doué que moi, il sait trier des données par ordre alphabétique
A+
kjin
 
Re : Créer une ou plusieurs lignes en VBA

Bonjour,
Tu n'avais pas précisé que tu avais une 3e colonne à décaler, néanmoins on ne sait toujours pas si le décalage doit s'effectuer sur toute la colonne ou sur un nb de lignes précis, j'ai donc arrêter la macro à la ligne 10
A adapter donc
Merci à jean-marcel pour la rectification
Code:
Sub inser()
For i = [COLOR="Blue"]10[/COLOR] To 4 Step -1 'change le 10 par la dernière ligne
z = Cells(i - 1, 39).Value
If z <> 0 Then
Range(Cells(i, 38), Cells((i + z - 1), 40)).Insert Shift:=xlDown
End If
Next
End Sub
A+
kjin

C'est vrai que je ne l'avais pas dit. C'est pour ça que j'ai envoyé ces messages correctifs. Il s'avère effectivement que ce sont les lignes 3 à 502 qui sont concernées par ce reclassement. Merci beaucoup.
 
Re : Créer une ou plusieurs lignes en VBA

Désolé kjin, je suis un peu obnubilé par mon problème et j'en oublie les formes élémentaires de la politesse.
"Bonjour" donc à toi et à tous ceux qui gentiment m'apportent leurs lumières.

Par ailleurs, j'ai évidemment des formules, mais elles sont basiques et je n'ai donc pas jugé utile de les préciser. Elles sont principalement de deux formes :
- Type "=Feuil1!M8" pour les recopies de cellules d'une feuille à l'autre
- Type "=LIGNE()-2" pour déterminer le positionnement d'une ligne
De plus, dans ma macro de tri alphabétique sur la page 1, je commence par copier les positions "initiales". Puis, par collage spécial, je ne récupère que les valeurs. Ensuite, je trie. J'ai donc alors des positions "finales". La différence entre ces deux valeurs pour chaque ligne me donne la mesure du décalage que j'évoque depuis le début.

Est-ce assez explicite ?

Merci encore pour ton aide.
 
Re : Créer une ou plusieurs lignes en VBA

Bonjour à tous,

Je reconnais qu'il aurait été plus pertinent que je donne tous les aspects de mon problème dès le début, mais l'un de vous pourrait-il m'aider avec toutes les précisions que j'ai maintenant données ?

En effet, la solution de "boucle" proposée par kjin et Jean-Marcel me dépasse et je ne parviens pas à l'adapter à ma situation. Et si je comprends mieux la structure proposée par Papou-net, j'ai le même souci d'adaptation.

Désolé donc d'être à ce point à la ramasse... mais je suis vraiment tout à fait près à apprendre et à mettre en pratique toutes vos solutions.

HELP, please...

Merci d'avance.
 
Re : Créer une ou plusieurs lignes en VBA

Bonsoir ff145bv,

Le fichier joint règle-t-il ton problème ?

Cordialement.

Bonjour Papou-net,

Dans ton code VBA, je reste coincé par les lignes suivantes :
For l = 1 To ActiveCell.Offset(-1, 1)
ActiveCell.EntireRow.Insert

Pour la première, je ne comprends pas d'où vient le l de l'égalité ainsi que la position où nous ramène le couple de coordonnées.
Pour la seconde ligne, y a-t-il moyen de ne pas décaler toute la ligne mais seulement certaines colonnes ?

Par avance, merci pour ton aide.
 
Re : Créer une ou plusieurs lignes en VBA

Bonsoir,
Si tu n' identifies pas tes saisies avec une clé unique (comme sur les véritables BD) tu risques d'avoir quelques soucis !
Par ailleurs, lorsque tu tries tes données, il faut sélectionner tout ton tableau et non pas la moitié, sinon comment t'y retrouver !
J'ai mis des formules RECHERCHEV pour que lorsque l'on saisie des données dans une feuille elles soient reportées sur l'autre feuille, mais référencées par rapport à la clé.
Evidemment, il faut une colonne supplémentaire, mais à mon humble, avis il n'y a pasd'autre issue.
A+
kjin
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
498
Réponses
0
Affichages
387
Réponses
3
Affichages
546
Retour