XL 2016 Saisir des données dans une feuille non active

Julieneymery

XLDnaute Nouveau
Bonjour,

Je voudrais pouvoir lancer ce code sans passer par
Worksheets("ma feuillle").Activate
et je ne trouve pas la solution...
Merci pour vtre temps


Private Sub Valider_et_saisir_Click()
Call Module3.Déprotege

'declaration d'une variable'
Dim i As Integer 'i est la variable integer est un entier dim =déclaration
'affectation de la variable
i = 1 'commance dans la premiére ligne
'on boucle chacune des celulle de la colonne B (les nom)
Do While Cells(i, 2) <> "" 'fait jusqu'a diférent de chant vide

Cells(i, 2).Offset(1, 1).Select 'se positionne sur i colonne 1 se décale de 1 ligne et 1 colonne et selectionne la celulle

i = i + 1 'on incrémente le conteur de la boucle, on lui dit de passer à la ligne d'apres soit ligne i+1 ligne

Loop 'fini l'instruction do de la boucle
'Affiche dans la base les données du formulaire
ActiveCell.Value = Me.Txtinitiales 'la valeur de la celulle active est = a la textbox de ce formulaire(me)
ActiveCell.Offset(0, 1).Value = Me.Txtnom
ActiveCell.Offset(0, 2).Value = Me.Txtprenom
ActiveCell.Offset(0, 4).Value = Me.Txtentreprise
ActiveCell.Offset(0, 5).Value = Me.Txtsiret
ActiveCell.Offset(0, 6).Value = Me.Cbxopco
ActiveCell.Offset(0, 8).Value = Format(Me.Txtdebut, "DD/MM/YYYY") 'format de date
ActiveCell.Offset(0, 9).Value = Format(Me.Txtfin, "DD/MM/YYYY") 'format de date
ActiveCell.Offset(0, 21).Value = Me.Cbxdiplome
ActiveCell.Offset(0, 22).Value = Me.Cbxsite
ActiveCell.EntireRow.Font.ColorIndex = 0
ActiveCell.EntireRow.Font.Strikethrough = False

Worksheets("THR").Activate

Dim a As Integer 'i est la variable integer est un entier dim =déclaration
'affectation de la variable
a = 1 'commance dans la premiére ligne
'on boucle chacune des celulle de la colonne B (les nom)
Do While Cells(a, 2) <> "" 'fait jusqu'a diférent de chant vide

Cells(a, 1).Offset(1, 1).Select 'se positionne sur i colonne 1 se décale de 1 ligne et 1 colonne et selectionne la celulle

a = a + 1 'on incrémente le conteur de la boucle, on lui dit de passer à la ligne d'apres soit ligne a+1 ligne

Loop 'fini l'instruction do de la boucle
'Affiche dans la base les données du formulaire
ActiveCell.Offset(0, 1).Value = Me.Txtnom
ActiveCell.Offset(0, 2).Value = Me.Txtprenom
ActiveCell.EntireRow.Font.ColorIndex = 0
 

vgendron

XLDnaute Barbatruc
Bonjour

avec un fichier exemple, ce serait mieux

mais. d'une facon générale
pour écrire dans une feuille NON active, tu as deux solutions
ex: la feuille 1 est active, et tu veux ecrire dans la feuille 2

VB:
sheets("Feuille2").range("A2")="le texte à ecrire"

ou alors
VB:
with sheets("Feuille2")
   .range("A2")="le texte a ecrire"
end with

avec le with ==>ca evite de devoir ecrire le nom de la feuille destination pour toutes les instructions d'écriture.. surtout si tu en as 50
MAIS: ne pas oublier le "." pour indiquer qu'il s'agit bien de la range de la feuille définie par le with
ex:
VB:
with sheets("Feuille2")
   .range("A2") = "j'ai bien ecris sur la feuille 2"
   range("A2")= "la, je n'écris que sur la feuille active: feuil1"
end with
 

Julieneymery

XLDnaute Nouveau
Bonjour

avec un fichier exemple, ce serait mieux

mais. d'une facon générale
pour écrire dans une feuille NON active, tu as deux solutions
ex: la feuille 1 est active, et tu veux ecrire dans la feuille 2

VB:
sheets("Feuille2").range("A2")="le texte à ecrire"

ou alors
VB:
with sheets("Feuille2")
   .range("A2")="le texte a ecrire"
end with

avec le with ==>ca evite de devoir ecrire le nom de la feuille destination pour toutes les instructions d'écriture.. surtout si tu en as 50
MAIS: ne pas oublier le "." pour indiquer qu'il s'agit bien de la range de la feuille définie par le with
ex:
VB:
with sheets("Feuille2")
   .range("A2") = "j'ai bien ecris sur la feuille 2"
   range("A2")= "la, je n'écris que sur la feuille active: feuil1"
end with
Merci pour votre réponse , ci joint le fichier
 

Pièces jointes

  • Classeur V3.xlsm
    71.1 KB · Affichages: 13

vgendron

XLDnaute Barbatruc
Regarde cette macro:
tu peux remplacer ta macro existante par celle -ci
VB:
Private Sub Valider_et_saisir_Click()
Call Module3.Déprotege

With Sheets("Base de données")
    .ListObjects("Tbase").ListRows.Add 'ajoute une ligne à la table "TBase")
    lastline = .ListObjects("Tbase").DataBodyRange.Rows.Count 'récupère le nombre de ligne au total ==> la dernière est vide
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 1) = Me.Txtnom
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 2) = Me.Txtprenom
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 4) = Me.Txtentreprise
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 5) = Me.Txtsiret
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 6) = Me.Cbxopco
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 8) = Format(Me.Txtdebut, "DD/MM/YYYY") 'format de date
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 9) = Format(Me.Txtfin, "DD/MM/YYYY") 'format de date
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 21) = Me.Cbxdiplome
    .ListObjects("Tbase").DataBodyRange.Cells(lastline, 22) = Me.Cbxsite
End With

With Sheets("thr")
    .ListObjects("Tthr").ListRows.Add
    lastline = .ListObjects("Tthr").DataBodyRange.Rows.Count
    .ListObjects("Tthr").DataBodyRange.Cells(lastline, 1) = Me.Txtnom
    .ListObjects("Tthr").DataBodyRange.Cells(lastline, 1) = Me.Txtprenom
End With

With Sheets("caisse à outils")
    .ListObjects("TCaisse").ListRows.Add
    lastline = .ListObjects("TCaisse").DataBodyRange.Rows.Count
    .ListObjects("TCaisse").DataBodyRange.Cells(lastline, 1) = Me.Txtnom
    .ListObjects("TCaisse").DataBodyRange.Cells(lastline, 2) = Me.Txtprenom
    .ListObjects("TCaisse").DataBodyRange.Cells(lastline, 3) = Me.Cbxdiplome
    .ListObjects("TCaisse").DataBodyRange.Cells(lastline, 4) = Me.Cbxsite
    .ListObjects("TCaisse").DataBodyRange.Cells(lastline, 6) = Me.Txtalertecaisse
End With


Me.Txtinitiales = "" 'la valeur de la celulle active est = a la textbox de ce formulaire(me)
Me.Txtnom = ""
Me.Txtprenom = ""
Me.Txtentreprise = ""
Me.Txtsiret = ""
Me.Cbxopco = ""
Me.Txtdebut = ""
Me.Txtfin = ""
Me.Cbxdiplome = ""
Me.Cbxsite = ""
Me.Txtalertecaisse = ""

End Sub

1) pas besoin d'activer les feuilles
2) pas besoin de boucler pour savoir qu'elle est la dernière ligne
3) on bénéficie des avantages offerts par les tables excel== tant qu'à faire
4) suffit d'ajouter une ligne, puis de remplir la table avec les infos de ton formulaire

je n'ai regardé que ca pour l'instant.. mais il me semble que quand tu ajoutes une assistante, tu ne vérifies jamais si elle n'existe pas déjà.
 

vgendron

XLDnaute Barbatruc
ton fichier en retour
1) j'ai corrigé les indices: mon code précédent ne mettait pas les infos au bon endroit==> vérifie quand meme
2) tu as deux boutons: Quitter/Valider et saisir/valider

les deux font la meme chose à part que le premier quitte le formulaire
==> pas la peine de réécrire le meme code pour les deux boutons.. dans le bouton "Quitter", suffit d'appeler le bouton saisir

je pense que tu vas pouvoir faire la meme chose sur les autres formulaires
 

Pièces jointes

  • Classeur V3.xlsm
    58.7 KB · Affichages: 3

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
293 048
Messages
1 928 125
Membres
183 855
dernier inscrit
safelhr