Copier/Coller une plage de données si deux conditions sont respectées

  • Initiateur de la discussion Initiateur de la discussion opposom
  • Date de début Date de début

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 !

opposom

XLDnaute Nouveau
Bonjour au Forum,

Je souhaiterais répondre à une problématique qui pour moi est compliquée à réaliser avec les formules basiques d'Excel et je me vois dans l'obligation d'utiliser VBA.
Seulement étant débutant j'arrive à déchiffrer plus ou moins bien les codes mais les construire c'est une autre paire de manches c'est dur 🙂.

Voici la problématique:
Deux feuilles A et B (A= Base de données, B= fiche de renseignements)
Sur feuille B 2 cellules, l'une date, l'autre étudiant.
Feuille A plusieurs colonne dont une avec les dates, l'autre avec les étudiants.

je souhaiterais réaliser une macro qui exécute cette action :
- chercher date inscrite dans feuille B dans feuille A. Si valeur fausse msgbox, si valeur vrai alors chercher etudiant inscrit dans feuille B dans feuille A.
-sélectionner les lignes correspondantes (réponds au deux conditions Date et Etudiant)
- coller dans feuille B.

J'espère avoir été claire, je vous joint mon fichier avec un bout de code trouvé sur internet et réapproprié pour mon cas mais qui ne fonctionne qu'a moitié.

Je vous remercie d'avance pour l'aide,

bon week end à tous,

Claire
 

Pièces jointes

Re : Copier/Coller une plage de données si deux conditions sont respectées

Bonjour opposom, et bienvenu sur le forum
Remplace ta condition par
Code:
If .Cells(Lig, Col).Value = Sheets("Renseignement").Range("B3").Value Then
Tu n'a pas de feuille "Feuil2"
D'aure part j'initialiserai la variable Numlig à 5 ou 6 pour éviter d'ecraser tes données saisies en lignes 3 et 4.
Cordialement
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Bonsoir Efgé,

tout d'abord merci pour cette réponse rapide, j'ai effectué les modifications mais rien ne se passe. En ce qui concerne la feuille 2 je l'ai remplacer dans le code par sa nomination.

La démarche que je veux effectuée, c'est copier le tableau présent dans la feuille "Base de données" dans la feuille "Renseignement" dans une plage définie quand il répond aux deux conditions. Or le code ici copie tout les lignes à partir de la première ligne de la feuille "Renseignement". or je suis sur que si je comprenais la ligne du code qui initialise et défini la première cellule dans laquelle le tableau doit être copier cela marcherais mieux.

Pourriez vous m'indiquer cette ligne SVP
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Re
Pas trop le temps (il faut que je me mette au diner 😀)
Une proposition qui fonctionne. Regarde les changements effectués. Je reviendrais demain ou lundi pour savoir si c'est bon.
Code:
Sub Rectangle2_Clic()
  Dim Lig     As Long
  Dim Col     As Long
  Dim NbrLig  As Long
  Dim NumLig  As Long
  Col = 3               ' colonne de la donnée non vide à tester
  NumLig = 6
  With Sheets("Base de données")     ' feuille source
  NbrLig = .Cells(65536, Col).End(xlUp).Row
  For Lig = 1 To NbrLig
    If .Cells(Lig, Col).Value = Range("B3").Value And .Cells(Lig, Col + 1).Value = Range("B4").Value Then
      .Rows(Lig).EntireRow.Copy
      NumLig = NumLig + 1
      Cells(NumLig, 1).Select
      ActiveSheet.Paste
    End If
  Next
  End With
End Sub
Cordialement
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Merci beaucoup, vous avez répondu exactement comme je le voulais et cela fonctionne. A moi de travailler pour que l'on puisse mettre des lignes supplémentaires sans que cela efface les lignes précédemment écrites.

je réitère mes remerciements et bonne préparation de diner,

Claire
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Bon j'ai essayé de comprendre le code car l'opération copier/coller marche, cependant je souhaiterais coller ma sélection à partir d'une cellule particulière par exemple "G6". Or, le seul résultat auquel je parviens c'est un message d'erreur comme quoi la zone de copier n'est pas de la même dimension que la zone de coller. Je pense que j'essaye de coller la sélection dans une seule cellule c'est pour ça elle doit se sentir un peu à l'étroit 😛.
Dim Lig As Long
Dim Col As Long
Dim NbrLig As Long
Dim NumLig As Long

Col = 3 ' colonne de la donnée non vide à tester
NumLig = 6


With Sheets("Base de données") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row

For Lig = 1 To NbrLig
If .Cells(Lig, Col).Value = Range("B3").Value And .Cells(Lig, Col + 1).Value = Range("B4").Value Then
.Rows(Lig).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Sheets("Renseignement").Range("D10").Select
Activecell.Paste

End If

Next
End With


La où je bloque c'est aussi de lui dire que lorsque l'on clique à nouveau sur le bouton que la nouvelle sélection se copie à la suite de la précédente. Ce problème ayant été soulevé plusieurs fois il ne m'a pas été difficile de trouver un code. D'après ce que j'ai compris du code il démarre à la dernière ligne de la colonne et dès qu'il rencontre une cellule pleine il colle à la suivante. Cependant ne comprenant déjà pas ou lui dire de coller la sélection (cellule G6 par exemple) je ne sais pas quand et où insérer se code.

je suis désolée car franchement malgré mes lectures récentes sur VBA (depuis hier) je n'arrive pas à avancer. de plus je vais me permettre d'être exigeante avec l'âme charitable qui m'apportera son aide car je souhaiterais qu'elle inscrive des commentaires sur les lignes de code, cela me permettra de comprendre la logique et d'avancer toute seule sans que la réponse au moindre petit problème soit le forum.

Merci de votre compréhension, je sais que je suis exigeante mais j'aime comprendre ce que je fais ça m'évite d'avoir l'impression que le code m'est mâchée (malgré que cela soit vrai🙂) et que le forum soit un supermarché.
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Bonjour opposom, le fil, le forum
Cet état d'esprit particulièrement positif mérite qu'on s'y arrète.
Je regarde les différentes demandes et reviens avec une proposition.
Cordialement
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Je vous remercie Efgé pour l'intérêt que vous avez porté à ma demande, je vous remercie d'avance pour le travail que vous aller effectuer.

Cordialement,

Claire
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Re
Voici la proposition.
J'ai commenté le code et ai gardé le même type de codage (on pourrais faire autrement mais cela deviendrais vite complexe)
En espérant que cela t'iras.
Cordialement
 

Pièces jointes

Re : Copier/Coller une plage de données si deux conditions sont respectées

Tout d'abord merci beaucoup Efgé, le résultat répond parfaitement à mes attentes, vos explications sont claires et précises. Cependant, il me reste encore quatre interrogations:
- Je n'arrive pas bien à cerner la variable lig, car celle ci est présente dans la commande cells(lig, col) et à la fin du code après le Next. Or, col a été défini mais pas lig, aucune valeur;
- La variable Numlig n'est elle pas de trop vu qu'elle n'apparait nul part?
- Vous avez utilisé Cells(Rows.count, 3), le Rows.count sert à définir la ligne où doit être collé la sélection, mais pourquoi ne pas dire seulement Rows
- dernière question comment marquer que la question a été résolue?

merci encore Efgé pour l'aide, il ne me reste plus qu'a vous souhaiter une bonne fin de week end.

Cordialement,

Claire
 
Re : Copier/Coller une plage de données si deux conditions sont respectées

Re
- Je n'arrive pas bien à cerner la variable lig, car celle ci est présente dans la commande cells(lig, col) et à la fin du code après le Next. Or, col a été défini mais pas lig, aucune valeur;
Col est définie par Col = 3, c'est la colonne de référence.
Lig est définie par For lig = 1 to Nbrlig.
For est une boucle. Lig prendra toutes les valeurs de 1 à Nbrlig :
A la première boucle Lig = 1 à la deuxième Lig = 2 jusqu'a arriver à NbrLig (qui porte le numéro de la dernière ligne remplie en feuille Base de données Colonne Col (3))

- La variable Numlig n'est elle pas de trop vu qu'elle n'apparait nul part?
En effet Numlig ne sert plus à rien, j'ai oublié de supprimer sa déclaration.

- Vous avez utilisé Cells(Rows.count, 3), le Rows.count sert à définir la ligne où doit être collé la sélection, mais pourquoi ne pas dire seulement Rows
Non, non,non, Erreur d'interprétation 🙂:
Code:
NbrLig = .Cells(Rows.Count, Col).End(xlUp).Row
En francais : La ligne (.Row) de la première cellule non vide de la colonne 3 (Col) en partant de la dernière (Rows.Count) et en remontant (.End(xlup)).

- dernière question comment marquer que la question a été résolue?

Il y a eu longtemps débat sur le sujet des discutions "résolues". pour ma part je ne pense pas que cela soit utile (un fil pouvant toujours être réutilisé, même dans X années et il ne sera plus "Résolu"

Ne pas hésiter à poser d'autres questions au besoin.
Ne pas hésiter, non plus à me tutoyer 😉,
Cordialement
 
Dernière édition:
Re : Copier/Coller une plage de données si deux conditions sont respectées

re

et bien encore une fois merci de m'éclairer sur ce langage tout nouveau qu'est le VBA. Je vais travailler sur ce code pour arriver à faire d'autre choses qui me sont utile pour arriver au résultat escompté.

Je te souhaite une bonne fin de week end et je n’hésiterais pas à poser d'autre questions sur ce code tout au long de mon travail.

Cordialement,

Claire
 
- 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

Retour