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

XL 2010 Fonction Si valeur =1 > duplication, Si vide > duplication depuis autre colonne ( si val = 1 également .. )

Xplorer

XLDnaute Nouveau
Bonjour !

Je me creuse la tête pour parvenir à réaliser une formule plutôt complexe.
entre la fonction SI, les SI imbriqués, et la fonction RECHERCHE, je ne vois toujours pas.

sur une feuille, dans une colonne, je voudrais pouvoir dupliquer une cellule d'une autre feuille, si la valeur de la cellule à droite = 1 ( depuis un menu déroulant ). Et Si autre valeur, pas de duplication. Ca j'y arrive.
Seulement, ça se complique, parce que si case vide ... je voudrais que ça enchaîne le même processus mais avec les cases des feuilles suivantes, du moment qu'elles ont une valeur 1 à droite.

Le but étant d'avoir dans UNE colonne un répertoire de cases dupliquées depuis plusieurs colonnes d'autres feuilles, si la valeur de leur menu déroulant = 1
Donc : toutes les cases concernées de la colonne 1 feuille 1 + toutes les cases concernées de la colonne 1 feuille 2 ... et ainsi de suite ... Le tout dans une seule colonne.

Avec les SI imbriqués, je n'arrive qu'à avoir une partie de la réponse malheureusement.

Voilà par quoi j'ai commencé :

=SI(Feuil1!A10=1;Feuil1!B10;"")

Ensuite :

=SI(Feuil2!A10=1;Feuil2!B10;SI(Feuil1!A10=1;Feuil1!B10;"")))

Sauriez-vous m'aider s'il vous plait ?
 

Xplorer

XLDnaute Nouveau


Aaaah je pense avoir une solution : simplement contourner le problème, copier coller les formules que vous avez développées dans ma version d'excell, je vais essayer :

 

Xplorer

XLDnaute Nouveau

Edit : Ben non, je n'y arrive pas, je ne sais pas ce qu'il se passe :

 

Xplorer

XLDnaute Nouveau
Re bonjour,
Lorsqu'un classeur contient des macros, il faut l'enregistrer en XLSM et non en XLSX.
Réessayez en enregistrant correctement
@+ Lolote83

Merci !

alors, j'ai pu copier - coller vos formules dans un "module", via Visual Basic, j'ai enregistré en Xlsm, les menus déroulants sont revenus, il n'y a pas de bouton "GO" ( qui sert à faire quoi au fait ? ) , mais quand dans les listes je change les catégories, de 1 à 4 etc .. ça ne change rien dans le répertoire.
Voilà l'excell que je viens de tester :
 

Pièces jointes

  • Répertoire si condition 2.xlsm
    15.9 KB · Affichages: 1

Lolote83

XLDnaute Barbatruc
Re bonjour,
Ton fichier en retour avec le bouton servant à lancer la macro.
Cependant, lors de l'enregistrement, j'ai le message suivant qui apparait.

Ce message est donc bien lié à ton fichier d'origine une nouvelle fois.
Stop pour moi ce soir. J'ai des amis qui viennent d'arriver à la maison.
Cordialement
@+ Lolote83
 

Pièces jointes

  • Copie de XPLORER - Répertoire si condition 2.xlsm
    30.8 KB · Affichages: 2

Xplorer

XLDnaute Nouveau

Oui je comprends, je vous souhaite une bonne soirée et merci pour votre aide.

Eh bien je ne sais pas quoi dire, les menus déroulant on re disparu, le bouton n'a pas d'effet, et pourtant alors que je n'avais aucune macro d'enregistrées dans mon premier fichier, à part les menus déroulants, je n'avais pas ce genre de message auparavant.
J'ai juste créé un fichier excell neuf, et puis des menus déroulants, pas plus.

Je ne sais pas du tout de quoi il est question, ce qu'excell essaye de dire, et comment arranger ça.
 

Lolote83

XLDnaute Barbatruc
Bonjour XPLORER,
Ne comprenant pas pourquoi par rapport à tes fichiers d'origines, j'avais non seulement le message cité au post#21 et tu rencontrais aussi des problèmes (perte menu déroulant, aucune action du bouton macro....), j'ai alors fait mon propre fichier basé sur tes données.
Teste le et dis moi si cela fonctionne
Bon dimanche
Cordialement
@+ Lolote83
 

Pièces jointes

  • Copie de XPLORER - Répertoire si condition V3.xlsm
    24.6 KB · Affichages: 3

Xplorer

XLDnaute Nouveau

Bonjour !! Merci infiniment !!

Alors oui ça marche !! quand j'appuie sur le bouton lancer le test, ça actualise les données selon la catégorie. C'est brillant !! Bravo

Le menu déroulant a disparu, mais je je pourrai le remettre comme je n'ai plus ces messages d'erreur.

J'aimerais appliquer ces principes à un autre excell, pour diviser des listes en 4 catégories, un onglet par catégorie ( pour après tenter de faire un diagramme de Gantt, ou PERT. se servant de cette matrice d'eisenhower en 4 catégories ) , que devrais-je faire ?

> copier coller les formules de ce module dans l'autre excell et l'adapter pour qu'il s'applique aux bonnes cases ?
En observant ces formules que vous avez écrites, je vois que vous avez même mis plein d'explications sur la droite, c'est génial ! Vraiment merci

> Concernant le bouton, je ne sais pas trop comment le "copier/coller" ..

Qu'est-ce que "Xong" ?
Edit : j'ai compris : "onglet"

xPreLig = 6
xDerLig = 13
xCpt = 0

>>> il n'y a pas besoin de spécifier ni les colonnes ni les feuilles pour ces lignes à tester ?

"On boucle sur tous les onglets du classeur"
>> Qu'entendez-vous par "boucle" ?



Case Is <> "REPERTOIRE", "Liste" 'Si Nom<>Répertoire ou Nom<>Liste
With Sheets(xOng.Name) 'On travaille dans l'onglet
For F = 1 To 2 'On boucle 2x (Car 2 tableaux)
For Each xCell In .Range(.Cells(xPreLig, F * 2), .Cells(xDerLig, F * 2)) 'On boucle le tableau

>>> J'essaye de mieux comprendre cette partie, comme j'ai une trentaine de listes qui ne sont pas les unes à côté des autres, dans une douzaine de feuilles différentes

Bon dimanche !!
 

Lolote83

XLDnaute Barbatruc
Bonjour XPLORER,
Concernant ta nouvelle demande, je te conseille de faire un nouveau message.
Par contre, et afin que tu ne t'embrouilles pas trop avec les termes, toute la partie VBA est appelée CODE.
Les formules sont réservées aux feuilles de calcul. Cela évite de faire des confusions.
Donc en ce qui me concerne, j'ai donc fait une macro (CODE).
Enfin, pour répondre à ta question sur les boucles.
Une boucle est une partie de code qui passe d'un élément x à y
Exemple 1
For F=1 to 10
etc etc etc
Next F
Cela veut dire que la variable F va tourner 10 fois en prenant les valeurs 1 puis 2 puis 3 puis 4 jusqu'à 10

Exemple 2
For Each xCell in range("A1:A10")
ext etc etc
Next xCell
Ici, la variable xCell va prendre les valeurs de la cellule A1, puis A2, puis A3 jusqu'à A10

Exemple 3
For Each xOng In ThisWorkbook.Sheets
etc etc etc
Next xOng
Ici, le code va parcourir l'ensemble des onglets du classeur et affecté à la variable xOng
Dans ton exemple, on aura xOng.name (pour récupérer le nom de l'onglet)
- Répertoire puis
- Feuil2 puis
- Feuil3 puis enfin
- Liste

Pour le bouton, j'ai simplement dessiné une forme (ici rectangle) et en faisant un clic-droit dessus, on y affecte une macro

puis tu choisis dans la liste de tes macros celle correspondant. Ici c'est TEST_XPLORER.



Enfin et pour finir, les variables sont libres de choix. C'est toi qui choisi le nom que tu souhaites.
@ Lolote83
 

Xplorer

XLDnaute Nouveau


Bonjour !! Merci pour les explications !!!

Oui, pour la suite de mon projet, je verrai si j'y arrive tout seul déjà, je ne comptais pas poster ça ici.

D'après ce que vous m'avez dit, si je veux appliquer ce code à ces listes ( plusieurs listes de ce genre dans une dizaine d'onglets :



Je devrais modifier ( en gras ) ces cases :

"
With Sheets(xOng.Name) 'On travaille dans l'onglet
For F = 1 To 4 'On boucle 2x (Car 2 tableaux)
For Each xCell In .Range("D10:A400+M10:M400+V10:V400") 'On boucle le tableau
If xCell.Offset(0, 1) = 1 Then 'Si la cellule de droite=1
xCpt = xCpt + 1 'On rajoute 1 au compteur
ReDim Preserve xTablo(1 To xCpt) 'On redimentionne le tableau virtuel incrémenté du compteur
xTablo(xCpt) = xCell.Value

.... Ce qui va amener à chercher dans les colonnes D,M,V ... de tous les onglets ( ou une sélection d'onglets en particulier pour éviter qu'excell cherche dans des onglets qui ne sont pas concernés ? ) , et si la valeur = 1 >> on boucle. etc

Et j'ai mis F=1 to 4 ... pour le cas oû il y a 4 colonnes.

Est-ce que je ne me trompe pas trop ?
 

Xplorer

XLDnaute Nouveau


Bonjour Lolote ! Après plus d'un mois sans pouvoir m'occuper de tout ça, je reviens sur cette macro que tu as créée et qui est géniale. Je cherche juste à comprendre quelques éléments qui la constituent, pour pouvoir modifier certaines formulations, et ainsi adapter la macro et mon excell.


Sub TEST_XPLORER()
Dim xTablo()
xPreLig = 6 'Première ligne à tester
xDerLig = 15 'Dernière ligne à tester
xCpt = 0 'Compteur à zéro (utile pour le tableau virtuel)

>> Est-ce qu'à la place de "xTablo" on peut écrire : telles colonnes de tels onglets ? ( comment ? ) Sinon ça pourrait générer des conflits, comme je peux avoir des "1" d'écrits, qui n'ont rien à voir avec ces catégories. Idéalement, j'aimerais pouvoir cibler certaines colonnes en particulier.

With Sheets("REPERTOIRE") 'On travaille sur l'onglet REPERTOIRE
.Range("C6:C100").ClearContents 'On efface les anciennes données (Ici C5:C100)
End With

>> Jusque là c'est clair, et à la place de "répertoire", je mettrai le nom de l'onglet de travail qui sera concerné.


For Each xOng In ThisWorkbook.Sheets 'On boucle sur tous les onglets du classeur
Select Case xOng.Name 'On récupère le nom de chaque onglet

>> Là encore, si je pouvais re cibler certaines colonnes de certains onglets en particulier, je ne sais simplement pas comment formuler ça... "(Feuil3!F!+Feuil2!G!+....)" par exemple ?

Case Is <> "REPERTOIRE", "Liste" 'Si Nom<>Répertoire ou Nom<>Liste

>> Là je comprends mal cette condition entre l'un et l'autre.

With Sheets(xOng.Name) On travaille dans l'onglet

>> Là encore, comment cibler plutôt certaines colonnes dans certains onglets en particulier, plutôt que "xOng" ..

For F = 1 To 2 'On boucle 2x (Car 2 tableaux)

>> Là, 1 t o 2 permet carrément de reconnaître les deux tableaux des colonnes B,C,D,E ? incroyable ! J'ai testé, avec "1 to 1" à la place, et effectivement ...

For Each xCell In .Range(.Cells(xPreLig, F * 2), .Cells(xDerLig, F * 2)) 'On boucle le tableau

>> Là, moins clair pour moi

If xCell.Offset(0, 1) = 1 Then 'Si la cellule de droite=1

>> Ok

xCpt = xCpt + 1 'On rajoute 1 au compteur

>> on rajoute une ligne dans le tableau de l'onglet répertoire, c'est ça ?

ReDim Preserve xTablo(1 To xCpt) On redimensionne le tableau virtuel incrémenté du compteur

>> Ok

xTablo(xCpt) = xCell.Value 'On inscrit la valeur de la cellule dans un tableau virtuel

>> hmm ok, ça duplique dans répertoire la valeur de la cellule à gauche de la case ayant la valeur "1".

Et est-ce que ça peut aussi du même coup dupliquer la valeur de la cellule à droite de "1" ?

Et est-ce qu'on peut y adjoindre par exemple un diagramme deux cases plus à droite, basé sur la valeur de cette dernière cellule de droite ? ( une valeur en temps ) . par exemple comme ça :


End If 'Fin Si
Next xCell 'Fin Boucle
Next F 'Fin Boucle
End With 'Fin travail sur l'onglet
End Select

>> Là c'est un peu comme du html, et on ferme toutes les parenthèses impliquée, c'est ça ?

Next xOng 'Fin Boucle
With Sheets("REPERTOIRE") 'On travaille sur l'onglet REPERTOIRE
For F = 1 To UBound(xTablo) 'On boucle sur toutes les valeurs du tableau virtuel .Range("C" & 5 + F) = xTablo(F) 'On inscrit a/c de la cellule C6 le résultat du tableau virtuel
Next F 'Fin boucle
End With 'Fin travail sur l'onglet
End Sub

>> Là c'est seulement à la fin que l'on spécifie la destination de toutes ces analyses >> que ça se retranscrive dans la colonne C de l'onglet répertoire, à partir de la ligne 5 ?
Pas compris "Ubound".

Merci !
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…