Microsoft 365 VBA - Coller la valeur d'une cellule d'une autre feuille...

13Hubert

XLDnaute Junior
Bonjour,

Je me trouve dans la Feuil2 et je tente de lancer une macro depuis un bouton qui lancera les actions suivantes :

1/ incrémenter de "1" la valeur de la cellule A2 de la Feuil1,
2/ copier la valeur de cette cellule et la coller dans la première cellule vide de la colonne B de la Feuil2

En l'état, ma macro fait le job dans la Feuil1.
Comment lui "expliquer" que l'incrémentation et la copie doivent se faire dans la Feuil1 et que seuls la recherche de la première cellule vide de la colonne B et le collage devront se faire dans la Feuil2, SVP ?

De même, j'ai maginé que la saisie pourrait se faire manuellement. Mais l'information relative au nombre à écrire devrait aussi se récupérer dans la cellule de la Feuil 1.
Ma seconde macro bute alors sur le même problème...

Je pourrais activer les feuilles l'une après l'autre en fonction de mes besoins mais j'ai lu que ce n'était pas très orthodoxe et alourdirait ma macro (Même si elle est très légère...)...
Et comme je tente de bien faire les choses...

Merci pour votre aide
 

Pièces jointes

  • Incrémentation.xlsm
    19.9 KB · Affichages: 3
Solution
Bonjour @13Hubert

Evidemment, si ma logique n'est pas...logique ☺️, n'hésite pas à me corriger.
Quelques remarques :

1)
Dim Cel As Integer
Dim ValFeuille1 As Integer
==> Voir la limite des variables
1698828319838.png

Dit autrement si la valeur de "ValFeuille1" et ou de "Cel" depasse 32767 tu auras un plantage

2)
ValFeuille1 = Worksheets("Feuil1").Range("A2")
ValFeuille1 = ValFeuille1 + 1
Ceci peut se faire en 1 fois
ValFeuille1 = Worksheets("Feuil1").Range("A2") + 1

3)
Cel = Range("B" & Rows.Count).End(xlUp).Row
Cells(Cel + 1, 2).Value = ValFeuille1
Tu veux connaitre la dernière ligne de la cellule "B2" mais de quelle feuille ?
Il serait bon de préciser la feuille car tu peux avoir des...

Phil69970

XLDnaute Barbatruc
Bonjour @13Hubert

Voici un exemple que tu copies n'importe ou dans la feuille1 ou dans la feuille2 ou dans un module comme tu veux

VB:
Sub test()
ValFeuille1 = Worksheets("Feuil1").Range("A2")
ValFeuille2 = Worksheets("Feuil2").Range("A2")

MsgBox "Feuille 1 dans la cellule A2 ==> " & ValFeuille1 & Chr(13) & Chr(10) & "Feuille 2 dans la cellule A2 ==> " & ValFeuille2
End Sub

Et tu lances la macro tu vois que la macro peut connaitre la valeur d'une cellule quelque soit la feuille
Et pas besoin de select ou activate ;)
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Re

Idem que mon 1er post copie le code ou tu veux et regarde ce qui ce passe
VB:
Sub test1()

ValFeuille1 = Worksheets("Feuil1").Range("A2")
ValFeuille2 = Worksheets("Feuil2").Range("A2")

MsgBox "Feuille 1 dans la cellule A2 ==> " & ValFeuille1 & Chr(13) & Chr(10) & "Feuille 2 dans la cellule A2 ==> " & ValFeuille2

ValFeuille1 = ValFeuille1 + 1
ValFeuille2 = ValFeuille2 + 1

MsgBox "Maintenant je rajoute 1 à mes valeurs " & Chr(13) & Chr(10) & "Feuille 1 dans la cellule A2 ==> " & ValFeuille1 & Chr(13) & Chr(10) & "Feuille 2 dans la cellule A2 ==> " & ValFeuille2

Worksheets("Feuil1").Range("A2") = ValFeuille1
Worksheets("Feuil2").Range("A2") = ValFeuille2

End Sub

Merci de ton retour
 
Dernière édition:

13Hubert

XLDnaute Junior
Voilà Phil69970 !

Grâce à tes commentaires, j'ai encore appris sur VBA ! 🙏

Comme ma priorité est d'aller coller la valeur de la Feuil1 dans la première cellule vide de la colonne B de la Feuil2, j'ai donc pris les éléments que tu m'as communiqués et j'ai écrit ceci avec, et ça fonctionne parfaitement.
Evidemment, si ma logique n'est pas...logique ☺️, n'hésite pas à me corriger.
Encore merci beaucoup !!
Hubert

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

Sub Incrnum()

Dim Cel As Integer
Dim ValFeuille1 As Integer

ValFeuille1 = Worksheets("Feuil1").Range("A2")
ValFeuille1 = ValFeuille1 + 1
Worksheets("Feuil1").Range("A2") = ValFeuille1

Cel = Range("B" & Rows.Count).End(xlUp).Row
Cells(Cel + 1, 2).Value = ValFeuille1

MsgBox "Le dernier inscrit aura le n° " & ValFeuille1


End Sub
 

Phil69970

XLDnaute Barbatruc
Bonjour @13Hubert

Evidemment, si ma logique n'est pas...logique ☺️, n'hésite pas à me corriger.
Quelques remarques :

1)
Dim Cel As Integer
Dim ValFeuille1 As Integer
==> Voir la limite des variables
1698828319838.png

Dit autrement si la valeur de "ValFeuille1" et ou de "Cel" depasse 32767 tu auras un plantage

2)
ValFeuille1 = Worksheets("Feuil1").Range("A2")
ValFeuille1 = ValFeuille1 + 1
Ceci peut se faire en 1 fois
ValFeuille1 = Worksheets("Feuil1").Range("A2") + 1

3)
Cel = Range("B" & Rows.Count).End(xlUp).Row
Cells(Cel + 1, 2).Value = ValFeuille1
Tu veux connaitre la dernière ligne de la cellule "B2" mais de quelle feuille ?
Il serait bon de préciser la feuille car tu peux avoir des surprises dans certains cas

Pour avoir la 1ere cellule vide de la colonne B souvent on fait directement
Cel = Range("B" & Rows.Count).End(xlUp).Row + 1
Cel aura directement le numéro de la 1ere ligne vide

4) Il est souvent plus visuel et pratique de nommer ses variables avec des noms qui te parle.
Exemple: DerLig ou DerLigne à la place de cel
Mais rien d'obligatoire

Voici une aide au nommage :

Tu peux t'en inspirer librement et adapter bien sur

Sur la base de ton fichier je te propose une façon de faire parmi d'autre

VB:
Sub Incrnum()
Dim ValFeuille1&, Derlig&

ValFeuille1 = Worksheets("Feuil1").Range("A2") + 1
Worksheets("Feuil1").Range("A2") = ValFeuille1
Derlig = Worksheets("Feuil2").Range("B" & Rows.Count).End(xlUp).Row + 1
Worksheets("Feuil2").Cells(Derlig, 2).Value = ValFeuille1

MsgBox "Le dernier inscrit aura le n° " & ValFeuille1
End Sub

Code légèrement modifié à11h12 ;)

Merci de ton retour
 
Dernière édition:

13Hubert

XLDnaute Junior
Re-Phil69970

Dit autrement si la valeur de "ValFeuille1" et ou de "Cel" depasse 32767 tu auras un plantage
Oui ! J'avais bien retenu toutes les limites de la variable de type Integer.
Mes numéros ne risquent pas de dépasser 32767 !
Sinon, ça voudra dire que je suis milliardaire en Euros ! 😁
Pas de souci avec ça, donc !

Ceci peut se faire en 1 fois
ValFeuille1 = Worksheets("Feuil1").Range("A2") + 1
Ah ben oui ! En effet, ça me semble plus simple ainsi... ☺️

Tu veux connaitre la dernière ligne de la cellule "B2" mais de quelle feuille ?
Il serait bon de préciser la feuille car tu peux avoir des surprises dans certains cas
Ok ! Je comprends et appliquerai à l'avenir.

Pour avoir la 1ere cellule vide de la colonne B souvent on fait directement
Cel aura directement le numéro de la 1ere ligne vide
En fait, je voudrais connaître la dernière ligne de la colonne "B" à partir de "B2" de la feuille depuis laquelle je lance la macro.
Pour mon exemple, c'est la Feuil1.
Et j'ai précisé B2 (dans mon fichier final ce sera "B8") parce-qu'avant cette cellule, j'ai une cellule vide.
Mais peut-être m'y suis-je mal pris... 🤔
4) Il est souvent plus visuel et pratique de nommer ses variables avec des noms qui te parle.
Exemple: DerLig ou DerLigne à la place de cel
Mais rien d'obligatoire
Oui ! C'est ce que je m'efforce de faire, en général... 😊

Voici une aide au nommage :
Tu peux t'en inspirer librement et adapter bien sur
Wouaou !! Mais t'es une bible, toi !! 😮😀
Merci beaucoup ! J'ai de la lecture en prévision...

Sur la base de ton fichier je te propose une façon de faire parmi d'autre

VB:
Sub Incrnum()
Dim ValFeuille1&, Derlig&

ValFeuille1 = Worksheets("Feuil1").Range("A2") + 1
Worksheets("Feuil1").Range("A2") = ValFeuille1
Derlig = Range("B" & Rows.Count).End(xlUp).Row + 1
Cells(Derlig, 2).Value = ValFeuille1

MsgBox "Le dernier inscrit aura le n° " & ValFeuille1
End Sub
Je vais tester ça tout à l'heure et je reviens vers toi.

Merci encore beaucoup !!!
 

13Hubert

XLDnaute Junior
Vu !!
Tu as suivi ton propre conseil de cibler la feuille sur laquelle travailler... :)
Si je comprends bien, si la feuille active est différente de la Feuill2 (dans mon exemple), le code s'appliquera quand-même sans erreur de feuille... C'est ça ?
 

Phil69970

XLDnaute Barbatruc
Il est toujours préférable de dire expressément à excel la feuille ou tu veux que le code s'applique cela évite à excel d’interpréter avec le risque d'erreur que cela peut comporter dans certains

Exemple si je te dis va dans le placard chercher le sel si tu as du bon sens tu iras dans la cuisine mais si je connais pas ta maison je peux chercher dans le salon si je suis dans le salon !!! ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 935
Messages
2 093 741
Membres
105 805
dernier inscrit
belgacem.nahali