Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Merci pour votre réponse , ci joint le fichier
 

Pièces jointes

  • Classeur V3.xlsm
    71.1 KB · Affichages: 17

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: 8

Discussions similaires

Réponses
4
Affichages
430
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…